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

Código de exemplo do GitHubGitHub 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. Num artigo posterior, irá otimizamos o aplicativo para o Service Fabric, adotando uma arquitetura de microsserviços.In a later article, we will optimize the application for Service Fabric by adopting a microservices architecture.

Antes de ler este artigo, é útil para entender as noções básicas de arquiteturas de microsserviços e de Service Fabric em geral.Before reading this article, it will be useful to understand the basics of Service Fabric and microservices architectures in general. Consulte os seguintes artigos:See the following articles:

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

Em 2012, o grupo de padrões e práticas criou uma aplicação denominada Surveys, de um livro chamado desenvolver aplicativos de multi-inquilino para a nuvem.In 2012, the patterns & practices group created an application called Surveys, for a book called Developing Multi-tenant Applications for the Cloud. O livro descreve uma empresa fictícia com o nome Tailspin que projeta e implementa a aplicação de inquéritos.The book describes a fictitious company named Tailspin that designs and implements the Surveys application.

Pesquisas é uma aplicação multi-inquilino que permite aos clientes criar inquéritos.Surveys is a multitenant application that allows customers to create surveys. Depois de um cliente se inscreve para a aplicação, os membros da organização do cliente podem criar e publicar as pesquisas e recolher os resultados para análise.After a customer signs up for the application, members of the customer's organization 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.

Este artigo descreve a primeira fase.This article describes the first phase. Um artigo posterior descrevem a segunda fase.A later article will describe the second phase. 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 começariam a redefinir a arquitetura do aplicativo em microsserviços.While porting to Service Fabric, you would also start to re-architect 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.

O serviço em nuvem é uma versão atualizada do aplicativo original do desenvolver aplicativos de multilocação livro.The cloud service is an updated version of the original application from the Developing Multi-tenant Applications book.

Por que motivo Microsserviços?Why Microservices?

Uma visão detalhada dos microsserviços é além do escopo deste artigo, mas aqui estão alguns dos benefícios que Tailspin espera obter ao mover para uma arquitetura de microsserviços:An in-depth discussion of microservices is beyond scope of this article, but here are some of the benefits that Tailspin hopes to get by moving to a microservices architecture:

  • As atualizações de aplicações.Application upgrades. Serviços podem ser implementados de forma independente, para que possa tirar uma abordagem incremental para atualizar uma aplicação.Services can be deployed independently, so you can take an incremental approach to upgrading an application.
  • Isolamento de resiliência e falhas.Resiliency and fault isolation. Se um serviço falhar, outros serviços continuam a executar.If a service fails, other services continue to run.
  • Escalabilidade.Scalability. Os serviços podem ser dimensionados de forma independente.Services can be scaled independently.
  • Flexibilidade.Flexibility. Os serviços são concebidos em torno de cenários de negócios, não de pilhas de tecnologia, tornando mais fácil migrar serviços para novas tecnologias, arquiteturas nem arquivos de dados.Services are designed around business scenarios, not technology stacks, making it easier to migrate services to new technologies, frameworks, or data stores.
  • Desenvolvimento ágil.Agile development. Serviços individuais têm menos código do que uma aplicação monolítica, tornando o código base mais fácil para entender, motivo sobre e teste.Individual services have less code than a monolithic application, making the code base easier to understand, reason about, and test.
  • Equipas pequenas e direcionadas.Small, focused teams. Uma vez que o aplicativo é dividido em vários serviços pequenos, cada serviço pode ser criado por uma pequena equipe focada.Because the application is broken down into many small services, each service can be built by a small focused team.

Por que motivo do Service Fabric?Why Service Fabric?

O Service Fabric é uma boa opção para uma arquitetura de microsserviços, porque a maioria dos recursos necessários num sistema distribuído incorporadas no Service Fabric, incluindo:Service Fabric is a good fit for a microservices architecture, 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 aplicativos.For a more in-depth discussion, see Learn about the differences between Cloud Services and Service Fabric before migrating applications.

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*
AlojamentoHosting 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áticoAuto-scaling Serviço incorporadoBuilt-in service Conjuntos de dimensionamento de VM para ampliação automáticaVM Scale Sets for auto scale out
DepurarDebugging Emulador localLocal emulator Local clusterLocal cluster

* Utilização de serviços com estado [coleções fiáveis] sf-reliable-collections 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.

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:

