Migrar uma aplicação de serviços Cloud do Azure para o Azure Service FabricMigrate an Azure Cloud Services application to Azure Service Fabric

GitHub código de exemploGitHub Sample code

Este artigo descreve a migração de um aplicativo de serviços Cloud do Azure para o Azure Service Fabric.This article describes migrating an application from Azure Cloud Services to Azure Service Fabric. Ele se concentra em decisões arquitetônicas e práticas recomendadas.It focuses on architectural decisions and recommended practices.

Para este projeto, começamos com um aplicativo de serviços Cloud, denominado Surveys e transportado-lo para o Service Fabric.For this project, we started with a Cloud Services application called Surveys and ported it to Service Fabric. O objetivo era migrar a aplicação com o mínimo de alterações possível.The goal was to migrate the application with as few changes as possible. Posteriormente neste artigo, mostramos como otimizar o aplicativo para o Service Fabric.Later in the article, we show how to optimize the application for Service Fabric.

Antes de ler este artigo, é útil para entender as noções básicas do Service Fabric.Before reading this article, it will be useful to understand the basics of Service Fabric. Consulte descrição geral do Azure Service FabricSee Overview of Azure Service Fabric

Acerca da aplicação de inquéritosAbout the Surveys application

Uma empresa fictícia com o nome Tailspin criada um aplicativo chamado a aplicação de inquéritos, que permite aos clientes criar inquéritos.A fictitious company named Tailspin created an application called the Surveys app that allows customers to create surveys. Depois de um cliente se inscreve para a aplicação, os utilizadores podem criar e publicar as pesquisas e recolher os resultados para análise.After a customer signs up for the application, users can create and publish surveys, and collect the results for analysis. A aplicação inclui um site público, onde as pessoas possam tirar uma pesquisa.The application includes a public website where people can take a survey. Saiba mais sobre o cenário de Tailspin original aqui.Read more about the original Tailspin scenario here.

Agora Tailspin quer mover a aplicação de inquéritos para uma arquitetura de microsserviços, utilizar o Service Fabric em execução no Azure.Now Tailspin wants to move the Surveys application to a microservices architecture, using Service Fabric running on Azure. Uma vez que a aplicação já está implementada como um aplicativo de serviços Cloud, a Tailspin adota uma abordagem de múltiplas fase:Because the application is already deployed as a Cloud Services application, Tailspin adopts a multi-phase approach:

  1. Os serviços em nuvem para o Service Fabric, a porta, minimizando as alterações à aplicação.Port the cloud services to Service Fabric, while minimizing changes to the application.
  2. Otimize o aplicativo para o Service Fabric, ao mudar para uma arquitetura de microsserviços.Optimize the application for Service Fabric, by moving to a microservices architecture.

Num projeto do mundo real, é provável que ambos os estágios causaria uma sobreposição.In a real-world project, it's likely that both stages would overlap. Durante a migração para o Service Fabric, também poderia começar rearquitete o aplicativo em microsserviços.While porting to Service Fabric, you would also start to rearchitect the application into micro-services. Mais tarde pode refinar ainda mais, a arquitetura talvez dividindo os serviços de alta granularidade em serviços mais pequenos.Later you might refine the architecture further, perhaps dividing coarse-grained services into smaller services.

O código do aplicativo está disponível no GitHub.The application code is available on GitHub. Este repositório contém a aplicação de serviços Cloud e a versão de Service Fabric.This repo contains both the Cloud Services application and the Service Fabric version.

Por que motivo do Service Fabric?Why Service Fabric?

O Service Fabric é uma boa opção para este projeto, porque a maioria dos recursos necessários num sistema distribuído incorporadas no Service Fabric, incluindo:Service Fabric is a good fit for this project, because most of the features needed in a distributed system are built into Service Fabric, including:

  • Gestão de cluster.Cluster management. Service Fabric lida automaticamente com ativação pós-falha de nó, a monitorização de estado de funcionamento e outras funções de gerenciamento de cluster.Service Fabric automatically handles node failover, health monitoring, and other cluster management functions.
  • Dimensionamento horizontal.Horizontal scaling. Ao adicionar nós ao cluster do Service Fabric, a aplicação automaticamente a aumenta, à medida que serviços são distribuídos por nós de novo.When you add nodes to a Service Fabric cluster, the application automatically scales, as services are distributed across the new nodes.
  • Deteção do serviço.Service discovery. O Service Fabric fornece um serviço de deteção que pode resolver o ponto final para um serviço com nome.Service Fabric provides a discovery service that can resolve the endpoint for a named service.
  • Serviços de com e sem estado.Stateless and stateful services. Utilização de serviços com estado coleções fiáveis, que pode tomar o lugar de um cache ou a fila e podem ser particionados.Stateful services use reliable collections, which can take the place of a cache or queue, and can be partitioned.
  • Gerenciamento de ciclo de vida de aplicativos.Application lifecycle management. Os serviços podem ser atualizados e de forma independente sem períodos de indisponibilidade de aplicação.Services can be upgraded independently and without application downtime.
  • Orquestração de serviço num cluster de máquinas.Service orchestration across a cluster of machines.
  • A densidade superior para otimizar o consumo de recursos.Higher density for optimizing resource consumption. Um único nó pode alojar vários serviços.A single node can host multiple services.

Service Fabric é utilizado por vários serviços da Microsoft, incluindo a base de dados do Azure SQL, Cosmos DB, Hubs de eventos do Azure e outros, tornando-o numa plataforma comprovada para criar aplicações na cloud distribuídas.Service Fabric is used by various Microsoft services, including Azure SQL Database, Cosmos DB, Azure Event Hubs, and others, making it a proven platform for building distributed cloud applications.

Comparar serviços em nuvem com o Service FabricComparing Cloud Services with Service Fabric

