Dimensionar clusters do Azure Service Fabric

Um cluster do Service Fabric é um conjunto ligado à rede de máquinas virtuais ou físicas no qual os seus microsserviços são implementados e geridos. Uma máquina ou VM que faz parte de um cluster é denominada nó. Os clusters podem conter potencialmente milhares de nós. Depois de criar um cluster do Service Fabric, pode dimensionar o cluster horizontalmente (alterar o número de nós) ou verticalmente (alterar os recursos dos nós). Pode dimensionar o cluster em qualquer altura, mesmo quando as cargas de trabalho estão em execução no cluster. À medida que o cluster é dimensionado, as suas aplicações também são dimensionadas automaticamente.

Porquê dimensionar o cluster? A aplicação exige alterações ao longo do tempo. Poderá ter de aumentar os recursos do cluster para satisfazer o aumento da carga de trabalho da aplicação ou do tráfego de rede ou diminuir os recursos do cluster quando a procura diminuir.

Aumentar e reduzir verticalmente ou dimensionar horizontalmente

Altera o número de nós no cluster. Assim que os novos nós se associarem ao cluster, o Cluster Resource Manager move os serviços para os mesmos, o que reduz a carga nos nós existentes. Também pode diminuir o número de nós se os recursos do cluster não estiverem a ser utilizados de forma eficiente. À medida que os nós saem do cluster, os serviços saem desses nós e a carga aumenta nos restantes nós. Reduzir o número de nós num cluster em execução no Azure pode poupar-lhe dinheiro, uma vez que paga o número de VMs que utiliza e não a carga de trabalho nessas VMs.

  • Vantagens: escala infinita, em teoria. Se a sua aplicação for concebida para escalabilidade, pode ativar o crescimento ilimitado ao adicionar mais nós. As ferramentas em ambientes na cloud facilitam a adição ou remoção de nós, pelo que é fácil ajustar a capacidade e paga apenas pelos recursos que utiliza.
  • Desvantagens: as aplicações têm de ser concebidas para escalabilidade. As bases de dados de aplicações e a persistência também podem exigir trabalhos de arquitetura adicionais para dimensionar. No entanto, as coleções fiáveis nos serviços com monitorização de estado do Service Fabric tornam muito mais fácil dimensionar os dados da sua aplicação.

Os conjuntos de dimensionamento de máquinas virtuais são um recurso de computação do Azure que pode utilizar para implementar e gerir uma coleção de máquinas virtuais como um conjunto. Cada tipo de nó definido num cluster do Azure é configurado como um conjunto de dimensionamento separado. Em seguida, cada tipo de nó pode ser aumentado ou reduzido horizontalmente de forma independente, ter diferentes conjuntos de portas abertos e pode ter métricas de capacidade diferentes.

Ao dimensionar um cluster do Azure, tenha em atenção as seguintes diretrizes:

  • Os tipos de nós primários que executam cargas de trabalho de produção devem ter sempre cinco ou mais nós.
  • Os tipos de nós não primários que executam cargas de trabalho de produção com monitorização de estado devem ter sempre cinco ou mais nós.
  • Os tipos de nós não primários que executam cargas de trabalho de produção sem estado devem ter sempre dois ou mais nós.
  • Qualquer tipo de nó de nível de durabilidade de Ouro ou Prata deve ter sempre cinco ou mais nós.
  • Não remova instâncias/nós de VM aleatórios de um tipo de nó, utilize sempre a funcionalidade de dimensionamento do conjunto de dimensionamento de máquinas virtuais. A eliminação de instâncias de VM aleatórias pode afetar negativamente a capacidade de balanceamento de carga dos sistemas.
  • Se utilizar regras de dimensionamento automático, defina as regras para que o dimensionamento (removendo instâncias de VM) seja feito um nó de cada vez. Não é seguro reduzir verticalmente mais do que uma instância de cada vez.

Uma vez que os tipos de nó do Service Fabric no cluster são compostos por conjuntos de dimensionamento de máquinas virtuais no back-end, pode configurar regras de dimensionamento automático ou dimensionar manualmente cada tipo de nó/conjunto de dimensionamento de máquinas virtuais.

Dimensionamento programático

Em muitos cenários, dimensionar um cluster manualmente ou com regras de dimensionamento automático são boas soluções. No entanto, para cenários mais avançados, podem não ser o adequado. As potenciais desvantagens destas abordagens incluem:

  • O dimensionamento manual requer que inicie sessão e solicite explicitamente operações de dimensionamento. Se as operações de dimensionamento forem necessárias frequentemente ou em momentos imprevisíveis, esta abordagem poderá não ser uma boa solução.
  • Quando as regras de dimensionamento automático removem uma instância de um conjunto de dimensionamento de máquinas virtuais, não removem automaticamente o conhecimento desse nó do cluster do Service Fabric associado, a menos que o tipo de nó tenha um nível de durabilidade silver ou Gold. Uma vez que as regras de dimensionamento automático funcionam ao nível do conjunto de dimensionamento (em vez de ao nível do Service Fabric), as regras de dimensionamento automático podem remover nós do Service Fabric sem os encerrar corretamente. Esta remoção rude do nó deixará o estado "fantasma" do nó do Service Fabric para trás após operações de redução horizontal. Uma pessoa (ou um serviço) teria de limpar periodicamente o estado do nó removido no cluster do Service Fabric.
  • Um tipo de nó com um nível de durabilidade de Gold ou Silver limpa automaticamente os nós removidos, pelo que não é necessária nenhuma limpeza adicional.
  • Embora existam muitas métricas suportadas por regras de dimensionamento automático, ainda é um conjunto limitado. Se o seu cenário pedir dimensionamento com base em algumas métricas não abrangidas nesse conjunto, as regras de dimensionamento automático poderão não ser uma boa opção.

