Entendendo distribuição uniforme na prática
Achei que ia demorar pra entender isso, mas o problema começou quando precisei implementar um balanceador de carga simples num projeto interno. O requisito era distribuir requisições entre N servidores de forma que nenhum ficasse sobrecarregado enquanto os outros ociosos. A solução óbvia parecia ser rolar um número aleatório, mas os dados mostravam clusters estranhos - alguns servidores com 40% a mais de tráfego que a média. Perdi duas semanas debugando até perceber que minha biblioteca de randomização não era tão uniforme quanto eu imaginava.
O que é uniformemente distribuído mesmo?
Uniformemente distribuído significa que cada evento ou resultado tem exatamente a mesma probabilidade de ocorrer. Não é "mais ou menos igual" - é matematicamente igual em cada iteração. No contexto de distribuição de carga, se você tem 5 servidores e uma distribuição verdadeiramente uniforme, cada um recebe exatamente 20% das requisições ao longo do tempo. Não 19%, não 21%. Exatamente 20%. O conceito aparece em várias áreas, mas o mais prático é em algoritmos de load balancing e geração de números pseudoaleatórios. Quando falamos de uma sequência uniforme, estamos dizendo que a probabilidade condicional de qualquer resultado dado qualquer histórico é sempre a mesma. Isso é diferente de "parecer aleatório" - dados podem parecer aleatórios sem serem uniformes.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Método round-robin versus randomização
No meu caso, o workaround foi trocar randomização por round-robin com peso. Ao invés de chamar Math.random() pra cada requisição, mantive um índice circular que avançava sequencialmente pelos servidores. Funciona perfeitamente quando o throughput é constante. O problema é que requer state management - precisa lembrar qual foi o último servidor usado. Em ambientes serverless onde cada request é isolado, isso vira dor de cabeça. A diferença prática entre distribuição uniforme e aleatória é crucial. Aleatório pode (e vai) criar clusters - exatamente o que eu vi. Uniforme garante equilíbrio, mas pode ser previsível se o padrão for descoberto. Para load balancing interno, isso não importa. Para criptografia, importa muito.
Limitações que ninguém conta
Distribuição uniforme perfeita é impossíveles em sistemas distribuídos reais. Latência de rede varia, servidores têm capacidades diferentes, conexões persistentes criam afinidade. Minha experiência mostra que even com round-robin puro, a distribuição observada nunca fica dentro de 2% da média esperada em cargas variáveis. O problema agrava quando você tem servidores heterogêneos - um mais rápido que os outros. Round-robin simples ainda distribui igualmente, mas o throughput real fica desigual. A solução que funcionei foi adicionar pesos baseados em capacidade de cada instância, calculados dinamicamente via health checks a cada 30 segundos.
Não recomendo usar distribuição uniforme para generadores de senhas ou seed de criptografia. A previsibilidade matemática é exatamente o que hackers exploram. Use CSPRNGs em vez disso - são mais lentos, mas garantem imprevisibilidade real mesmo quando a distribuição estatística parece uniforme.