A tabela seguinte resume algumas das diferenças importantes entre serviços Cloud e aplicações do Service Fabric.The following table summarizes some of the important differences between Cloud Services and Service Fabric applications. Para uma discussão mais detalhada, consulte Saiba mais sobre as diferenças entre serviços em nuvem e o Service Fabric antes de migrar aplicações.For a more in-depth discussion, see Learn about the differences between Cloud Services and Service Fabric before migrating applications.

ÁreaArea Serviços CloudCloud Services Service FabricService Fabric
Composição da aplicaçãoApplication composition FunçõesRoles ServiçosServices
DensidadeDensity Instâncias de uma função por VMOne role instance per VM Vários serviços num único nóMultiple services in a single node
Número mínimo de nósMinimum number of nodes 2 por função2 per role 5 por cluster, para implementações de produção5 per cluster, for production deployments
Gestão de estadosState management Sem estadoStateless Sem estado ou com estado *Stateless or stateful*
HospedagemHosting AzureAzure Cloud ou no localCloud or on-premises
Alojamento na WebWeb hosting IIS**IIS** Hospedagem internaSelf-hosting
Modelo de implementaçãoDeployment model Modelo de implementação clássicaClassic deployment model Resource ManagerResource Manager
EmpacotamentoPackaging Ficheiros de pacote de serviço cloud (. cspkg)Cloud service package files (.cspkg) Aplicações e pacotes de serviçoApplication and service packages
Atualização da aplicaçãoApplication update Troca de VIP ou atualização sem interrupçãoVIP swap or rolling update Implementar a atualizaçãoRolling update
Dimensionamento automáticoAutoscaling Serviço incorporadoBuilt-in service Conjuntos de dimensionamento de máquina virtual para ampliação automáticaVirtual machine scale sets for auto scale out
DepurarDebugging Emulador localLocal emulator Local clusterLocal cluster

* Utilização de serviços com estado coleções fiáveis para armazenar o estado em réplicas, para que todas as leituras são locais para os nós do cluster.* Stateful services use reliable collections to store state across replicas, so that all reads are local to the nodes in the cluster. Escritas são replicadas em todos os nós de confiabilidade.Writes are replicated across nodes for reliability. Serviços sem estado podem ter estado externo, através de uma base de dados ou outro armazenamento externo.Stateless services can have external state, using a database or other external storage.

* * Funções de trabalho também podem hospedar internamente ASP.NET Web API a utilizar o OWIN.** Worker roles can also self-host ASP.NET Web API using OWIN.

A aplicação de inquéritos nos serviços CloudThe Surveys application on Cloud Services

O diagrama seguinte mostra a arquitetura do aplicativo de pesquisas em execução nos serviços Cloud.The following diagram shows the architecture of the Surveys application running on Cloud Services.

Aplicação de inquéritos nos serviços Cloud

O aplicativo consiste em duas web roles e uma função de trabalho.The application consists of two web roles and a worker role.

  • O Tailspin.Web função da web aloja um Web site ASP.NET que os clientes de Tailspin utilizam para criar e gerir as pesquisas.The Tailspin.Web web role hosts an ASP.NET website that Tailspin customers use to create and manage surveys. Os clientes também utilizar este Web site para inscrever-se a aplicação e gerem as suas subscrições.Customers also use this website to sign up for the application and manage their subscriptions. Por fim, os administradores de Tailspin podem utilizá-lo para ver a lista de inquilinos e gerir os dados de inquilino.Finally, Tailspin administrators can use it to see the list of tenants and manage tenant data.

  • O Tailspin.Web.Survey.Public função da web aloja um Web site ASP.NET onde as pessoas possam tirar as pesquisas que os clientes de Tailspin publicar.The Tailspin.Web.Survey.Public web role hosts an ASP.NET website where people can take the surveys that Tailspin customers publish.

  • O Tailspin.Workers.Survey função de trabalho processamento em segundo plano.The Tailspin.Workers.Survey worker role does background processing. As funções da web colocar itens de trabalho para uma fila e a função de trabalho processa itens.The web roles put work items onto a queue, and the worker role processes the items. Duas tarefas em segundo plano são definidas: Exportar pesquisa responde a base de dados do Azure SQL e calcular estatísticas de respostas de pesquisa.Two background tasks are defined: Exporting survey answers to Azure SQL Database, and calculating statistics for survey answers.

Além de serviços Cloud, a aplicação de inquéritos utiliza outros serviços do Azure:In addition to Cloud Services, the Surveys application uses some other Azure services:

  • O armazenamento do Azure para pesquisas de arquivo, respostas de inquéritos e informações de inquilino.Azure Storage to store surveys, surveys answers, and tenant information.

  • A Cache de Redis do Azure para colocar em cache alguns dos dados armazenados no armazenamento do Azure, para acesso de leitura mais rápido.Azure Redis Cache to cache some of the data that is stored in Azure Storage, for faster read access.

  • O Azure Active Directory (Azure AD) para autenticar os clientes e os administradores de Tailspin.Azure Active Directory (Azure AD) to authenticate customers and Tailspin administrators.

  • Base de dados SQL do Azure para armazenar as respostas de pesquisa para análise.Azure SQL Database to store the survey answers for analysis.

Mover para o Service FabricMoving to Service Fabric

Conforme mencionado, o objetivo desta fase foi migrar para o Service Fabric com as alterações necessárias mínimo.As mentioned, the goal of this phase was migrating to Service Fabric with the minimum necessary changes. Para esse fim, criamos os serviços sem estado correspondente a cada função de serviço na nuvem no aplicativo original:To that end, we created stateless services corresponding to each cloud service role in the original application:

Aplicação de inquéritos no Service Fabric

Intencionalmente, esta arquitetura é semelhante à aplicação do original.Intentionally, this architecture is similar to the original application. No entanto, o diagrama oculta algumas diferenças importantes.However, the diagram hides some important differences. No restante deste artigo, iremos explorar essas diferenças.In the rest of this article, we'll explore those differences.

