Compartilhar via


Balanceamento de carga

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:

  1. 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.
  2. 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.
  3. 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.
  4. Os clientes se conectam a todos os gateways e espalham suas solicitações entre eles de forma equilibrada.
  5. 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.
  6. 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.
  7. 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.