Intencionalmente, esta arquitetura é muito semelhante para o aplicativo original.Intentionally, this architecture is very 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

Conforme mencionado, migramos cada função de serviço na nuvem para um serviço do Service Fabric.As mentioned, we migrated each cloud service role to a Service Fabric service. Como as funções de serviço cloud são sem monitoração de estado, para esta fase fazia sentido para criar serviços sem estado no Service Fabric.Because cloud service roles are stateless, for this phase it made sense to create stateless services in Service Fabric.

Para a migração, Seguimos 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 migration, we 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.

O requisito para a hospedagem significa que um serviço do Service Fabric não é possível usar ASP.NET MVC ou Web Forms do ASP.NET, pois essas estruturas requerem o IIS e não suportam a hospedagem interna.The requirement to self-host means that a Service Fabric service can't use ASP.NET MVC or ASP.NET Web Forms, because those frameworks require IIS and do not support self-hosting. As opções para a hospedagem interna incluem:Options for self-hosting include:

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, nós consideramos as seguintes opções de migração:Because ASP.NET MVC cannot be self-hosted in Service Fabric, we 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, dotou-nos tirar partido das funcionalidades mais recentes do ASP.NET Core.The first option, porting to ASP.NET Core, allowed us to take advantage of the latest features in ASP.NET Core. Para fazer a conversão, Seguimos os passos descritos em migrar do ASP.NET MVC para ASP.NET Core MVC.To do the conversion, we 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, no entanto, serviços do Service Fabric podem ser colocalizados no mesmo nó.Unlike a cloud service role, however, Service Fabric services can be co-located 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 LocalizaçãoLocation 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. Neste artigo, vamos nos concentrar em implementar no Azure.In this article, we focus on deploying to Azure.

O diagrama seguinte mostra uma implementação recomendada:The following diagram shows a recommended deployment:

O cluster do Service Fabric é implementado para um conjunto de dimensionamento VM.The Service Fabric cluster is deployed to a VM 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, o servidor de web Kestrel requer um proxy inverso por motivos de segurança.As mentioned, the Kestrel web server requires a reverse proxy for security reasons. Este diagrama apresenta Gateway de aplicação do Azure, que é um serviço do Azure que oferece várias capacidades de balanceamento de carga layer 7.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:

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] sf-placement-constraints 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 VMS separado.When you deploy to Azure, each node type is deployed to a separate VM 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 a relação entre tipos de nó do Service Fabric e conjuntos de dimensionamento de máquinas virtuais.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, consulte cenários de segurança de cluster 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. Conjuntos de dimensionamento VM suportam dimensionamento automático com regras de dimensionamento automático com base nos contadores de desempenho.VM scale sets support auto-scaling using auto-scale 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 auto-scale rules.

Enquanto o cluster está em execução, deve recolher registos de todos os nós numa localização central.While the cluster is running, you should 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.

ConclusãoConclusion

A aplicação de inquéritos para recursos de infraestrutura do serviço de migração foi bem simples.Porting the Surveys application to Service Fabric was fairly straightforward. Para resumir, fizemos o seguinte:To summarize, we did the following:

  • Converter as funções para serviços sem estado.Converted the roles to stateless services.
  • Converter os front-ends web para ASP.NET Core.Converted the web front ends to ASP.NET Core.
  • Alterou os arquivos de empacotamento e a configuração para o modelo do Service Fabric.Changed the packaging and configuration files to the Service Fabric model.

Além disso, a implementação foi alterado de serviços Cloud para um cluster do Service Fabric em execução num conjunto de dimensionamento de VM.In addition, the deployment changed from Cloud Services to a Service Fabric cluster running in a VM Scale Set.

Passos SeguintesNext steps

Agora que a aplicação de inquéritos foram convertida com êxito, a Tailspin quer tirar partido das funcionalidades do Service Fabric, tais como implementação de serviço independente e controle de versão.Now that the Surveys application has been successfully ported, Tailspin wants to take advantage of Service Fabric features such as independent service deployment and versioning. Saiba como Tailspin decompostos estes serviços para uma arquitetura mais granular para tirar partido destas funcionalidades do Service Fabric no Refatorizar uma aplicação do Azure Service Fabric migrada a partir de serviços Cloud do AzureLearn how Tailspin decomposed these services to a more granular architecture to take advantage of these Service Fabric features in Refactor an Azure Service Fabric Application migrated from Azure Cloud Services