Converter as funções de serviço na nuvem para serviçosConverting the cloud service roles to services

Para a migração inicial, a Tailspin seguido os passos descritos em guia para converter a Web e funções de trabalho para serviços sem monitoração de estado do Service Fabric.For the initial migration, Tailspin followed the steps outlined in Guide to converting Web and Worker Roles to Service Fabric stateless services.

Criar o web serviços front-endCreating the web front-end services

No Service Fabric, um serviço é executado dentro de um processo criado pelo runtime do Service Fabric.In Service Fabric, a service runs inside a process created by the Service Fabric runtime. Para um front-end da web, isso significa que o serviço não está em execução dentro do IIS.For a web front end, that means the service is not running inside IIS. Em vez disso, o serviço deve hospedar um servidor web.Instead, the service must host a web server. Essa abordagem é chamada hospedagem interna, porque o código executado dentro do processo atua como o anfitrião do servidor web.This approach is called self-hosting, because the code that runs inside the process acts as the web server host.

A aplicação de inquéritos original usa o ASP.NET MVC.The original Surveys application uses ASP.NET MVC. Porque o ASP.NET MVC não pode ser autoalojado no Service Fabric, a Tailspin consideradas as seguintes opções de migração:Because ASP.NET MVC cannot be self-hosted in Service Fabric, Tailspin considered the following migration options:

  • As funções da web para ASP.NET Core, que pode ser hospedagem interna de porta.Port the web roles to ASP.NET Core, which can be self-hosted.
  • Converta o web site num aplicativo de página única (SPA) que chama uma API implementada usando ASP.NET Web API web.Convert the web site into a single-page application (SPA) that calls a web API implemented using ASP.NET Web API. Isso exigiria uma reformulação completa do front-end da web.This would have required a complete redesign of the web front end.
  • Manter o código existente do ASP.NET MVC e implementar o IIS num contentor do Windows Server no Service Fabric.Keep the existing ASP.NET MVC code and deploy IIS in a Windows Server container to Service Fabric. Essa abordagem requer pouca ou nenhuma alteração de código.This approach would require little or no code change.

A primeira opção, migrar para o ASP.NET Core, permitido Tailspin tirar partido das funcionalidades mais recentes do ASP.NET Core.The first option, porting to ASP.NET Core, allowed Tailspin to take advantage of the latest features in ASP.NET Core. Para fazer a conversão, Tailspin seguido os passos descritos em migrar do ASP.NET MVC para ASP.NET Core MVC.To do the conversion, Tailspin followed the steps described in Migrating From ASP.NET MVC to ASP.NET Core MVC.

Nota

Ao usar o ASP.NET Core com Kestrel, deve colocar um proxy inverso à frente Kestrel para processar o tráfego da Internet, por motivos de segurança.When using ASP.NET Core with Kestrel, you should place a reverse proxy in front of Kestrel to handle traffic from the Internet, for security reasons. Para obter mais informações, consulte implementação de servidor de web Kestrel no ASP.NET Core.For more information, see Kestrel web server implementation in ASP.NET Core. A secção implementar a aplicação descreve uma implementação recomendada do Azure.The section Deploying the application describes a recommended Azure deployment.

Serviços de escuta HTTPHTTP listeners

Nos serviços Cloud, uma função web ou de trabalho expõe um ponto final HTTP ao declará-la no o ficheiro de definição de serviço.In Cloud Services, a web or worker role exposes an HTTP endpoint by declaring it in the service definition file. Uma função da web tem de ter, pelo menos, um ponto final.A web role must have at least one endpoint.

<!-- Cloud service endpoint -->
<Endpoints>
    <InputEndpoint name="HttpIn" protocol="http" port="80" />
</Endpoints>

Da mesma forma, os pontos finais do Service Fabric são declarados no manifesto do serviço:Similarly, Service Fabric endpoints are declared in a service manifest:

<!-- Service Fabric endpoint -->
<Endpoints>
    <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8002" />
</Endpoints>

Ao contrário de uma função de serviço na nuvem, serviços do Service Fabric podem ser colocalizados no mesmo nó.Unlike a cloud service role, Service Fabric services can be colocated within the same node. Por conseguinte, cada serviço deve escutar numa porta distinta.Therefore, every service must listen on a distinct port. Neste artigo, discutiremos como os pedidos de cliente na porta 80 ou a porta 443 são roteados para a porta correta para o serviço.Later in this article, we'll discuss how client requests on port 80 or port 443 get routed to the correct port for the service.

Um serviço tem de criar explicitamente o serviços de escuta para cada ponto de extremidade.A service must explicitly create listeners for each endpoint. O motivo é que o Service Fabric é agnóstico sobre pilhas de comunicação.The reason is that Service Fabric is agnostic about communication stacks. Para obter mais informações, consulte criar um serviço web front-end para a sua aplicação com o ASP.NET Core.For more information, see Build a web service front end for your application using ASP.NET Core.

Empacotamento e a configuraçãoPackaging and configuration

Um serviço em nuvem contém os seguintes ficheiros de configuração e o pacote:A cloud service contains the following configuration and package files:

FicheiroFile DescriçãoDescription
definição de serviço (. csdef)Service definition (.csdef) Definições utilizadas pelo Azure para configurar o serviço em nuvem.Settings used by Azure to configure the cloud service. Define as funções, pontos de extremidade, tarefas de arranque e os nomes das definições de configuração.Defines the roles, endpoints, startup tasks, and the names of configuration settings.
configuração do serviço (. cscfg)Service configuration (.cscfg) Definições de por implementação, incluindo o número de instâncias de função, os números de porta de ponto final e os valores das definições de configuração.Per-deployment settings, including the number of role instances, endpoint port numbers, and the values of configuration settings.
Pacote de serviço (. cspkg)Service package (.cspkg) Contém o código do aplicativo e configurações e o ficheiro de definição de serviço.Contains the application code and configurations, and the service definition file.

