Na era da Big Data somos obrigados a criar sistemas cada vez mais robustos que saibam lidar com grande variação de demanda. Serviços na internet, por exemplo, possuem uma variação tão grande de uso, que gera dificuldades para controlar os acessos nos momentos de pico. Os sistemas que precisam ter controle de demanda, mas não o fazem, podem ter inúmeros problemas como, por exemplo, gerar um tempo de resposta inaceitável para seus usuários ou até mesmo fazer com que o sistema fique fora do ar.
Para tentar amenizar o problema de variação de demanda, muitas empresas acabam criando sistemas altamente complexos que realizam a monitoração através de métricas, como medições de CPU e memória para distribuir a carga de trabalho. Com estas métricas, serviços podem ser capazes de mudar seu comportamento caso precisem lidar com muitos acessos, repassando trabalho de uma máquina para outra, caso atinja um limite de CPU ou até mesmo recusando novas requisições para evitar a degradação do sistema, para citar alguns casos. Existem ainda sistemas que trabalham com arquiteturas de prioridade, tratando primeiramente dos processos com maior demanda, tentando amenizar o grande número de acessos.
Existem, contudo, desafios para os sistemas listados acima: testar estas medições é uma tarefa complexa e, por isso, muitas vezes acabam sendo testadas apenas com simulações básicas. Além disso, exigirem manutenções delicadas quase que constantemente. Será que realmente é necessário adicionar tanta complexidade para distribuir trabalho em nosso sistema?
A resposta é: nem sempre é preciso. Uma alternativa é utilizar uma técnica chamada de Round Robin. Esta alternativa foi classificada como uma das mais simples e robustas entre as atuais técnicas utilizadas para problemas de distribuição de carga. Em palavras simples, Round Robin é um sistema que consiste em alguns elementos, sendo cada elemento representado por um processo ou até mesmo uma máquina de um cluster, formando uma fila circular.
No exemplo da figura acima, vamos supor que tenhamos um cluster com 4 máquinas. Cada nova requisição recebida em nosso cluster seria atendida por um destes nós. A primeira seria atendida pelo nó 1, a subsequente pelo nó 2, a seguinte pelo nó 3 e daí em diante até voltar ao nó 1 e reiniciar o processo. Com esta técnica é possível distribuir o trabalho de forma equilibrada para cada máquina disponível sem precisar calcular métricas de balanceamento. Existem inúmeras variações do algoritmo de Round Robin, uma delas, por exemplo, é trabalhar com filas circulares dando uma fatia de tempo de CPU para cada processo.
Neste artigo só estamos discutindo sobre a ideia mais simples, que já é bastante eficaz para a construção de API’s que precisam, por exemplo, de distribuição de carga. Esta técnica remove a necessidade de criar sistemas para monitoração dinâmica e são obviamente construídas de forma muito mais rápida e prática das que fazem balanceamento através de medições de recursos. Esta técnica foi criada antes mesmo de existirem computadores e é até hoje utilizada em larga escala por inúmeros sistemas com diferentes propósitos.
—–
Artigo de Breno Riba, publicado originalmente no iMasters.