Desfragmentação de métricas e carga no Service Fabric
A estratégia padrão do Gerenciador de Recursos de Cluster do Service Fabric para gerenciar métricas de carga no cluster é distribuir a carga. Garantir que os nós sejam utilizados uniformemente evita pontos quentes e frios que levam à contenção e ao desperdício de recursos. A distribuição de cargas de trabalho no cluster também é a mais segura em termos de sobrevivência a falhas, pois garante que uma falha não elimine uma grande porcentagem de uma determinada carga de trabalho.
O Gerenciador de Recursos de Cluster do Service Fabric oferece suporte a uma estratégia diferente para gerenciar a carga, que é a desfragmentação. A desfragmentação significa que, em vez de tentar distribuir a utilização de uma métrica pelo cluster, ela é consolidada. A consolidação é apenas uma inversão da estratégia de balanceamento padrão – em vez de minimizar o desvio padrão médio da carga métrica, o Gerenciador de Recursos de Cluster tenta aumentá-la.
Quando usar a desfragmentação
A distribuição de carga no cluster consome alguns dos recursos em cada nó. Algumas cargas de trabalho criam serviços que são excepcionalmente grandes e consomem a maior parte ou a totalidade de um nó. Nesses casos, é possível que, quando há grandes cargas de trabalho sendo criadas, não haja espaço suficiente em nenhum nó para executá-las. Grandes cargas de trabalho não são um problema no Service Fabric; nesses casos, o Gerenciador de Recursos de Cluster determina que precisa reorganizar o cluster para abrir espaço para essa grande carga de trabalho. No entanto, enquanto isso, essa carga de trabalho tem que esperar para ser agendada no cluster.
Se houver muitos serviços e estados para se mover, pode levar muito tempo para que a grande carga de trabalho seja colocada no cluster. Isso é mais provável se outras cargas de trabalho no cluster também forem grandes e, portanto, levarem mais tempo para serem reorganizadas. A equipe do Service Fabric mediu os tempos de criação em simulações desse cenário. Descobrimos que a criação de grandes serviços levou muito mais tempo assim que a utilização do cluster ficou acima entre 30% e 50%. Para lidar com esse cenário, introduzimos a desfragmentação como uma estratégia de equilíbrio. Descobrimos que, para grandes cargas de trabalho, especialmente aquelas em que o tempo de criação era importante, a desfragmentação realmente ajudou essas novas cargas de trabalho a serem agendadas no cluster.
Você pode configurar métricas de desfragmentação para que o Gerenciador de Recursos de Cluster tente condensar proativamente a carga dos serviços em menos nós. Isso ajuda a garantir que quase sempre haja espaço para grandes serviços sem reorganizar o cluster. Não ter que reorganizar o cluster permite criar grandes cargas de trabalho rapidamente.
A maioria das pessoas não precisa de desfragmentação. Os serviços são geralmente pequenos, por isso não é difícil encontrar espaço para eles no cluster. Quando a reorganização é possível, ela é rápida, novamente porque a maioria dos serviços são pequenos e podem ser movidos rapidamente e em paralelo. No entanto, se você tem grandes serviços e precisa que eles sejam criados rapidamente, a estratégia de desfragmentação é para você. Discutiremos as compensações do uso da desfragmentação a seguir.
Compensações de desfragmentação
A desfragmentação pode aumentar o impacto das falhas, uma vez que mais serviços estão sendo executados em nós que falham. A desfragmentação também pode aumentar os custos, uma vez que os recursos no cluster devem ser mantidos em reserva, aguardando a criação de grandes cargas de trabalho.
O diagrama a seguir fornece uma representação visual de dois clusters, um que é desfragmentado e outro que não é.
No caso equilibrado, considere o número de movimentos que seriam necessários para colocar um dos maiores objetos de serviço. No cluster desfragmentado, a grande carga de trabalho pode ser colocada nos nós quatro ou cinco sem ter que esperar que nenhum outro serviço se mova.
Prós e contras da desfragmentação
Então, quais são essas outras compensações conceituais? Aqui está uma tabela rápida de coisas para pensar:
Prós de desfragmentação | Contras de desfragmentação |
---|---|
Permite a criação mais rápida de grandes serviços | Concentra a carga em menos nós, aumentando a contenção |
Permite menor movimentação de dados durante a criação | Falhas podem afetar mais serviços e causar mais rotatividade |
Permite uma descrição rica dos requisitos e recuperação de espaço | Configuração geral mais complexa do Gerenciamento de Recursos |
Você pode misturar métricas desfragmentadas e normais no mesmo cluster. O Cluster Resource Manager tenta consolidar as métricas de desfragmentação tanto quanto possível enquanto distribui as outras. Os resultados da mistura de estratégias de desfragmentação e equilíbrio dependem de vários fatores, incluindo:
- o número de métricas de balanceamento versus o número de métricas de desfragmentação
- Se algum serviço usa os dois tipos de métricas
- os pesos métricos
- Cargas métricas atuais
A experimentação é necessária para determinar a configuração exata necessária. Recomendamos a medição completa de suas cargas de trabalho antes de habilitar as métricas de desfragmentação na produção. Isso é especialmente verdadeiro quando se mistura desfragmentação e métricas equilibradas dentro do mesmo serviço.
Configurando métricas de desfragmentação
A configuração de métricas de desfragmentação é uma decisão global no cluster, e métricas individuais podem ser selecionadas para desfragmentação. Os trechos de configuração a seguir mostram como configurar métricas para desfragmentação. Neste caso, "Metric1" é configurado como uma métrica de desfragmentação, enquanto "Metric2" continuará a ser balanceado normalmente.
ClusterManifest.xml:
<Section Name="DefragmentationMetrics">
<Parameter Name="Metric1" Value="true" />
<Parameter Name="Metric2" Value="false" />
</Section>
via ClusterConfig.json para implantações autônomas ou Template.json para clusters hospedados do Azure:
"fabricSettings": [
{
"name": "DefragmentationMetrics",
"parameters": [
{
"name": "Metric1",
"value": "true"
},
{
"name": "Metric2",
"value": "false"
}
]
}
]
Próximos passos
- 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
- As métricas são como o Gerenciador de Recursos de Cluster do Service Fabric gerencia o consumo e a capacidade no cluster. Para saber mais sobre métricas e como configurá-las, confira este artigo