Existe um ficheiro. csdef para todo o aplicativo.There is one .csdef file for the entire application. Pode ter vários ficheiros. cscfg para ambientes diferentes, como local, teste ou produção.You can have multiple .cscfg files for different environments, such as local, test, or production. Quando o serviço está em execução, pode atualizar o. cscfg, mas não o. csdef.When the service is running, you can update the .cscfg but not the .csdef. Para obter mais informações, consulte qual é o modelo de serviço em nuvem e como empacotá-lo?For more information, see What is the Cloud Service model and how do I package it?

Service Fabric tem uma divisão semelhante entre um serviço definição e o serviço definições, mas a estrutura é mais granular.Service Fabric has a similar division between a service definition and service settings, but the structure is more granular. Para compreender o modelo de configuração do Service Fabric, ele ajuda a compreender como uma aplicação do Service Fabric é empacotada.To understand Service Fabric's configuration model, it helps to understand how a Service Fabric application is packaged. Esta é a estrutura:Here is the structure:

Application package
  - Service packages
    - Code package
    - Configuration package
    - Data package (optional)

O pacote de aplicação é o que implementar.The application package is what you deploy. Ele contém um ou mais pacotes de serviço.It contains one or more service packages. Um pacote de serviço contém pacotes de código, configuração e dados.A service package contains code, configuration, and data packages. O pacote de código contém os binários para os serviços e o pacote de configuração contém as definições de configuração.The code package contains the binaries for the services, and the configuration package contains configuration settings. Este modelo permite-lhe atualizar os serviços individuais sem implementar novamente toda a aplicação.This model allows you to upgrade individual services without redeploying the entire application. Ele também permite-lhe atualizar apenas as definições de configuração, sem voltar a implementar o código ou reiniciar o serviço.It also lets you update just the configuration settings, without redeploying the code or restarting the service.

Uma aplicação do Service Fabric contém os seguintes ficheiros de configuração:A Service Fabric application contains the following configuration files:

FicheiroFile LocationLocation DescriçãoDescription
ApplicationManifest.xmlApplicationManifest.xml Pacote de aplicaçãoApplication package Define os serviços que compõem o aplicativo.Defines the services that compose the application.
ServiceManifest.xmlServiceManifest.xml Pacote de serviçoService package Descreve um ou mais serviços.Describes one or more services.
Settings.xmlSettings.xml Pacote de configuraçãoConfiguration package Contém definições de configuração para os serviços definidos no pacote de serviço.Contains configuration settings for the services defined in the service package.

Para obter mais informações, consulte modelar uma aplicação no Service Fabric.For more information, see Model an application in Service Fabric.

Para suportar diferentes definições de configuração para vários ambientes, utilize a seguinte abordagem, descrita em gerir parâmetros da aplicação para vários ambientes:To support different configuration settings for multiple environments, use the following approach, described in Manage application parameters for multiple environments:

  1. Defina a definição no ficheiro Setting.xml para o serviço.Define the setting in the Setting.xml file for the service.
  2. O manifesto do aplicativo, defina uma substituição para a definição.In the application manifest, define an override for the setting.
  3. Coloca definições específicas do ambiente nos ficheiros de parâmetro de aplicação.Put environment-specific settings into application parameter files.

Implementar a aplicaçãoDeploying the application

Ao passo que os serviços Cloud do Azure é um serviço gerido, o Service Fabric é um tempo de execução.Whereas Azure Cloud Services is a managed service, Service Fabric is a runtime. Pode criar clusters do Service Fabric em muitos ambientes, incluindo o Azure e no local.You can create Service Fabric clusters in many environments, including Azure and on premises. O diagrama seguinte mostra uma implementação recomendada para o Azure:The following diagram shows a recommended deployment for Azure:

Implementação do Service Fabric

O cluster do Service Fabric é implementado para um conjunto de dimensionamento de máquina virtual.The Service Fabric cluster is deployed to a virtual machine scale set. Conjuntos de dimensionamento são um recurso de computação do Azure que pode ser utilizado para implementar e gerir um conjunto de VMs idênticas.Scale sets are an Azure Compute resource that can be used to deploy and manage a set of identical VMs.

Conforme mencionado, é recomendado para colocar o servidor de web Kestrel atrás de um proxy reverso por motivos de segurança.As mentioned, it's recommended to place the Kestrel web server behind a reverse proxy for security reasons. Este diagrama apresenta Gateway de aplicação Azure, que é um serviço do Azure que oferece várias capacidades de balanceamento de carga de 7 de camada.This diagram shows Azure Application Gateway, which is an Azure service that offers various layer 7 load-balancing capabilities. Atua como um serviço de proxy de reversão, terminando a ligação de cliente e reencaminhando pedidos de pontos finais de back-end.It acts as a reverse-proxy service, terminating the client connection and forwarding requests to back-end endpoints. Pode usar uma solução de proxy inverso diferentes, como o nginx.You might use a different reverse proxy solution, such as nginx.

7 de encaminhamento de camadaLayer 7 routing

Na aplicação de inquéritos original, uma web role escutámos na porta 80 e a outra função da web escutámos na porta 443.In the original Surveys application, one web role listened on port 80, and the other web role listened on port 443.

Site públicoPublic site Site de gerenciamento de pesquisaSurvey management site
http://tailspin.cloudapp.net https://tailspin.cloudapp.net

Outra opção consiste em utilizar o encaminhamento de camada 7.Another option is to use layer 7 routing. Nesta abordagem, os caminhos de URL diferentes são roteados para números de porta diferentes no back-end.In this approach, different URL paths get routed to different port numbers on the back end. Por exemplo, o site público pode utilizar caminhos de URL a partir do /public/.For example, the public site might use URL paths starting with /public/.

