Arquitetura do Service Fabric
O Service Fabric é criado com subsistemas em camadas. Esses subsistemas permitem que você escreva aplicativos que são:
- Tenha elevada disponibilidade
- Dimensionável
- Gerenciável
- Testável
O diagrama a seguir mostra os principais subsistemas do Service Fabric.
Em um sistema distribuído, a capacidade de se comunicar com segurança entre nós em um cluster é crucial. Na base da pilha está o subsistema de transporte, que fornece comunicação segura entre nós. Acima do subsistema de transporte está o subsistema de federação, que agrupa os diferentes nós em uma única entidade (chamados clusters) para que o Service Fabric possa detetar falhas, executar a eleição de líderes e fornecer roteamento consistente. O subsistema de confiabilidade, em camadas sobre o subsistema de federação, é responsável pela confiabilidade dos serviços do Service Fabric por meio de mecanismos como replicação, gerenciamento de recursos e failover. O subsistema de federação também está subjacente ao subsistema de hospedagem e ativação, que gerencia o ciclo de vida de um aplicativo em um único nó. O subsistema de gerenciamento gerencia o ciclo de vida dos aplicativos e serviços. O subsistema de capacidade de teste ajuda os desenvolvedores de aplicativos a testar seus serviços por meio de falhas simuladas antes e depois da implantação de aplicativos e serviços em ambientes de produção. O Service Fabric fornece a capacidade de resolver locais de serviço por meio de seu subsistema de comunicação. Os modelos de programação de aplicativos expostos aos desenvolvedores são colocados em camadas sobre esses subsistemas, juntamente com o modelo de aplicativo para habilitar ferramentas.
Subsistema «Transportes»
O subsistema de transporte implementa um canal de comunicação de datagrama ponto-a-ponto. Esse canal é usado para comunicação dentro de clusters de malha de serviço e comunicação entre o cluster de malha de serviço e clientes. Ele suporta padrões de comunicação unidirecionais e solicitação-resposta, o que fornece a base para a implementação de difusão e multicast na camada Federação. O subsistema de transporte protege a comunicação usando certificados X509 ou segurança do Windows. Esse subsistema é usado internamente pelo Service Fabric e não é diretamente acessível aos desenvolvedores para programação de aplicativos.
Subsistema Federação
Para raciocinar sobre um conjunto de nós em um sistema distribuído, você precisa ter uma visão consistente do sistema. O subsistema de federação usa as primitivas de comunicação fornecidas pelo subsistema de transporte e costura os vários nós em um único cluster unificado sobre o qual ele pode raciocinar. Ele fornece os primitivos de sistemas distribuídos necessários para os outros subsistemas - deteção de falhas, eleição de líderes e roteamento consistente. O subsistema da federação é criado com base em tabelas hash distribuídas com um espaço de tokens de 128 bits. O subsistema cria uma topologia de anel sobre os nós, com cada nó no anel sendo alocado um subconjunto do espaço de token para propriedade. Para a deteção de falhas, a camada usa um mecanismo de leasing baseado em batimentos cardíacos e arbitragem. O subsistema de federação também garante, por meio de intrincados protocolos de entrada e saída, que apenas um único proprietário de um token existe a qualquer momento. Isso fornece a eleição de líderes e garantias de roteamento consistentes.
Subsistema «fiabilidade»
O subsistema de confiabilidade fornece o mecanismo para tornar o estado de um serviço do Service Fabric altamente disponível por meio do uso do Replicador, do Gerenciador de Failover e do Balanceador de Recursos.
- O Replicator garante que as alterações de estado na réplica de serviço principal serão replicadas automaticamente para réplicas secundárias, mantendo a consistência entre as réplicas primária e secundária em um conjunto de réplicas de serviço. O replicador é responsável pelo gerenciamento de quórum entre as réplicas no conjunto de réplicas. Ele interage com a unidade de failover para obter a lista de operações a serem replicadas, e o agente de reconfiguração fornece a ela a configuração do conjunto de réplicas. Essa configuração indica quais réplicas as operações precisam ser replicadas. O Service Fabric fornece um replicador padrão chamado Fabric Replicator, que pode ser usado pela API do modelo de programação para tornar o estado do serviço altamente disponível e confiável.
- O Gerenciador de Failover garante que, quando nós são adicionados ou removidos do cluster, a carga é redistribuída automaticamente entre os nós disponíveis. Se um nó no cluster falhar, o cluster reconfigurará automaticamente as réplicas de serviço para manter a disponibilidade.
- O Resource Manager coloca réplicas de serviço em domínios de falha no cluster e garante que todas as unidades de failover estejam operacionais. O Resource Manager também equilibra os recursos de serviço no pool compartilhado subjacente de nós de cluster para obter uma distribuição de carga uniforme ideal.
Subsistema de gestão
O subsistema de gerenciamento fornece gerenciamento completo do ciclo de vida do aplicativo e do serviço. Os cmdlets e APIs administrativas do PowerShell permitem provisionar, implantar, corrigir, atualizar e desprovisionar aplicativos sem perda de disponibilidade. O subsistema de gestão realiza isso através dos seguintes serviços.
- Gerenciador de Cluster: Este é o serviço principal que interage com o Gerenciador de Failover a partir da confiabilidade para colocar os aplicativos nos nós com base nas restrições de posicionamento do serviço. O Gerenciador de Recursos no subsistema de failover garante que as restrições nunca sejam quebradas. O gerenciador de cluster gerencia o ciclo de vida dos aplicativos desde o provisionamento até o desprovisionamento. Ele se integra ao gerenciador de integridade para garantir que a disponibilidade do aplicativo não seja perdida de uma perspetiva de integridade semântica durante as atualizações.
- Gerenciador de integridade: esse serviço permite o monitoramento da integridade de aplicativos, serviços e entidades de cluster. As entidades de cluster (como nós, partições de serviço e réplicas) podem relatar informações de integridade, que são agregadas ao armazenamento de integridade centralizado. Essas informações de integridade fornecem um instantâneo de integridade point-in-time geral dos serviços e nós distribuídos em vários nós no cluster, permitindo que você execute as ações corretivas necessárias. As APIs de consulta de integridade permitem que você consulte os eventos de integridade relatados ao subsistema de integridade. As APIs de consulta de integridade retornam os dados de integridade brutos armazenados no repositório de integridade ou os dados de integridade interpretados e agregados de uma entidade de cluster específica.
- Armazenamento de Imagens: Este serviço fornece armazenamento e distribuição dos binários do aplicativo. Este serviço fornece um armazenamento de arquivos distribuído simples onde os aplicativos são carregados e baixados.
Subsistema de alojamento
O gerenciador de cluster informa ao subsistema de hospedagem (em execução em cada nó) quais serviços ele precisa gerenciar para um nó específico. Em seguida, o subsistema de hospedagem gerencia o ciclo de vida do aplicativo nesse nó. Ele interage com os componentes de confiabilidade e integridade para garantir que as réplicas estejam corretamente posicionadas e saudáveis.
Subsistema «Comunicação»
Esse subsistema fornece mensagens confiáveis dentro do cluster e descoberta de serviço por meio do serviço de nomenclatura. O serviço de Nomenclatura resolve nomes de serviço para um local no cluster e permite que os usuários gerenciem nomes e propriedades de serviço. Usando o serviço de nomenclatura, os clientes podem se comunicar com segurança com qualquer nó no cluster para resolver um nome de serviço e recuperar metadados de serviço. Usando uma API de cliente de nomenclatura simples, os usuários do Service Fabric podem desenvolver serviços e clientes capazes de resolver o local de rede atual, apesar do dinamismo do nó ou do redimensionamento do cluster.
Subsistema de testabilidade
A capacidade de teste é um conjunto de ferramentas especificamente projetado para testar serviços criados no Service Fabric. As ferramentas permitem que um desenvolvedor induza facilmente falhas significativas e execute cenários de teste para exercitar e validar os inúmeros estados e transições que um serviço experimentará ao longo de sua vida útil, tudo de forma controlada e segura. A capacidade de teste também fornece um mecanismo para executar testes mais longos que podem iterar através de várias falhas possíveis sem perder a disponibilidade. Isso fornece um ambiente de teste em produção.