Share via


Desfragmentação de métricas e carga no Service Fabric

A estratégia predefinida do Cluster do Service Fabric Resource Manager para gerir métricas de carga no cluster é distribuir a carga. Garantir que os nós são utilizados uniformemente evita pontos quentes e frios que levam tanto à contenção como aos recursos desperdiçados. A distribuição de cargas de trabalho no cluster também é a mais segura em termos de falhas de sobrevivência, uma vez que garante que uma falha não tira uma grande percentagem de uma determinada carga de trabalho.

O Cluster do Service Fabric Resource Manager suporta uma estratégia diferente para gerir 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, é consolidada. A consolidação é apenas uma inversão da estratégia de balanceamento predefinida – em vez de minimizar o desvio padrão médio da carga de métricas, o Cluster Resource Manager tenta audê-la.

Quando utilizar a desfragmentação

A distribuição da carga no cluster consome alguns dos recursos em cada nó. Algumas cargas de trabalho criam serviços que são excecionalmente grandes e consomem a maioria ou a totalidade de um nó. Nestes casos, é possível que, quando são criadas cargas de trabalho grandes, não haja espaço suficiente em nenhum nó para as executar. As cargas de trabalho grandes não são um problema no Service Fabric; nestes casos, o cluster Resource Manager determina que precisa de reorganizar o cluster para dar espaço a esta carga de trabalho grande. No entanto, entretanto, essa carga de trabalho tem de esperar para ser agendada no cluster.

Se existirem muitos serviços e estado para se deslocar, poderá demorar muito tempo até que a carga de trabalho grande seja colocada no cluster. Isto é mais provável se outras cargas de trabalho no cluster também forem grandes e, por isso, demorarem mais tempo a reorganizar-se. A equipa do Service Fabric mediu os tempos de criação em simulações deste cenário. Descobrimos que a criação de serviços grandes demorou muito mais tempo assim que a utilização do cluster foi superior entre 30% e 50%. Para lidar com este cenário, introduzimos a desfragmentação como uma estratégia de balanceamento. Descobrimos que para cargas de trabalho grandes, especialmente aquelas em que o tempo de criação era importante, a desfragmentação realmente ajudou essas novas cargas de trabalho a ser agendadas no cluster.

Pode configurar métricas de desfragmentação para que o Cluster Resource Manager para tentar condensar proativamente a carga dos serviços em menos nós. Isto ajuda a garantir que há quase sempre espaço para serviços grandes sem reorganizar o cluster. Não ter de reorganizar o cluster permite criar cargas de trabalho grandes rapidamente.

A maioria das pessoas não precisa de desfragmentação. Normalmente, os serviços são pequenos, pelo que não é difícil encontrar espaço para eles no cluster. Quando a reorganização é possível, é rápida, novamente porque a maioria dos serviços são pequenos e podem ser movidos rapidamente e em paralelo. No entanto, se tiver serviços grandes e precisar deles criados rapidamente, a estratégia de desfragmentação é para si. Vamos discutir as vantagens da utilização da desfragmentação em seguida.

Desfragmentação de compromissos

A desfragmentação pode aumentar o impacto das falhas, uma vez que estão a ser executados mais serviços em nós que falham. A desfragmentação também pode aumentar os custos, uma vez que os recursos no cluster têm de ser mantidos em reserva, aguardando a criação de grandes cargas de trabalho.

O diagrama seguinte proporciona uma representação visual de dois clusters, um que é desfragmentado e outro que não é.

Comparar Clusters Equilibrados e Desfragmentados

No caso equilibrado, considere o número de movimentos necessários para colocar um dos maiores objetos de serviço. No cluster desfragmentado, a carga de trabalho grande pode ser colocada em nós quatro ou cinco sem ter de esperar que outros serviços se movam.

Desfragmentation pros and cons (Prós e contras de desfragmentação)

Então, o que são as outras desvantagens conceptuais? Eis uma tabela rápida de coisas em que pensar:

Profissionais de Desfragmentação Cons de Desfragmentação
Permite a criação mais rápida de serviços grandes Concentra a carga em menos nós, aumentando a contenção
Ativa um menor movimento de dados durante a criação As falhas podem afetar mais serviços e causar mais alterações
Permite uma descrição avançada dos requisitos e a recuperação do espaço Configuração geral de Gestão de Recursos mais complexa

Pode misturar métricas desfragmentadas e normais no mesmo cluster. O Cluster Resource Manager tenta consolidar as métricas de desfragmentação o máximo possível enquanto espalha 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 vs. o número de métricas de desfragmentação
  • Se algum serviço utiliza ambos os tipos de métricas
  • os pesos das métricas
  • cargas de métricas atuais

A experimentação é necessária para determinar a configuração exata necessária. Recomendamos uma medição completa das cargas de trabalho antes de ativar as métricas de desfragmentação na produção. Isto é especialmente verdade ao misturar a desfragmentação e as métricas equilibradas no mesmo serviço.

Configurar métricas de desfragmentação

Configurar métricas de desfragmentação é uma decisão global no cluster e as métricas individuais podem ser selecionadas para desfragmentação. Os fragmentos de configuração seguintes mostram como configurar métricas para desfragmentação. Neste caso, "Métrica1" está configurado como uma métrica de desfragmentação, enquanto "Métrica2" continuará a ser equilibrado normalmente.

ClusterManifest.xml:

<Section Name="DefragmentationMetrics">
    <Parameter Name="Metric1" Value="true" />
    <Parameter Name="Metric2" Value="false" />
</Section>

via ClusterConfig.json para implementações autónomas ou Template.json para clusters alojados do Azure:

"fabricSettings": [
  {
    "name": "DefragmentationMetrics",
    "parameters": [
      {
          "name": "Metric1",
          "value": "true"
      },
      {
          "name": "Metric2",
          "value": "false"
      }
    ]
  }
]

Passos seguintes

  • O cluster Resource Manager tem muitas opções para descrever o cluster. Para saber mais sobre os mesmos, consulte este artigo sobre como descrever um cluster do Service Fabric
  • As métricas são a forma como o Service Fabric Cluster Resource Manger gere o consumo e a capacidade no cluster. Para saber mais sobre as métricas e como configurá-las, consulte este artigo