As opções para o encaminhamento de camada 7 incluem:Options for layer 7 routing include:

  • Utilize o Gateway de aplicação.Use Application Gateway.
  • Utilize uma aplicação virtual de rede (NVA), como o nginx.Use a network virtual appliance (NVA), such as nginx.
  • Escreva um gateway personalizado como um serviço sem estado.Write a custom gateway as a stateless service.

Considere esta abordagem se tiver duas ou mais serviços com pontos de extremidade HTTP públicos, mas deseja que eles sejam apresentados como um site com um nome de domínio único.Consider this approach if you have two or more services with public HTTP endpoints, but want them to appear as one site with a single domain name.

Uma abordagem que nós não Recomendamos que está a permitir que clientes externos enviar pedidos através do Service Fabric proxy inverso.One approach that we don't recommend is allowing external clients to send requests through the Service Fabric reverse proxy. Embora isso seja possível, o proxy inverso destina-se para a comunicação de serviço para serviço.Although this is possible, the reverse proxy is intended for service-to-service communication. Abri-lo para clientes externos expõe qualquer serviço está em execução no cluster que tem um ponto de final HTTP.Opening it to external clients exposes any service running in the cluster that has an HTTP endpoint.

Tipos de nós e restrições de posicionamentoNode types and placement constraints

Na implementação mostrada acima, todos os serviços são executados em todos os nós.In the deployment shown above, all the services run on all the nodes. No entanto, é também possível agrupar serviços, para que determinados serviços executar apenas em determinado nós dentro do cluster.However, you can also group services, so that certain services run only on particular nodes within the cluster. Os motivos para usar essa abordagem incluem:Reasons to use this approach include:

  • Execute alguns serviços em diferentes tipos VM.Run some services on different VM types. Por exemplo, alguns serviços podem ser intensivas de computação ou exigir GPUs.For example, some services might be compute-intensive or require GPUs. Pode ter uma mistura de tipos de VM no seu cluster do Service Fabric.You can have a mix of VM types in your Service Fabric cluster.
  • Proteja os serviços front-end de serviços de back-end, por motivos de segurança.Isolate front-end services from back-end services, for security reasons. Todos os serviços front-end serão executado num conjunto de nós e os serviços de back-end serão executado em nós diferentes no mesmo cluster.All the front-end services will run on one set of nodes, and the back-end services will run on different nodes in the same cluster.
  • Requisitos de escala diferente.Different scale requirements. Alguns serviços poderão ter de ser executado em nós de mais do que outros serviços.Some services might need to run on more nodes than other services. Por exemplo, se definir nós front-end e back-end, cada conjunto pode ser dimensionado de forma independente.For example, if you define front-end nodes and back-end nodes, each set can be scaled independently.

O diagrama seguinte mostra um cluster que separa os serviços de front-end e back-end:The following diagram shows a cluster that separates front-end and back-end services:

Colocação de nó

Para implementar essa abordagem:To implement this approach:

  1. Quando criar o cluster, defina duas ou mais tipos de nó.When you create the cluster, define two or more node types.
  2. Para cada serviço, utilize restrições de posicionamento para atribuir o serviço a um tipo de nó.For each service, use placement constraints to assign the service to a node type.

Quando implementar no Azure, cada tipo de nó é implementado para um conjunto de dimensionamento de máquina virtual separada.When you deploy to Azure, each node type is deployed to a separate virtual machine scale set. Cluster do Service Fabric abrange todos os tipos de nó.The Service Fabric cluster spans all node types. Para obter mais informações, consulte conjuntos de dimensionamento da relação entre a máquina virtual e tipos de nó do Service Fabric.For more information, see The relationship between Service Fabric node types and virtual machine scale sets.

Se um cluster tem vários tipos de nó, um tipo de nó é designado como o primário tipo de nó.If a cluster has multiple node types, one node type is designated as the primary node type. Serviços de runtime do Service Fabric, como o serviço de gestão do Cluster, executam o tipo de nó primário.Service Fabric runtime services, such as the Cluster Management Service, run on the primary node type. Aprovisione, pelo menos, 5 nós para o tipo de nó principal num ambiente de produção.Provision at least 5 nodes for the primary node type in a production environment. O tipo de nó deve ter, pelo menos, 2 nós.The other node type should have at least 2 nodes.

Configurar e gerir o clusterConfiguring and managing the cluster

Clusters tem de ser protegidos para impedir que os utilizadores não autorizados a ligar ao seu cluster.Clusters must be secured to prevent unauthorized users from connecting to your cluster. Recomenda-se para utilizar o Azure AD para autenticar clientes e certificados X.509 para segurança de nó para nó.It is recommended to use Azure AD to authenticate clients, and X.509 certificates for node-to-node security. Para obter mais informações, veja Service Fabric cluster security scenarios (Cenários de segurança de clusters do Service Fabric).For more information, see Service Fabric cluster security scenarios.

Para configurar um ponto de final público do HTTPS, consulte especificar recursos num manifesto do serviço.To configure a public HTTPS endpoint, see Specify resources in a service manifest.

Pode aumentar horizontalmente a aplicação ao adicionar as VMs no cluster.You can scale out the application by adding VMs to the cluster. Os conjuntos de dimensionamento de máquina virtual suportam o dimensionamento automático com regras de dimensionamento automático com base nos contadores de desempenho.Virtual machine scale sets support autoscaling using autoscale rules based on performance counters. Para obter mais informações, consulte dimensionar um cluster do Service Fabric dentro ou para fora usando regras de dimensionamento automático.For more information, see Scale a Service Fabric cluster in or out using autoscale rules.

Enquanto o cluster está em execução, recolha registos de todos os nós numa localização central.While the cluster is running, collect logs from all the nodes in a central location. Para obter mais informações, consulte recolher registos com o diagnóstico do Azure.For more information, see Collect logs by using Azure Diagnostics.

Refatorar o aplicativoRefactor the application

