O que é o sistema Google Borg?
(credenciais mais completas - passei cinco anos na equipe do Google Borg, incluindo vários como líder técnico do agente do nó)
Borg é um Cluster OS que o Google usa para gerenciar cargas de trabalho internas.
Quando você tem um computador padrão, e quer executar múltiplos processos nele, o sistema operacional é o que lida com o agendamento - ele determina qual processo tem acesso a qual processador em um determinado momento, qual processo tem acesso a quais partes da memória, decide quais processos devem ser congelados ou morrer em casos onde há falta de recursos.
Borg faz a mesma coisa na escala de um cluster - milhares de máquinas com muito boa conectividade de rede interna. Quando você quer rodar um "serviço" - que é o equivalente a um "daemon" em uma máquina normal, algo que deve permanecer o tempo todo - você "rodá-lo no Borg" - ou seja, você diz ao agendador de cluster Borg que você quer, digamos, 200 cópias do binário que determina o serviço. O agendador Borg identifica as máquinas no cluster que terão a capacidade disponível para executar seu serviço (possivelmente despejando cargas de trabalho de baixa prioridade se necessário), e envia um pedido para executar o serviço aos agentes de nó nessas máquinas (note que mais de uma cópia de seu serviço pode pousar na mesma máquina, embora o agendador se certifique de que não haja muitas cópias pousando em uma máquina, ou - em geral - em um domínio de falha, para proteger contra falhas correlatas).
Os agentes do nó configuram o ambiente para o seu serviço (muito semelhante a um container de doca, feito com cgroups, chroot e um monte de montagens), acionam o processo, e então monitoram o uso dos recursos (porque reagir à escassez de recursos a curto prazo tem que acontecer no nó, por razões de latência) e reagem se os recursos - CPU ou memória - começarem a se esgotar (ou porque alguém excede seus limites pré-estabelecidos, ou porque o agendador sobrecarregou a máquina).
Uma coisa similar acontece para uma carga de trabalho "batch" - ou seja, uma peça de computação que deve ser executada até a conclusão; exceto que o agendador é muito mais agressivo com o agendamento batch, e o agente do nó é muito mais agressivo em despejá-lo / congelá-lo; a suposição é que o batch está lá para absorver a "capacidade de reserva" dos serviços enquanto os serviços não precisam dele, mas está tudo bem despejá-lo e atrasar a conclusão por um tempo se os serviços acabarem precisando das reservas. Este truque funciona, porque os serviços normalmente precisam ser superprovisionados (porque você precisa se preparar para picos na demanda), enquanto se espera que os trabalhos em lote verifiquem seu trabalho periodicamente, para que eles não percam tudo se despejados de tempos em tempos; e isso significa que ou os serviços pagam apenas pelo que usam (e não pelo que precisam reservar), ou esse lote é efetivamente gratuito (dependendo de como as respectivas demandas se comportam).
Mais detalhes podem ser encontrados neste artigo: Gestão de clusters em grande escala no Google com Borg
Artigos semelhantes
- O que é Borg no Google?
- O que o sistema "3 ações" do Pathfinder 2e faz melhor do que o sistema "Standard, Move, Swift/Minor" do D&D3/4/5?
- Por que o sistema SI de unidades é melhor do que o sistema MKS?
- Qual sistema operacional smartwatch é melhor de acordo com você, Android Wear ou o sistema operacional Apple Watch, e por quê?