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.
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.
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.
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.
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"
}
]
}
]
- 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