Depois do aplicativo é transportado para o Service Fabric, a próxima etapa é refatorá-lo para uma arquitetura mais granular.After the application is ported to Service Fabric, the next step is to refactor it to a more granular architecture. Motivação da Tailspin de refatoração é tornar mais fácil desenvolver, criar e implementar a aplicação de inquéritos.Tailspin's motivation for refactoring is to make it easier to develop, build, and deploy the Surveys application. Por decompondo a web existente e funções de trabalho para uma arquitetura mais granular, Tailspin quer remover os fortemente conjugadas dados e de comunicação as dependências existentes entre essas funções.By decomposing the existing web and worker roles to a more granular architecture, Tailspin wants to remove the existing tightly coupled communication and data dependencies between these roles.

Tailspin vê outros benefícios de mover a aplicação de inquéritos para uma arquitetura mais granular:Tailspin sees other benefits in moving the Surveys application to a more granular architecture:

  • Cada serviço pode ser empacotado em projetos independentes com um âmbito pequeno o bastante para serem geridas por uma equipe pequena.Each service can be packaged into independent projects with a scope small enough to be managed by a small team.
  • Cada serviço pode ser uma versão e implementado independentemente.Each service can be independently versioned and deployed.
  • Cada serviço pode ser implementado com a melhor tecnologia para esse serviço.Each service can be implemented using the best technology for that service. Por exemplo, um cluster do service fabric pode incluir serviços criados com versões diferentes das estruturas de .net, Java ou outras linguagens como C ou C++.For example, a service fabric cluster can include services built using different versions of the .Net Frameworks, Java, or other languages such as C or C++.
  • Cada serviço pode ser dimensionado independentemente para responder a aumenta e diminui a carga.Each service can be independently scaled to respond to increases and decreases in load.

O código-fonte para a versão reformulada da aplicação está disponível no GitHubThe source code for the refactored version of the app is available on GitHub

Considerações de conceçãoDesign considerations

O diagrama seguinte mostra a arquitetura da aplicação de inquéritos refatorada para uma arquitetura mais granular:The following diagram shows the architecture of the Surveys application refactored to a more granular architecture:

Aplicação de inquéritos refatorada

Tailspin.Web é um serviço sem estado, a hospedagem interna de um aplicativo ASP.NET MVC que os clientes de Tailspin visitar a criar pesquisas e ver os resultados da pesquisa.Tailspin.Web is a stateless service self-hosting an ASP.NET MVC application that Tailspin customers visit to create surveys and view survey results. Este serviço compartilha a maior parte do seu código com o Tailspin.Web serviço do aplicativo portado do Service Fabric.This service shares most of its code with the Tailspin.Web service from the ported Service Fabric application. Como mencionado anteriormente, este serviço utiliza o ASP.NET core e muda de utilizar o Kestrel como front-end da web para implementar um WebListener.As mentioned earlier, this service uses ASP.NET core and switches from using Kestrel as web frontend to implementing a WebListener.

Tailspin.Web.Survey.Public é um serviço sem estado também hospedando internamente um site ASP.NET MVC.Tailspin.Web.Survey.Public is a stateless service also self-hosting an ASP.NET MVC site. Os utilizadores visitam este site para selecionar as pesquisas de uma lista e, em seguida, preencha-los. Este serviço compartilha a maior parte do seu código com o Tailspin.Web.Survey.Public serviço do aplicativo portado do Service Fabric.Users visit this site to select surveys from a list and then fill them out. This service shares most of its code with the Tailspin.Web.Survey.Public service from the ported Service Fabric application. Este serviço também utiliza o ASP.NET Core e também muda de utilizar o Kestrel como front-end da web para implementar um WebListener.This service also uses ASP.NET Core and also switches from using Kestrel as web frontend to implementing a WebListener.

Tailspin.SurveyResponseService é um serviço com estado que os arquivos de pesquisa respostas no armazenamento de Blobs do Azure.Tailspin.SurveyResponseService is a stateful service that stores survey answers in Azure Blob Storage. Ele também intercala respostas os dados de análise de pesquisa.It also merges answers into the survey analysis data. O serviço é implementado como um serviço com monitorização de estado porque ele usa um ReliableConcurrentQueue para processar as respostas de pesquisa em lotes.The service is implemented as a stateful service because it uses a ReliableConcurrentQueue to process survey answers in batches. Esta funcionalidade foi originalmente implementada no Tailspin.AnswerAnalysisService serviço em que o aplicativo portado do Service Fabric.This functionality was originally implemented in the Tailspin.AnswerAnalysisService service in the ported Service Fabric application.

Tailspin.SurveyManagementService é um serviço sem estado que armazena e recupera pesquisas e perguntas da pesquisa.Tailspin.SurveyManagementService is a stateless service that stores and retrieves surveys and survey questions. O serviço utiliza o armazenamento de Blobs do Azure.The service uses Azure Blob storage. Essa funcionalidade também originalmente foi implementada nos componentes de acesso a dados das Tailspin.Web e Tailspin.Web.Survey.Public serviços no aplicativo portado do Service Fabric.This functionality was also originally implemented in the data access components of the Tailspin.Web and Tailspin.Web.Survey.Public services in the ported Service Fabric application. Tailspin refatorado a funcionalidade original para este serviço para permitir que dimensione de forma independente.Tailspin refactored the original functionality into this service to allow it to scale independently.

Tailspin.SurveyAnswerService é um serviço sem estado, que obtém respostas de pesquisa e análise de pesquisa.Tailspin.SurveyAnswerService is a stateless service that retrieves survey answers and survey analysis. O serviço também utiliza o armazenamento de Blobs do Azure.The service also uses Azure Blob storage. Essa funcionalidade também originalmente foi implementada nos componentes de acesso a dados das Tailspin.Web serviço em que o aplicativo portado do Service Fabric.This functionality was also originally implemented in the data access components of the Tailspin.Web service in the ported Service Fabric application. Tailspin refatorado a funcionalidade original para este serviço porque ele espera que uma carga menor e quiser utilizar menos instâncias para poupar recursos.Tailspin refactored the original functionality into this service because it expects less load and wants to use fewer instances to conserve resources.

