Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O balanceamento de carga, em sentido amplo, é um dos pilares do runtime do Orleans. O Orleans runtime tenta manter tudo equilibrado, pois o balanceamento maximiza o uso de recursos, evita pontos de acesso, leva a um melhor desempenho e ajuda na elasticidade. O balanceamento de carga Orleans se aplica em vários locais. Veja abaixo uma lista não completa de onde o runtime executa o balanceamento:
- A estratégia de posicionamento do ator padrão é aleatória; novas ativações são colocadas aleatoriamente entre silos. Isso resulta em posicionamento equilibrado e impede hotspots para a maioria dos cenários.
- Uma estratégia mais avançada ActivationCountBasedPlacement tenta equalizar o número de ativações em todos os silos, resultando em uma distribuição mais uniforme entre silos. Isso é especialmente importante para a elasticidade.
- O serviço de diretório de grãos se baseia em uma tabela de hash distribuída, que é inerentemente equilibrada. O serviço de diretório mapeia grãos para ativações. Cada silo possui uma parte da tabela de mapeamento global, e essa tabela é particionada de maneira equilibrada globalmente entre todos os silos, usando hash consistente com buckets virtuais.
- Os clientes se conectam a todos os gateways e espalham suas solicitações entre eles de forma equilibrada.
- O serviço de lembrete é um serviço de runtime distribuído e particionado. A atribuição de qual silo é responsável por servir qual lembrete é equilibrado em todos os silos por meio de hash consistente, assim como o diretório de grãos.
- Componentes críticos ao desempenho em um silo são particionados e o trabalho entre eles é balanceado localmente. Isso permite que o runtime do silo utilize totalmente todos os núcleos de CPU disponíveis e evite gargalos no silo. Isso se aplica para todos os recursos locais: alocação de trabalho para threads, soquetes, responsabilidades de despacho, filas etc.
- O QueueBalancerBase balanceia a responsabilidade de extrair eventos de filas de persistência distribuídas por silos no cluster.
Balanceamento não significa necessariamente perda de localidade. Você pode alcançar o equilíbrio mesmo mantendo uma boa localidade. Por exemplo, quando o balanceamento envolve fragmentação/particionamento, você pode particionar a responsabilidade por uma determinada tarefa lógica, preservando a localidade em cada partição. Isso se aplica ao balanceamento local e distribuído.