Limitando o Gerenciador de Recursos de Cluster do Service Fabric
Mesmo que você tenha configurado o Gerenciador de Recursos de Cluster corretamente, o cluster pode ser interrompido. Por exemplo, pode haver falhas simultâneas de nó e domínio de falha - o que aconteceria se isso ocorresse durante uma atualização? O Gerenciador de Recursos de Cluster sempre tenta corrigir tudo, consumindo os recursos do cluster tentando reorganizar e corrigir o cluster. Os aceleradores ajudam a fornecer um backstop para que o cluster possa usar recursos para estabilizar - os nós voltam, as partições de rede se recuperam, os bits corrigidos são implantados.
Para ajudar com esses tipos de situações, o Gerenciador de Recursos de Cluster do Service Fabric inclui vários aceleradores. Estes aceleradores são todos martelos bastante grandes. Geralmente, eles não devem ser alterados sem um planejamento e testes cuidadosos.
Se você alterar os aceleradores do Gerenciador de Recursos de Cluster, deverá ajustá-los à carga real esperada. Você pode determinar que precisa ter alguns aceleradores no lugar, mesmo que isso signifique que o cluster leva mais tempo para se estabilizar em algumas situações. O teste é necessário para determinar os valores corretos para os aceleradores. Os aceleradores precisam ser altos o suficiente para permitir que o cluster responda às alterações em um período razoável de tempo e baixos o suficiente para realmente evitar muito consumo de recursos.
Na maioria das vezes, vimos clientes usarem limitadores porque já estavam em um ambiente com restrição de recursos. Alguns exemplos seriam largura de banda de rede limitada para nós individuais ou discos que não são capazes de criar muitas réplicas com monitoração de estado em paralelo devido a limitações de taxa de transferência. Sem limitações, as operações podem sobrecarregar esses recursos, fazendo com que as operações falhem ou sejam lentas. Nessas situações, os clientes usavam aceleradores e sabiam que estavam estendendo a quantidade de tempo que o cluster levaria para atingir um estado estável. Os clientes também entenderam que poderiam acabar rodando com menor confiabilidade geral enquanto estavam limitados.
Configuração dos aceleradores
O Service Fabric tem dois mecanismos para limitar o número de movimentos de réplica. O mecanismo padrão que existia antes do Service Fabric 5.7 representa a limitação como um número absoluto de movimentações permitidas. Isso não funciona para clusters de todos os tamanhos. Em particular, para clusters grandes, o valor padrão pode ser muito pequeno, retardando significativamente o balanceamento mesmo quando necessário, enquanto não tem efeito em clusters menores. Esse mecanismo anterior foi substituído pela limitação baseada em porcentagem, que se dimensiona melhor com clusters dinâmicos nos quais o número de serviços e nós muda regularmente.
Os aceleradores são baseados em uma porcentagem do número de réplicas nos clusters. Os aceleradores baseados em porcentagem permitem expressar a regra: "não mova mais de 10% das réplicas em um intervalo de 10 minutos", por exemplo.
As definições de configuração para limitação baseada em porcentagem são:
- GlobalMovementThrottleThresholdPercentage - Número máximo de movimentos permitidos no cluster a qualquer momento, expresso como porcentagem do número total de réplicas no cluster. 0 indica que não há limite. O valor predefinido é 0. Se essa configuração e GlobalMovementThrottleThreshold forem especificadas, o limite mais conservador será usado.
- GlobalMovementThrottleThresholdPercentageForPlacement - Número máximo de movimentos permitidos durante a fase de colocação, expresso como porcentagem do número total de réplicas no cluster. 0 indica que não há limite. O valor predefinido é 0. Se essa configuração e GlobalMovementThrottleThresholdForPlacement forem especificadas, o limite mais conservador será usado.
- GlobalMovementThrottleThresholdPercentageForBalancing - Número máximo de movimentos permitidos durante a fase de balanceamento, expresso como porcentagem do número total de réplicas no cluster. 0 indica que não há limite. O valor predefinido é 0. Se essa configuração e GlobalMovementThrottleThresholdForBalancing forem especificadas, o limite mais conservador será usado.
Ao especificar a porcentagem de aceleração, você especificaria 5% como 0,05. O intervalo no qual esses aceleradores são governados é o GlobalMovementThrottleCountingInterval, que é especificado em segundos.
<Section Name="PlacementAndLoadBalancing">
<Parameter Name="GlobalMovementThrottleThresholdPercentage" Value="0" />
<Parameter Name="GlobalMovementThrottleThresholdPercentageForPlacement" Value="0" />
<Parameter Name="GlobalMovementThrottleThresholdPercentageForBalancing" Value="0" />
<Parameter Name="GlobalMovementThrottleCountingInterval" Value="600" />
</Section>
via ClusterConfig.json para implantações autônomas ou Template.json para clusters hospedados do Azure:
"fabricSettings": [
{
"name": "PlacementAndLoadBalancing",
"parameters": [
{
"name": "GlobalMovementThrottleThresholdPercentage",
"value": "0.0"
},
{
"name": "GlobalMovementThrottleThresholdPercentageForPlacement",
"value": "0.0"
},
{
"name": "GlobalMovementThrottleThresholdPercentageForBalancing",
"value": "0.0"
},
{
"name": "GlobalMovementThrottleCountingInterval",
"value": "600"
}
]
}
]
Aceleradores baseados em contagem padrão
Essas informações são fornecidas caso você tenha clusters mais antigos ou ainda mantenha essas configurações em clusters que já foram atualizados. Em geral, recomenda-se que estes sejam substituídos pelos aceleradores baseados em percentagem acima. Como a limitação baseada em porcentagem é desabilitada por padrão, esses aceleradores permanecem os aceleradores padrão para um cluster até que sejam desabilitados e substituídos pelos aceleradores baseados em porcentagem.
- GlobalMovementThrottleThreshold – essa configuração controla o número total de movimentos no cluster ao longo de algum tempo. A quantidade de tempo é especificada em segundos como GlobalMovementThrottleCountingInterval. O valor padrão para o GlobalMovementThrottleThreshold é 1000 e o valor padrão para o GlobalMovementThrottleCountingInterval é 600.
- MovementPerPartitionThrottleThreshold – esta configuração controla o número total de movimentos para qualquer partição de serviço ao longo de algum tempo. A quantidade de tempo é especificada em segundos como MovementPerPartitionThrottleCountingInterval. O valor padrão para o MovementPerPartitionThrottleThreshold é 50 e o valor padrão para o MovementPerPartitionThrottleCountingInterval é 600.
A configuração para esses aceleradores segue o mesmo padrão da limitação baseada em porcentagem.
Próximos passos
- Para saber como o Gerenciador de Recursos de Cluster gerencia e equilibra a carga no cluster, confira o artigo sobre balanceamento de carga
- O Gerenciador de Recursos de Cluster tem muitas opções para descrever o cluster. Para saber mais sobre eles, confira este artigo sobre como descrever um cluster do Service Fabric