Tailspin.SurveyAnalysisService é um serviço sem estado que mantém os dados de resumo de resposta de pesquisa numa cache de Redis para obtenção rápida.Tailspin.SurveyAnalysisService is a stateless service that persists survey answer summary data in a Redis cache for quick retrieval. Este serviço é chamado pelos Tailspin.SurveyResponseService sempre que uma pesquisa foi respondida e os novos dados de resposta de pesquisa são mesclados nos dados de resumo.This service is called by the Tailspin.SurveyResponseService each time a survey is answered and the new survey answer data is merged in the summary data. Este serviço inclui a funcionalidade implementada originalmente na Tailspin.AnswerAnalysisService serviço do aplicativo portado do Service Fabric.This service includes the functionality originally implemented in the Tailspin.AnswerAnalysisService service from the ported Service Fabric application.

Sem monitoração de estado em relação a serviços com estadoStateless versus stateful services

O Azure Service Fabric suporta os seguintes modelos de programação:Azure Service Fabric supports the following programming models:

  • O modelo de executáveis de convidado permite que qualquer executável ser empacotado como um serviço e implementada num cluster do Service Fabric.The guest executable model allows any executable to be packaged as a service and deployed to a Service Fabric cluster. Service Fabric orquestra e gere a execução do convidado executável.Service Fabric orchestrates and manages execution of the guest executable.
  • Permite que o modelo de contentor para implementação de serviços em imagens de contentor.The container model allows for deployment of services in container images. O Service Fabric suporta a criação e gestão de contentores por cima de contentores de kernel do Linux, bem como contentores do Windows Server.Service Fabric supports creation and management of containers on top of Linux kernel containers as well as Windows Server containers.
  • Os serviços fiáveis, modelo de programação permite a criação de serviços com ou sem estado, que se integram com todas as funcionalidades de plataforma do Service Fabric.The reliable services programming model allows for the creation of stateless or stateful services that integrate with all Service Fabric platform features. Permitem serviços com estado para estado replicado sejam armazenados no cluster do Service Fabric.Stateful services allow for replicated state to be stored in the Service Fabric cluster. Serviços sem estado não o fizer.Stateless services do not.
  • Dos reliable actors em modelo de programação permite a criação de serviços que implementam o padrão de ator virtual.The reliable actors programming model allows for the creation of services that implement the virtual actor pattern.

Todos os serviços no aplicativo de pesquisas são dos reliable services sem monitorização de estado, exceto para o Tailspin.SurveyResponseService serviço.All the services in the Surveys application are stateless reliable services, except for the Tailspin.SurveyResponseService service. Este serviço implementa uma ReliableConcurrentQueue para processar as respostas de pesquisa quando eles são recebidos.This service implements a ReliableConcurrentQueue to process survey answers when they are received. Respostas a ReliableConcurrentQueue são guardadas no armazenamento de Blobs do Azure e passadas para o Tailspin.SurveyAnalysisService para análise.Responses in the ReliableConcurrentQueue are saved into Azure Blob Storage and passed to the Tailspin.SurveyAnalysisService for analysis. Tailspin escolhe um ReliableConcurrentQueue porque as respostas não necessitam de strict first-in-first-out (FIFO) ordenação fornecida por uma fila, como o Azure Service Bus.Tailspin chooses a ReliableConcurrentQueue because responses do not require strict first-in-first-out (FIFO) ordering provided by a queue such as Azure Service Bus. Um ReliableConcurrentQueue também foi concebido para fornecer alto débito e baixa latência para a fila e tirar da fila de operações.A ReliableConcurrentQueue is also designed to deliver high throughput and low latency for queue and dequeue operations.

Operações para manter a retirada da fila de itens de um ReliableConcurrentQueue ideal é que devem ser idempotentes.Operations to persist dequeued items from a ReliableConcurrentQueue should ideally be idempotent. Se uma exceção for gerada durante o processamento de um item da fila, o mesmo item pode ser processado mais de uma vez.If an exception is thrown during the processing of an item from the queue, the same item may be processed more than once. No aplicativo de pesquisas, a operação de pesquisa de intercalação respostas para o Tailspin.SurveyAnalysisService não for idempotente porque Tailspin decidiu que os dados de análise de pesquisa são apenas um atual instantâneo dos dados de análise e não precisa de ser consistente.In the Surveys application, the operation to merge survey answers to the Tailspin.SurveyAnalysisService is not idempotent because Tailspin decided that the survey analysis data is only a current snapshot of the analysis data and does not need to be consistent. As respostas de pesquisa guardadas num armazenamento de Blobs do Azure são eventualmente consistentes, para que a análise de final de pesquisa pode sempre ser recalculada corretamente partir destes dados.The survey answers saved to Azure Blob Storage are eventually consistent, so the survey final analysis can always be recalculated correctly from this data.

Estrutura de comunicaçãoCommunication framework

Cada serviço no aplicativo de pesquisas comunica através de uma API web RESTful.Each service in the Surveys application communicates using a RESTful web API. RESTful APIs oferecem as seguintes vantagens:RESTful APIs offer the following benefits:

  • Facilidade de utilização: cada serviço é criado com o ASP.NET Core MVC, que suporta nativamente a criação de APIs da Web.Ease of use: each service is built using ASP.NET Core MVC, which natively supports the creation of Web APIs.
  • Segurança: Embora cada serviço não exigir SSL, a Tailspin poderia exigir cada serviço para fazê-lo.Security: While each service does not require SSL, Tailspin could require each service to do so.
  • Controle de versão: os clientes possam ser escritos e testados em relação a uma versão específica de uma API web.Versioning: clients can be written and tested against a specific version of a web API.

