Partilhar via


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 é.

Comparando clusters equilibrados e desfragmentados

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