Partilhar via


Balanceamento de carga

O balanceamento de carga, em sentido amplo, é um dos pilares do tempo de Orleans execução. Orleans O tempo de execução tenta tornar tudo equilibrado, uma vez que o balanceamento permite maximizar o uso de recursos e evitar pontos críticos, o que leva a um melhor desempenho, além de ajudar na elasticidade. O balanceamento de carga se Orleans aplica em vários locais. Abaixo está uma lista não exaustiva de locais onde o tempo de execução 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 um posicionamento equilibrado e evita pontos críticos para a maioria dos cenários.
  2. Um mais avançado ActivationCountBasedPlacement tenta equalizar o número de ativações em todos os silos, o que resulta em uma distribuição mais uniforme de ativações entre silos. Isto é especialmente importante para a elasticidade.
  3. O serviço de diretório grain é construído sobre uma tabela de hash distribuída, que inerentemente é equilibrada. O serviço de diretório mapeia grãos para ativações, cada silo possui parte da tabela de mapeamento global e essa tabela é globalmente particionada de forma equilibrada em todos os silos. Usamos hashing consistente com buckets virtuais para isso.
  4. Os clientes se conectam a todos os gateways e distribuem suas solicitações entre eles, de forma equilibrada.
  5. O serviço de lembrete é um serviço de tempo de execução particionado distribuído. A atribuição de qual silo é responsável por servir qual lembrete é balanceado em todos os silos por meio de hashing consistente, assim como no diretório grain.
  6. Os componentes críticos de desempenho dentro de um silo são particionados e o trabalho entre eles é balanceado localmente. Dessa forma, o tempo de execução do silo pode utilizar totalmente todos os núcleos de CPU disponíveis e não criar gargalos no silo. Isso se aplica a todos os recursos locais: alocação de trabalho para threads, soquetes, responsabilidades de expedição, filas, etc.
  7. O QueueBalancerBase equilibra a responsabilidade de extrair eventos de filas de persistência em silos no cluster.

O equilíbrio não significa necessariamente perda de localidade. Pode-se ser equilibrado e ainda manter uma boa localidade. Por exemplo, quando balancear significa fragmentação/particionamento, você pode particionar a responsabilidade por uma determinada tarefa lógica, mantendo a localidade dentro de cada partição. Isto aplica-se tanto ao equilíbrio local como ao balanceamento distribuído.