Serviços no uso do aplicativo de pesquisa a proxy inverso implementado pelo Service Fabric.Services in the Survey application use the reverse proxy implemented by Service Fabric. Proxy inverso é um serviço que é executado em cada nó no cluster do Service Fabric e fornece resolução de ponto de extremidade, tentativas automáticas e lida com outros tipos de falhas de ligação.Reverse proxy is a service that runs on each node in the Service Fabric cluster and provides endpoint resolution, automatic retry, and handles other types of connection failures. Para utilizar o proxy inverso, cada chamada à RESTful API para um serviço específico é feita a utilizar uma porta de proxy inverso predefinidos.To use the reverse proxy, each RESTful API call to a specific service is made using a predefined reverse proxy port. Por exemplo, se foi definida como a porta de proxy inverso 19081, uma chamada para o Tailspin.SurveyAnswerService podem ser feitas da seguinte forma:For example, if the reverse proxy port has been set to 19081, a call to the Tailspin.SurveyAnswerService can be made as follows:

static SurveyAnswerService()
{
    httpClient = new HttpClient
    {
        BaseAddress = new Uri("http://localhost:19081/Tailspin/SurveyAnswerService/")
    };
}

Para ativar o proxy inverso, especifica uma porta de proxy inverso durante a criação de cluster do Service Fabric.To enable reverse proxy, specify a reverse proxy port during creation of the Service Fabric cluster. Para obter mais informações, consulte proxy inverso no Azure Service Fabric.For more information, see reverse proxy in Azure Service Fabric.

Considerações de desempenhoPerformance considerations

Tailspin criado o ASP.NET Core para os serviços Tailspin.Web e Tailspin.Web.Surveys.Public através de modelos do Visual Studio.Tailspin created the ASP.NET Core services for Tailspin.Web and Tailspin.Web.Surveys.Public using Visual Studio templates. Por predefinição, estes modelos incluem o registo para a consola.By default, these templates include logging to the console. Registo para a consola pode ser feito durante o desenvolvimento e depuração, mas todos os registos para a consola devem ser removida quando a aplicação é implementada em produção.Logging to the console may be done during development and debugging, but all logging to the console should be removed when the application is deployed to production.

Nota

Para obter mais informações sobre como configurar a monitorização e diagnóstico para aplicações do Service Fabric em execução na produção, consulte monitorização e diagnóstico para o Azure Service Fabric.For more information about setting up monitoring and diagnostics for Service Fabric applications running in production, see monitoring and diagnostics for Azure Service Fabric.

Por exemplo, as seguintes linhas de startup.cs para cada uma das web dos serviços de front-end devem ser comentados:For example, the following lines in startup.cs for each of the web front end services should be commented out:

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    //loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    //loggerFactory.AddDebug();

    app.UseMvc();
}

Nota

Essas linhas podem ser condicionalmente excluídas quando o Visual Studio é definido como versão durante a publicação.These lines may be conditionally excluded when Visual Studio is set to release when publishing.

Por fim, quando Tailspin implementa a aplicação Tailspin produção, eles mudar Visual Studio para versão modo.Finally, when Tailspin deploys the Tailspin application to production, they switch Visual Studio to release mode.

Considerações sobre implementaçãoDeployment considerations

A aplicação de inquéritos refatorada é composta por cinco serviços sem estado e um serviço com estado, para que o planejamento de cluster está limitado a determinar o tamanho VM correto e o número de nós.The refactored Surveys application is composed of five stateless services and one stateful service, so cluster planning is limited to determining the correct VM size and number of nodes. Na applicationmanifest. XML ficheiro que descreve o cluster, os conjuntos de Tailspin a InstanceCount atributo do StatelessService marca como -1 para cada um do serviços.In the applicationmanifest.xml file that describes the cluster, Tailspin sets the InstanceCount attribute of the StatelessService tag to -1 for each of the services. Um valor de -1 direciona o Service Fabric para criar uma instância do serviço em cada nó no cluster.A value of -1 directs Service Fabric to create an instance of the service on each node in the cluster.

Nota

Serviços com estado requerem a etapa adicional de planear o número correto de partições e réplicas para seus dados.Stateful services require the additional step of planning the correct number of partitions and replicas for their data.

Tailspin implementa o cluster com o portal do Azure.Tailspin deploys the cluster using the Azure portal. O tipo de recurso de Cluster do Service Fabric implementa toda a infraestrutura necessária, incluindo conjuntos de dimensionamento de máquina virtual e um balanceador de carga.The Service Fabric Cluster resource type deploys all of the necessary infrastructure, including virtual machine scale sets and a load balancer. Os tamanhos VM recomendados são apresentados no portal do Azure durante o processo de aprovisionamento para o cluster do Service Fabric.The recommended VM sizes are displayed in the Azure portal during the provisioning process for the Service Fabric cluster. Uma vez que as VMs são implementadas num conjunto de dimensionamento de máquina virtual, que podem ser ambos dimensionadas verticalmente e horizontalmente à medida que aumenta de carga de utilizador.Because the VMs are deployed in a virtual machine scale set, they can be both scaled up and out as user load increases.

Passos SeguintesNext steps

O código de aplicação de inquéritos está disponível no GitHub.The Surveys application code is available on GitHub.

Se está apenas a começar com do Azure Service Fabric , first set up your development environment then download the latest Azure SDK e o [SDK do Azure Service Fabric][service fabric].If you are just getting started with Azure Service Fabric, first set up your development environment then download the latest Azure SDK and the Azure Service Fabric SDK. O SDK inclui o Gestor de clusters de OneBox para que possa implementar e testar a aplicação de inquéritos localmente com a depuração completa de F5.The SDK includes the OneBox cluster manager so you can deploy and test the Surveys application locally with full F5 debugging.