A forma como deve abordar o dimensionamento do Service Fabric depende do seu cenário. Se o dimensionamento for invulgar, a capacidade de adicionar ou remover nós manualmente é provavelmente suficiente. Para cenários mais complexos, as regras de dimensionamento automático e os SDKs expondo a capacidade de dimensionar programaticamente oferecem alternativas poderosas.

Existem APIs do Azure que permitem que as aplicações funcionem programaticamente com conjuntos de dimensionamento de máquinas virtuais e clusters do Service Fabric. Se as opções de dimensionamento automático existentes não funcionarem para o seu cenário, estas APIs possibilitam a implementação de lógica de dimensionamento personalizada.

Uma abordagem para implementar esta funcionalidade de dimensionamento automático "home-made" é adicionar um novo serviço sem estado à aplicação do Service Fabric para gerir operações de dimensionamento. Criar o seu próprio serviço de dimensionamento proporciona o maior grau de controlo e personalização sobre o comportamento de dimensionamento da sua aplicação. Isto pode ser útil para cenários que requerem controlo preciso sobre quando ou como uma aplicação aumenta ou reduz horizontalmente. No entanto, este controlo inclui uma desvantagem da complexidade do código. Utilizar esta abordagem significa que tem de possuir código de dimensionamento, o que não é trivial. No método do serviço, um conjunto de acionadores pode determinar se o dimensionamento é necessário (incluindo a verificação de parâmetros, como o tamanho máximo do RunAsync cluster e o dimensionamento de arrefecimento).

A API utilizada para interações de conjuntos de dimensionamento de máquinas virtuais (para verificar o número atual de instâncias de máquina virtual e para modificá-la) é a biblioteca fluente da Computação de Gestão do Azure. A biblioteca de computação fluente fornece uma API fácil de utilizar para interagir com conjuntos de dimensionamento de máquinas virtuais. Para interagir com o próprio cluster do Service Fabric, utilize System.Fabric.FabricClient.

No entanto, o código de dimensionamento não precisa de ser executado como um serviço no cluster para ser dimensionado. Tanto IAzure e FabricClient podem ligar-se remotamente aos respetivos recursos do Azure associados, para que o serviço de dimensionamento possa ser facilmente uma aplicação de consola ou um serviço Windows em execução fora da aplicação do Service Fabric.

Com base nestas limitações, poderá querer implementar modelos de dimensionamento automático mais personalizados.

Aumentar e reduzir verticalmente ou dimensionar verticalmente

Altera os recursos (CPU, memória ou armazenamento) de nós no cluster.

  • Vantagens: a arquitetura de software e aplicações mantém-se igual.
  • Desvantagens: dimensionamento finito, uma vez que existe um limite para a quantidade de recursos que pode aumentar em nós individuais. Tempo de inatividade, uma vez que terá de colocar as máquinas físicas ou virtuais offline para adicionar ou remover recursos.

Os conjuntos de dimensionamento de máquinas virtuais são um recurso de computação do Azure que pode utilizar para implementar e gerir uma coleção de máquinas virtuais como um conjunto. Cada tipo de nó definido num cluster do Azure é configurado como um conjunto de dimensionamento separado. Em seguida, cada tipo de nó pode ser gerido separadamente. Aumentar ou reduzir verticalmente um tipo de nó envolve a adição de um novo tipo de nó (com SKU de VM atualizado) e a remoção do tipo de nó antigo.

Ao dimensionar um cluster do Azure, tenha em atenção a seguinte orientação:

  • Se reduzir verticalmente um tipo de nó primário, nunca deve reduzi-lo verticalmente mais do que o permitido pela camada de fiabilidade .

O processo de dimensionamento de um tipo de nó para cima ou para baixo é diferente consoante seja um tipo de nó não primário ou primário.

Dimensionar tipos de nós não primários

Crie um novo tipo de nó com os recursos de que precisa. Atualize as restrições de colocação dos serviços em execução para incluir o novo tipo de nó. Gradualmente (um de cada vez), reduza a contagem de instâncias do tipo de nó antigo para zero para que a fiabilidade do cluster não seja afetada. Os serviços serão migrados gradualmente para o novo tipo de nó, uma vez que o tipo de nó antigo é desativado.

Dimensionar o tipo de nó primário

Implemente um novo tipo de nó primário com o SKU da VM atualizado e, em seguida, desative as instâncias originais do tipo de nó primário, uma de cada vez, para que os serviços do sistema migrem para o novo conjunto de dimensionamento. Verifique se o cluster e os novos nós estão em bom estado de funcionamento e, em seguida, remova o conjunto de dimensionamento original e o estado do nó dos nós eliminados.

Se isso não for possível, pode criar um novo cluster e restaurar o estado da aplicação (se aplicável) a partir do cluster antigo. Não precisa de restaurar nenhum estado de serviço do sistema, estes são recriados quando implementa as aplicações no seu novo cluster. Se estava apenas a executar aplicações sem estado no cluster, tudo o que faz é implementar as aplicações no novo cluster, não tem nada para restaurar.

Passos seguintes