Escolha do hardware
29.12.2022
Introdução
Como rodar mais de 200 câmeras em um servidor de 30.000 rublos?
Frequentemente nos perguntam quantas câmeras é possível adicionar ao Yucca em um servidor com meus recursos de hardware. A resposta é sempre individual e é impossível dar uma resposta padrão para todos. Muito depende do tipo de câmera, do bitrate, do processador e de outras variáveis. Por isso, decidimos reunir algumas estatísticas do servidor de um dos nossos clientes, com capturas de tela e explicações detalhadas, para que cada um possa ter uma ideia de quantos recursos são necessários no seu caso específico...
Publicamos estatísticas semelhantes sobre a execução em um Raspberry Pi 4
Nossa instalação
Então, está instalado o Yucca versão 0.7.2, com 154 câmeras conectadas, quase 4 anos de profundidade de arquivo, e o bitrate do fluxo das câmeras em torno de 1M (megabit por segundo). Além do Yucca, nesse mesmo servidor está instalado o postgresql, como banco de dados.
(Se você quiser o mesmo painel, as instruções estão disponíveis no link)
Quais recursos são usados para tudo isso e qual é a taxa de utilização deles?
Placa-mãe (Motherboard)
Z8NR-D12 - este é um chassi bem antigo, que pode ser comprado no mercado de usados por cerca de 20.000 rublos.
captura de tela de um site de anúncios conhecido
Nessa opção, talvez faltem 2 fontes de alimentação, mas é possível procurar chassis semelhantes, por exemplo, da Supermicro.
Processador (CPU)
Intel(R) Xeon(R) CPU X5690 @ 3.47GHz - 2 processadores com 12 threads cada, totalizando 24. É possível comprar um desses no Avito por cerca de 3000 rublos a unidade.
A CPU é um dos recursos mais importantes; é nela que você sempre vai esbarrar ao aumentar o número de fluxos. Afinal, quanto mais fluxos, mais processos, e mais tempo de CPU é necessário. Por isso, mais atenção deve ser dada não à utilização, como na 1ª captura de tela, mas ao LA, ou Load Average (se você não sabe o que é isso, leia aqui), 2ª captura de tela.
Vamos então observar a utilização nas últimas 24 horas; há picos, mas a utilização média fica em torno de 30%

No gráfico de LA nas últimas 24 horas, a situação é parecida, em torno de 30% - 40%

Lembrando que esse é o indicador para 150 câmeras, ou seja, o servidor está cerca de metade cheio e, em teoria, é possível adicionar mais a mesma quantidade de câmeras, desde que tenham um bitrate semelhante.
Não recomendamos adicionar câmeras em servidores onde o LA já está acima de 1. Com LA > 1, isso significa que a fila continuará crescendo e problemas de desempenho e degradação são quase inevitáveis; é necessário mais CPU ou mais um servidor Yucca. Por isso, ao trabalhar com um grande número de clientes e câmeras, sempre monitore suas instalações e acompanhe os indicadores.
Memória RAM
9965447-034.A00LF - memória ECC de servidor, disponível no Avito por cerca de 1000 rublos por placa.
No nosso caso, 16 gigabytes (8 por soquete de processador) são mais que suficientes, com uma folga de 3x, e a utilização fica em torno de 4 gigabytes.
Disco
Array de discos é um tema que merece um artigo à parte sobre como fazer e como não fazer; vou explicar como calcular manualmente, de forma aproximada, o volume previsto, mas você sempre pode encontrar uma calculadora online para o seu bitrate e tipo de array.
Nesse ambiente, nosso cliente hospeda apenas câmeras públicas, e a perda inesperada do arquivo dessas câmeras não é crítica para ele. Portanto, se o seu arquivo tem grande valor, não faça como está descrito aqui.
ST10000VN0004-1Z - Seagate IronWolf 10Tb NAS.
4 unidades em configuração Raid0 resultam em 37 terabytes, com custo em torno de 20.000 rublos por unidade.
$ df -h | grep yucca
/dev/md0 37T 15T 20T 43% /opt/yucca/data/alloc
$ cat /etc/mdadm/mdadm.conf
DEVICE partitions
ARRAY /dev/md0 level=raid0 num-devices=4 metadata=1.2 name=yucca:0 UUID=xxx
Claro que, por ser Raid0, não temos absolutamente nenhum problema de desempenho ao gravar o arquivo simultaneamente de 150 câmeras, e nem com 300 haveria problema, mas a tolerância a falhas é zero, então cada um deve escolher a solução que for melhor para o seu caso.
Como calcular o espaço necessário para o arquivo
Vamos supor que temos 150 câmeras idênticas com bitrate de fluxo de 2M, e queremos gravar o arquivo com profundidade de 14 dias:
- 2 megabits por segundo, ou seja, 2/8 = 0,25 megabyte
- 0.25 * 60 * 60 = 900 megabytes por hora
- 900 * 24 = 21600 megabytes => 21,6 gigabytes por dia por 1 câmera
- 21,6 * 14 (dias) = 302,4 gigabytes em 14 dias por 1 câmera
- 302,4 * 150 = 45360 gigabytes => 45,36 terabytes
Esse cálculo simples permite estimar aproximadamente quanto espaço o nosso arquivo vai ocupar. Também vale considerar que os arrays não devem ser preenchidos até 99% da capacidade, sendo melhor manter pelo menos 5-10% livre.
Conclusões
Assim, temos chassi + processadores + memória RAM por cerca de 30.000 rublos e o array de discos por 40.000. No total, cerca de 70.000 rublos por uma solução completa e funcional, com capacidade para vender e prestar serviços a clientes com suporte para até 300 câmeras.
Vamos fantasiar um pouco...
A licença do Yucca custa 4000 rublos por mês e não temos limite de câmeras; se você tiver um chassi moderno e 10000 câmeras, não vamos te limitar :) A tarifa média por câmera com arquivo de 14 dias entre os provedores atualmente é de ~ 500-700 rublos por mês, ou seja, é possível ganhar 150.000 rublos por mês com esse servidor, sem grandes custos, com retorno do investimento em 1 mês, claro, se você já tiver 300 clientes prontos 🙂
Obrigado a todos que leram até o fim!
Você pode enviar uma pergunta pelo formulário de contato no site, escrevendo para info@yucca.app ou no chat do Telegram da comunidade.

