Modernizar aplicativos .NET existentes com contêineres do Windows e da nuvem do Azure (2ª edição)Modernize existing .NET applications with Azure cloud and Windows Containers (2nd edition)

Imagem da capa do guia Modernizar aplicativos .NET.

PUBLICADO PORPUBLISHED BY
Microsoft Press e Microsoft DevDivMicrosoft Press and Microsoft DevDiv
Divisões da Microsoft CorporationDivisions of Microsoft Corporation
Uma maneira de MicrosoftOne Microsoft Way
Redmond, Washington 98052-6399Redmond, Washington 98052-6399

Copyright © 2018, Microsoft CorporationCopyright © 2018 by Microsoft Corporation

Todos os direitos reservados.All rights reserved. Nenhuma parte do conteúdo deste guia pode ser reproduzida de nenhuma forma, nem por nenhum meio, sem a permissão por escrito do distribuidor.No part of the contents of this book may be reproduced in any form or by any means without the written permission of the publisher.

Este livro está disponível gratuitamente na forma de um livro eletrônico (e-book) por meio de diversos canais da Microsoft, como https://dot.net/architecture.This book is available for free in the form of an electronic book (e-book) available through multiple channels at Microsoft such as https://dot.net/architecture.

Se você tiver dúvidas relacionadas a esse livro, envie-as por email para dotnet-architecture-ebooks-feedback@service.microsoft.comIf you have questions related to this book, email at dotnet-architecture-ebooks-feedback@service.microsoft.com

Este livro é fornecido “no estado em que se encontra” e expressa os pontos de vista e as opiniões do autor.This book is provided "as-is" and expresses the author's views and opinions. Os pontos de vista, as opiniões e as informações expressos neste livro, incluindo URLs e outras referências a sites da Internet, podem ser alteradas sem aviso prévio.The views, opinions, and information expressed in this book, including URL and other Internet website references, may change without notice.

Alguns exemplos aqui representados são fornecidos apenas para ilustração e são fictícios.Some examples depicted herein are provided for illustration only and are fictitious. Nenhuma associação ou conexão real é intencional ou deve ser deduzida.No real association or connection is intended or should be inferred.

A Microsoft e as marcas listadas em https://www.microsoft.com na página da Web "Marcas" são marcas comerciais do grupo de empresas Microsoft.Microsoft and the trademarks listed at https://www.microsoft.com on the "Trademarks" webpage are trademarks of the Microsoft group of companies. Todas as outras marcas são propriedade de seus respectivos proprietários.All other marks are property of their respective owners.

Autor:Author:

Cesar de la Torre, PM sênior, equipe de produto do .NET, Microsoft Corp.Cesar de la Torre, Sr. PM, .NET Product Team, Microsoft Corp.

Participantes e revisores:Participants and reviewers:

Scott Hunter, PM Diretor de Parceiro, equipe do .NET, MicrosoftScott Hunter, Partner Director PM, .NET team, Microsoft
Paul Yuknewicz, gerente de PM Principal, equipe das Ferramentas do Visual Studio, MicrosoftPaul Yuknewicz, Principal PM Manager, Visual Studio Tools team, Microsoft
Lisa Guthrie, PM sênior, equipe de Ferramentas do Visual Studio, MicrosoftLisa Guthrie, Sr. PM, Visual Studio Tools team, Microsoft
Ankit Asthana, Gerente de PM Principal, equipe do .NET, MicrosoftAnkit Asthana, Principal PM Manager, .NET team, Microsoft
Unai Zorrilla, líder de desenvolvimento, conceitos simplesUnai Zorrilla, Developer Lead, Plain Concepts
Javier Valero, Diretor Executivo de Operações no Grupo SolutioJavier Valero, Chief Operating Officer at Grupo Solutio

IntroduçãoIntroduction

Quando você decidir modernizar seus serviços ou aplicativos Web e movê-los para a nuvem, você não precisará necessariamente recriar totalmente a arquitetura de seus aplicativos.When you decide to modernize your web applications or services and move them to the cloud, you don't necessarily have to fully rearchitect your apps. Recriar a arquitetura de um aplicativo usando uma abordagem avançada como microsserviços nem sempre é uma opção devido a restrições de custo e tempo.Rearchitecting an application by using an advanced approach like microservices isn't always an option because of cost and time restraints. Dependendo do tipo de aplicativo, recriar a arquitetura dele também pode não ser necessário.Depending on the type of application, rearchitecting an app also might not be necessary. Para otimizar o custo-benefício da estratégia de migração de nuvem da sua organização, é importante considerar as necessidades do seu negócio e os requisitos dos seus aplicativos.To optimize the cost-effectiveness of your organization's cloud migration strategy, it's important to consider the needs of your business and requirements of your apps. Você precisará determinar:You'll need to determine:

  • Quais aplicativos exigem uma transformação ou recriação da arquitetura.Which apps require a transformation or rearchitecting.

  • Quais aplicativos precisam ser modernizado apenas parcialmente.Which apps need to be only partially modernized.

  • Quais aplicativos podem usar a “migração lift-and-shift” diretamente para a nuvem.Which apps you can "lift and shift" directly to the cloud.

Sobre este guiaAbout this guide

O foco principal deste guia é na modernização inicial de aplicativos existentes orientados para Web ou serviço do Microsoft .NET Framework, que consiste na ação de mover uma carga de trabalho para um ambiente mais recente ou mais moderno sem alterar significativamente o código e a arquitetura básica do aplicativo.This guide focuses primarily on initial modernization of existing Microsoft .NET Framework web or service-oriented applications, meaning the action of moving a workload to a newer or more modern environment without significantly altering the application's code and basic architecture.

Este guia também destaca os benefícios de mover seus aplicativos para a nuvem e modernizar parcialmente os aplicativos usando um conjunto específico de novas tecnologias e abordagens, como Contêineres do Windows e plataformas de computação relacionadas nos Contêineres do Windows que dão suporte ao Azure.This guide also highlights the benefits of moving your apps to the cloud and partially modernizing apps by using a specific set of new technologies and approaches, like Windows Containers and related compute-platforms in Azure supporting Windows Containers.

Caminho para a nuvem para aplicativos .NET existentesPath to the cloud for existing .NET applications

As organizações normalmente optam por mover para a nuvem devido à agilidade e à velocidade oferecida aos seus aplicativos.Organizations typically choose to move to the cloud for the agility and speed they can get for their applications. Você pode configurar milhares de servidores (VMs) na nuvem em questão de minutos, em comparação com as semanas de configuração de servidores locais normais.You can set up thousands of servers (VMs) in the cloud in minutes, compared to the weeks it typically takes to set up on-premises servers.

Não há uma estratégia única e padronizada para migrar aplicativos para a nuvem.There isn't a single, one-size-fits-all strategy for migrating applications to the cloud. A estratégia de migração certa para você depende das necessidades e prioridades da sua organização, bem como o tipo de aplicativos que você está migrando.The right migration strategy for you will depend on your organization's needs and priorities, and the kind of applications you are migrating. Nem todos os aplicativos valem o investimento de mudar para um modelo de PaaS (plataforma como serviço) ou de desenvolver um modelo de aplicativo nativo de nuvem.Not all applications warrant the investment of moving to a platform as a service (PaaS) model or developing a cloud-native application model. Em muitos casos, você pode adotar uma abordagem em fases ou incremental para investir na movimentação de seus ativos para a nuvem, dependendo das suas necessidades de negócios.In many cases, you can take a phased or incremental approach to invest in moving your assets to the cloud, based on your business needs.

Para aplicativos modernos com a melhor agilidade e valor a longo prazo para a organização, você pode se beneficiar de investir em arquiteturas de aplicativos nativos da nuvem.For modern applications with the best long-term agility and value for the organization, you might benefit from investing in cloud-native application architectures. No entanto, para aplicativos que são ativos existentes ou herdados, é essencial gastar o mínimo possível de tempo e dinheiro (sem recriação da arquitetura ou alterações de código) ao movê-los para a nuvem, para perceber benefícios significativos.However, for applications that are existing or legacy assets, the key is to spend minimal time and money (no rearchitecting or code changes) while moving them to the cloud, to realize significant benefits.

A Figura 1-1 mostra os caminhos possíveis que podem ser escolhidos ao mover os aplicativos .NET existente para a nuvem em fases incrementais.Figure 1-1 shows the possible paths you can take when you move existing .NET applications to the cloud in incremental phases.

 Caminhos de modernização para aplicativos e serviços .NET existentes

Figura 1-1.Figure 1-1. Caminhos de modernização para aplicativos e serviços .NET existentesModernization paths for existing .NET applications and services

Cada abordagem de migração traz diferentes vantagens e motivos para usá-la.Each migration approach has different benefits and reasons for using it. Você pode escolher uma abordagem única ao migrar aplicativos para a nuvem ou escolher certos componentes de várias abordagens.You can choose a single approach when you migrate apps to the cloud, or choose certain components from multiple approaches. Aplicativos individuais não estão limitados a uma única abordagem ou estado de maturidade.Individual applications aren't limited to a single approach or maturity state. Por exemplo, uma abordagem híbrida comum teria determinados componentes locais e outros componentes na nuvem.For instance, a common hybrid approach would have certain on-premises components plus other components in the cloud.

A definição e a breve explicação de cada nível de maturidade do aplicativo são as seguintes:The definition and short explanation for each application maturity level are the following:

Nível 1: aplicativos prontos para a infraestrutura de nuvem : nessa abordagem de migração, você simplesmente migra ou rehospeda seus aplicativos locais atuais para uma plataformaIaaS(infraestrutura como serviço).Level 1: Cloud Infrastructure-Ready applications: In this migration approach, you simply migrate or rehost your current on-premises applications to an infrastructure as a service (IaaS) platform. Os aplicativos têm quase a mesma composição de antes, mas agora você os implanta em VMs na nuvem.Your apps have almost the same composition as before, but now you deploy them to VMs in the cloud. Esse tipo simples de migração é normalmente conhecido no setor como "lift-and-shift".This simple type of migration is typically known in the industry as "Lift & Shift."

Nível 2: aplicativos otimizados na nuvem : nesse nível e ainda sem rearquitetar ou alterar código significativo, você pode obter benefícios adicionais da execução de seu aplicativo na nuvem com tecnologias modernas, como contêineres e adicionais serviços gerenciados na nuvem.Level 2: Cloud Optimized applications: At this level and still without rearchitecting or altering significant code, you can gain additional benefits from running your app in the cloud with modern technologies like containers and additional cloud-managed services. Melhore a agilidade dos seus aplicativos para distribuição mais rápida refinando seus processos de DevOps (operações de desenvolvimento) corporativas.You improve the agility of your applications to ship faster by refining your enterprise development operations (DevOps) processes. Faça isso usando tecnologias como Contêineres do Windows, que é baseada no Mecanismo do Docker.You achieve this by using technologies like Windows Containers, which is based on Docker Engine. Os contêineres removem o atrito causado pelas dependências de aplicativo ao implantar em vários estágios.Containers remove the friction that’s caused by application dependencies when you deploy in multiple stages. Nesse modelo de maturidade, você pode implantar contêineres ou IaaS ou PaaS ao usar serviços gerenciados por nuvem adicionais relacionados a bancos de dados, cache como serviço, monitoramento e pipelines de CI/CD (integração contínua/implantação contínua).In this maturity model, you can deploy containers on IaaS or PaaS while using additional cloud-managed services related to databases, cache as a service, monitoring, and continuous integration/continuous deployment (CI/CD) pipelines.

O terceiro nível de maturidade é a meta final na nuvem, mas é opcional para muitos aplicativos e não é o foco principal deste guia:The third level of maturity is the ultimate goal in the cloud, but it's optional for many apps and not the main focus of this guide:

Nível 3: aplicativos nativos de nuvem : essa abordagem de migração normalmente é orientada pela necessidade de negócios e tem como alvo a modernização de seus aplicativos críticos.Level 3: Cloud-Native applications: This migration approach typically is driven by business need and targets modernizing your mission-critical applications. Nesse nível, você pode usar os serviços de PaaS para mover seus aplicativos para plataformas de computação de PaaS.At this level, you use PaaS services to move your apps to PaaS computing platforms. Implemente aplicativos nativos da nuvem e arquitetura de microsserviços para desenvolver aplicativos com agilidade de longo prazo e dimensionar para novos limites.You implement cloud-native applications and microservices architecture to evolve applications with long-term agility, and to scale to new limits. Esse tipo de modernização normalmente requer arquitetura específica para a nuvem.This type of modernization usually requires architecting specifically for the cloud. Geralmente é necessário escrever novo código, especialmente ao mover aplicativos nativos de nuvem e modelos baseados em microsserviços.New code often must be written, especially when you move to cloud-native application and microservice-based models. Essa abordagem pode ajudar a obter os benefícios que são difíceis de obter no seu ambiente de aplicativo local e monolítico.This approach can help you gain benefits that are difficult to achieve in your monolithic and on-premises application environment.

A Tabela 1-1 descreve as principais vantagens e motivos para escolher cada abordagem de migração ou modernização.Table 1-1 describes the main benefits of and reasons for choosing each migration or modernization approach.

Pronto para infraestrutura de nuvemCloud Infrastructure-Ready
Lift-and-shiftLift and shift
Otimizado para a nuvemCloud-Optimized
ModernizarModernize
Nativo da nuvemCloud-Native
Modernizar, recriar a arquitetura e regenerarModernize, rearchitect and rewrite
Destino de computação do aplicativoApplication's compute target
Aplicativos implantados em VMs no AzureApplications deployed to VMs in Azure Aplicativos monolíticos ou de N camadas implantados no Serviço de Aplicativo do Azure, ACI (Instância de Contêiner do Azure), VMs com contêineres ou AKS (Serviço de Kubernetes do Azure)Monolithic or N-Tier apps deployed to Azure App Service, Azure Container Instance (ACI), VMs with containers, or AKS (Azure Kubernetes Service) Os microsserviços em contêineres no AKS (Serviço de Kubernetes do Azure) e/ou microsserviços sem servidor com base no Azure Functions.Containerized microservices on Azure Kubernetes Service (AKS) and/or serverless microservices based on Azure Functions.
Destino de dadosData target
SQL ou qualquer banco de dados relacional em uma VMSQL or any relational database on a VM Instância Gerenciada do Banco de Dados SQL do Azure ou outro banco de dados gerenciado na nuvem.Azure SQL Database Managed Instance or another managed database in the cloud. Bancos de dados refinados por microsserviço, com base no Banco de Dados SQL do Azure, Azure Cosmos DB ou outro banco de dados gerenciado na nuvemFined-grain databases per microservice, based on Azure SQL Database, Azure Cosmos DB, or another managed database in the cloud
VantagensAdvantages
  • Sem recriação da arquitetura, sem novo códigoNo rearchitecting, no new code
  • Mínimo de esforço para migração rápidaLeast effort for quick migration
  • Mínimo denominador comum com suporte no AzureLeast-common denominator supported in Azure
  • Garantias básicas de disponibilidadeBasic availability guarantees
  • Depois de mudar para a nuvem, é mais fácil modernizar ainda maisAfter moving to the cloud, it's easier to modernize even more
  • Sem recriação da arquiteturaNo rearchitecting
  • Alterações mínimas de código/configuraçãoMinimal code/config changes
  • Melhoria na implantação e agilidade de DevOps para liberação devido a contêineresImproved deployment and DevOps agility to release because of containers
  • Aumento da densidade e redução dos custos de implantaçãoIncreased density and lower deployment costs
  • Portabilidade de aplicativos e dependênciasPortability of apps and dependencies
  • Flexibilidade de destinos de host: abordagens de PaaS ou IaaSFlexibility of host targets: PaaS approaches or IaaS
  • Arquiteto da nuvem, você obtém os melhores benefícios da nuvem, mas é necessário um novo códigoArchitect for the cloud, you get the best benefits from the cloud but new code is needed
  • Abordagens de microsserviços nativos de nuvemMicroservices cloud-native approaches
  • Aplicativos críticos modernos, hiperescalonáveis e resilientes de nuvemModern mission-critical applications, cloud-resilient hyper-scalable
  • Serviços totalmente gerenciadosFully managed services
  • Otimizado para escalaOptimized for scale
  • Otimizado para agilidade autônoma por subsistemaOptimized for autonomous agility by subsystem
  • Baseado em implantação e DevOpsBuilt on deployment and DevOps
  • DesafiosChallenges
  • Menor valor de nuvem, diferente da mudança no custo de operação ou o fechamento de datacentersSmaller cloud value, other than shift in operating expense or closing datacenters
  • O pouco é gerenciado: sem aplicação de patch de so ou middleware; pode usar soluções de infraestrutura, como Terraform, Spinnaker ou PuppetLittle is managed: No OS or middleware patching; might use infrastructure solutions, like Terraform, Spinnaker, or Puppet
  • O desenvolvimento de contêineres é uma etapa adicional na curva de aprendizado para desenvolvedores e Operações de TIContainerizing is an additional step in the learning curve for developers and IT Operations
  • Os pipelines de CI/CD e DevOps geralmente são essenciais para essa abordagem.DevOps and CI/CD pipelines are usually ‘a must’ for this approach. Se não estiver presente no momento na cultura da organização, poderá ser um desafio adicionalIf not currently present in the culture of the organization, it might be an additional challenge
  • Requer a recriação da arquitetura para aplicativos nativos de nuvem e arquiteturas de microsserviço e geralmente requer refatoração ou regravação de código significativa durante a modernização (maiores tempo e orçamento)Requires rearchitecture for cloud native apps and microservice architectures and usually requires significant code refactoring or rewriting when modernizing (increased time and budget)
  • Tabela 1-1.Table 1-1. Benefícios e desafios de caminhos de modernização para serviços e aplicativos .NET existentesBenefits and challenges of modernization paths for existing .NET applications and services

    Principais tecnologias e arquiteturas por nível de maturidadeKey technologies and architectures by maturity level

    Aplicativos do .NET Framework inicialmente começavam com o .NET Framework versão 1.0, que foi lançado no final de 2001..NET Framework applications initially started with the .NET Framework version 1.0, which was released in late 2001. Assim, as empresas são movidas para versões mais recentes (como 2.0, 3.5 e .NET 4.x).Then, companies moved towards newer versions (such as 2.0, 3.5 and .NET 4.x). A maioria dos aplicativos era executada no Windows Server e no IIS (Servidor de Informações da Internet) e usava um banco de dados relacional, como o SQL Server, Oracle, MySQL ou qualquer outro RDBMS.Most of those applications ran on Windows Server and Internet Information Server (IIS), and used a relational database, like SQL Server, Oracle, MySQL, or any other RDBMS.

    A maioria dos aplicativos .NET existentes hoje em dia se baseia no .NET Framework 4.x ou até mesmo no .NET Framework 3.5 e usa estruturas da Web como o ASP.NET MVC, Web Forms do ASP.NET, ASP.NET Web API, WCF (Windows Communication Foundation), ASP.NET SignalR e Páginas da Web ASP.NET.Most existing .NET applications might nowadays be based on .NET Framework 4.x, or even on .NET Framework 3.5, and use web frameworks like ASP.NET MVC, ASP.NET Web Forms, ASP.NET Web API, Windows Communication Foundation (WCF), ASP.NET SignalR, and ASP.NET Web Pages. Esses tecnologias estabelecidas do .NET Framework dependem do Windows.These established .NET Framework technologies depend on Windows. É importante considerar essa dependência se você estiver migrando simplesmente migrando aplicativos herdados e deseja realizar o mínimo de alterações na sua infraestrutura de aplicativo.That dependency is important to consider if you are simply migrating legacy apps and you want to make minimal changes to your application infrastructure.

    A Figura 1-2 mostra as principais tecnologias e estilos de arquitetura usados em cada um dos três níveis de maturidade de nuvem:Figure 1-2 shows the primary technologies and architecture styles used at each of the three cloud maturity levels:

    Principais tecnologias para cada nível de maturidade para modernizar aplicativos Web .NET existentes

    Figura 1-2.Figure 1-2. Principais tecnologias para cada nível de maturidade para modernizar aplicativos Web .NET existentesPrimary technologies for each maturity level for modernizing existing .NET web applications

    A Figura 1-2 realça os cenários mais comuns, mas muitas variações híbridas e mistas são possíveis quando se trata de arquitetura.Figure 1-2 highlights the most common scenarios, but many hybrid and mixed variations are possible when it comes to architecture. Por exemplo, os modelos de maturidade se aplicam não apenas a arquiteturas monolíticas em aplicativos Web existentes, mas também a arquiteturas com orientação de serviço, de N camadas e outras variações de estilo de arquiteturas.For example, the maturity models apply not only to monolithic architectures in existing web apps, but also to service orientation, N-Tier, and other architecture style variations. O foco maior ou o percentual em um ou outro tipo de arquitetura e em tecnologias relacionadas determinam o nível de maturidade geral de seus aplicativos.The higher focus or percentage on one or another architecture type and related technologies determines the overall maturity level of your applications.

    Cada nível de maturidade no processo de modernização está associado às seguintes tecnologias e abordagens principais:Each maturity level in the modernization process is associated with the following key technologies and approaches:

    • Infraestrutura de nuvem-pronta (Rehost ou comparação básica & Shift): como uma primeira etapa, muitas organizações desejam apenas executar uma estratégia de migração de nuvem rapidamente.Cloud Infrastructure-Ready (rehost or basic lift & shift): As a first step, many organizations want only to quickly execute a cloud-migration strategy. Nesse caso, os aplicativos são hospedados novamente.In this case, applications are rehosted. A maioria da nova hospedagem pode ser automatizada usando as Migrações para Azure, um serviço que fornece as diretrizes, os insights e os mecanismos necessários para ajudar você a migrar para o Azure com base em ferramentas de nuvem como o Azure Site Recovery e o Serviço de Migração do Banco de Dados do Azure.Most rehosting can be automated by using Azure Migrate, a service that provides the guidance, insights, and mechanisms needed to assist you in migrating to Azure based on cloud tools like Azure Site Recovery and Azure Database Migration Service. Você também pode definir a nova hospedagem manualmente, para que seja possível conhecer os detalhes da infraestrutura sobre seus ativos ao mover aplicativos herdados para a nuvem.You can also set up rehosting manually, so that you can learn infrastructure details about your assets when you move legacy apps to the cloud. Por exemplo, você pode mover seus aplicativos para VMs no Azure com poucas modificações, provavelmente com apenas alterações simples de configuração.For example, you can move your applications to VMs in Azure with little modification-probably with only minor configuration changes. Nesse caso, a rede é semelhante a um ambiente local, especialmente se você criar redes virtuais no Azure.The networking in this case is similar to an on-premises environment, especially if you create virtual networks in Azure.

    • Otimizado para a nuvem (contêineres de serviços gerenciados e do Windows): esse modelo trata de fazer algumas otimizações de implantação importantes para obter alguns benefícios significativos da nuvem, sem alterar a arquitetura principal do aplicativo.Cloud-Optimized (Managed Services and Windows Containers): This model is about making a few important deployment optimizations to gain some significant benefits from the cloud, without changing the core architecture of the application. A etapa fundamental aqui é adicionar suporte a Contêineres do Windows aos seus aplicativos .NET Framework existentes.The fundamental step here is to add Windows Containers support to your existing .NET Framework applications. Essa importante etapa (transporte em contêineres) não requer alteração no código, portanto, o esforço de lift-and-shift geral é baixo.This important step (containerization) doesn't require touching the code, so the overall lift and shift effort is light. Você pode usar ferramentas como Image2Docker ou o Visual Studio, com as suas ferramentas para Docker.You can use tools like Image2Docker or Visual Studio, with its tools for Docker. O Visual Studio escolhe automaticamente padrões inteligentes para aplicativos ASP.NET e imagens de Contêineres do Windows.Visual Studio automatically chooses smart defaults for ASP.NET applications and Windows Containers images. Essas ferramentas oferecem um loop interno ágil e um caminho rápido para levar os contêineres para o Azure.These tools offer both a rapid inner loop, and a fast path to get the containers to Azure. A agilidade é melhorada ao implantar em vários ambientes.Your agility is improved when you deploy to multiple environments. Em seguida, passando para a produção, você poderá implantar seus Contêineres do Windows no Aplicativo Web para Contêineres do Azure, no ACI (Instâncias de Contêiner do Azure) e em VMs do Azure com o Windows Server 2016 e contêineres, se preferir uma abordagem IaaS.Then, moving to production, you can deploy your Windows Containers to Azure Web App for Containers, Azure Container Instances (ACI), and Azure VMs with Windows Server 2016 and containers if you prefer an IaaS approach. Para aplicativos de vários contêineres mais complexos, considere usar orquestradores como ACS/AKS (Serviço de Kubernetes do Azure).For more complex multi-container applications, consider using orchestrators like Azure Kubernetes Service (AKS/ACS).

    Durante essa modernização inicial, também é possível adicionar ativos da nuvem, como monitoramento com ferramentas como o Azure Application Insights; pipelines de CI/CD para os ciclos de vida de aplicativos com o Azure DevOps Services e muitos outros serviços de recurso de dados que estão disponíveis no Azure.During this initial modernization, you can also add assets from the cloud, such as monitoring with tools like Azure Application Insights; CI/CD pipelines for your app lifecycles with Azure DevOps Services; and many more data resource services that are available in Azure. Por exemplo, é possível modificar um aplicativo Web monolítico que foi originalmente desenvolvido usando Web Forms do ASP.NET ou ASP.NET MVC tradicionais, mas agora ele é implantado usando os Contêineres do Windows.For instance, you can modify a monolithic web app that was originally developed by using traditional ASP.NET Web Forms or ASP.NET MVC, but now you deploy it by using Windows Containers. Se você usar Contêineres do Windows, também deverá migrar os dados para um banco de dados em uma Instância Gerenciada do Banco de Dados SQL do Azure, tudo sem alterar a arquitetura principal do seu aplicativo.When you use Windows Containers, you should also migrate your data to a database in Azure SQL Database Managed Instance, all without changing the core architecture of your application.

    • Nativo de nuvem: como introduzido, você deve pensar na arquitetura de aplicativos nativos de nuvem quando estiver visando aplicativos grandes e complexos com várias equipes de desenvolvimento independentes trabalhando em diferentes microservices que podem ser desenvolvido e implantado de forma autônoma.Cloud-Native: As introduced, you should think about architecting cloud-native applications when you are targeting large and complex applications with multiple independent development teams working on different microservices that can be developed and deployed autonomously. Além disso, devido à escalabilidade granular e independente por microsserviço.Also, due to granularized and independent scalability per microservice. Essas abordagens de arquitetura enfrentam desafios e complexidades muito importantes, mas podem ser bastante simplificadas com o uso de orquestradores e PaaS de nuvem como o ACS/AKS (Serviço de Kubernetes do Azure) (Kubernetes gerenciado) e o Azure Functions para uma abordagem sem servidor.These architectural approaches face very important challenges and complexities but can be greatly simplified by using cloud PaaS and orchestrators like Azure Kubernetes Service (AKS/ACS) (managed Kubernetes), and Azure Functions for a serverless approach. Todas essas abordagens (como microsserviços e sem servidor) geralmente requerem que você crie para a nuvem e escreva um novo código, adaptado a plataformas específicas do PaaS ou alinhado a arquiteturas específicas, como microsserviços.All these approaches (like microservices and Serverless) typically require you to architect for the cloud and write new code—code that is adapted to specific PaaS platforms, or code that aligns with specific architectures, like microservices.

    A Figura 1-3 mostra as tecnologias internas que você pode usar para cada nível de maturidade:Figure 1-3 shows the internal technologies that you can use for each maturity level:

    Tecnologias internas para cada nível de maturidade de modernização

    Figura 1-3.Figure 1-3. Tecnologias internas para cada nível de maturidade de modernizaçãoInternal technologies for each modernization maturity level

    Cenário de lift-and-shiftLift and shift scenario

    Para usar migrações lift-and-shift, lembre-se que é possível usar muitas variações diferentes de migração lift-and-shift nos seus cenários de aplicativo.For lift and shift migrations, keep in mind that you can use many different variations of lift and shift in your application scenarios. Se você é apenas o novo host do seu aplicativo, você pode ter um cenário semelhante ao mostrado na Figura 1-4, em que as VMs na nuvem são usadas apenas para seu aplicativo e para o servidor de banco de dados.If you only rehost your application, you might have a scenario like the one shown in Figure 1-4, where you use VMs in the cloud only for your application and for your database server.

    Exemplo de um cenário de IaaS puro na nuvem

    Figura 1-4.Figure 1-4. Exemplo de um cenário de IaaS puro na nuvemExample of a pure IaaS scenario in the cloud

    Cenários de modernizaçãoModernization scenarios

    Para cenários de modernização, você pode ter um aplicativo otimizado para a nuvem puro que usa elementos apenas desse nível de maturidade.For modernization scenarios, you might have a pure Cloud-Optimized application that uses elements only from that maturity level. Ou talvez você tenha um aplicativo de estado intermediário com alguns elementos Prontos para Infraestrutura de Nuvem e outros elementos Otimizados para a Nuvem (uma modelo misto de “escolha”), como na Figura 1-5.Or, you might have an intermediate-state application with some elements from Cloud Infrastructure-Ready and other elements from Cloud-Optimized (a "pick and choose" or mixed model), like in Figure 1-5.

    Cenário de exemplo de "Escolha", com o banco de dados no IaaS, DevOps e ativos em contêineres

    Figura 1-5.Figure 1-5. Cenário de exemplo de "Escolha", com o banco de dados no IaaS, DevOps e ativos em contêineresExample "pick and choose" scenario, with database on IaaS, DevOps, and containerization assets

    Em seguida, como o cenário ideal para migração de muitos aplicativos .NET Framework existentes, você poderia migrar para um aplicativo Otimizado para a Nuvem para obter vantagens significativas com pouco trabalho.Next, as the ideal scenario for many existing .NET Framework applications to migrate, you could migrate to a Cloud-Optimized application, to get significant benefits from little work. Essa abordagem também prepara você para o modelo Nativo da Nuvem como uma possível evolução futura.This approach also sets you up for Cloud-Native as a possible future evolution. A Figura 1-6 mostra um exemplo.Figure 1-6 shows an example.

    Cenário de exemplo de aplicativos Otimizados para Nuvem, com Contêineres do Windows e serviços gerenciados

    Figura 1-6.Figure 1-6. Cenário de exemplo de aplicativos Otimizados para Nuvem, com Contêineres do Windows e serviços gerenciadosExample Cloud-Optimized apps scenario, with Windows Containers and managed services

    Indo ainda mais além, você poderia estender o seu aplicativo Otimizado para a Nuvem existente adicionando alguns microsserviços para cenários específicos.Going even further, you could extend your existing Cloud-Optimized application by adding a few microservices for specific scenarios. Isso moveria você parcialmente para o nível do modelo Nativo da Nuvem, que não é o foco principal destas diretrizes.This would move you partially to the level of Cloud-Native model, which is not the main focus of the present guidance.

    O que este guia não cobreWhat this guide does not cover

    Este guia abrange um subconjunto específico de cenários de exemplo, conforme mostrado na Figura 1-7.This guide covers a specific subset of the example scenarios, as shown in Figure 1-7. Este guia se concentra apenas em cenários de lift-and-shift e, por fim, no modelo Otimizado para a Nuvem.This guide focuses only on lift and shift scenarios, and ultimately, on the Cloud-Optimized model. No modelo Otimizado para a Nuvem, um aplicativo .NET Framework é modernizado usando os Contêineres do Windows, além de componentes adicionais como o monitoramento e pipelines de CI/CD.In the Cloud-Optimized model, a .NET Framework application is modernized by using Windows Containers, plus additional components like monitoring and CI/CD pipelines. Cada componente é fundamental para implantar aplicativos na nuvem de maneira mais rápida e ágil.Each component is fundamental to deploying applications to the cloud, faster, and with agility.

    O modelo Nativo da Nuvem não é abordado neste guia

    Figura 1-7.Figure 1-7. O modelo Nativo da Nuvem não é abordado neste guiaCloud-Native is not covered in this guide

    O foco deste guia é específico.The focus of this guide is specific. Ele mostra o caminho que você pode tomar para realizar uma migração lift-and-shift dos seus aplicativos .NET existentes, sem precisar recriar a arquitetura e sem alterar o código.It shows you the path you can take to achieve a lift and shift of your existing .NET applications, without rearchitecting, and with no code changes. Por fim, ele mostra como tornar seu aplicativo Otimizado para a Nuvem.Ultimately, it shows you how to make your application Cloud-Optimized.

    Este guia não mostra como criar aplicativos Nativos para a Nuvem, por exemplo, como evoluir para uma arquitetura de microsserviços.This guide doesn't show you how to create Cloud-Native applications, such as how to evolve to a microservices architecture. Para rearquitetar seus aplicativos ou criar aplicativos novos que se baseiam em microserviços, consulte os microserviços .net do livro eletrônico: arquitetura para aplicativos .net em contêineres.To rearchitect your applications or to create brand-new applications that are based on microservices, see the e-book .NET Microservices: Architecture for containerized .NET applications.

    Recursos adicionaisAdditional resources

    • Ciclo de vida do aplicativo do Docker em contêineres com a plataforma e as ferramentas da Microsoft (livro eletrônico para download) Containerized Docker application lifecycle with Microsoft platform and tools (downloadable e-book)
      https://aka.ms/dockerlifecycleebook

    • Microserviços .net: arquitetura para aplicativos .net em contêineres (livro eletrônico baixável) .NET Microservices: Architecture for containerized .NET applications (downloadable e-book)
      https://aka.ms/microservicesebook

    • Arquitetura de aplicativos Web modernos com o ASP.NET Core e o Azure (livro eletrônico para download) Architecting modern web applications with ASP.NET Core and Azure (downloadable e-book)
      https://aka.ms/webappebook

    Quem deve usar este guiaWho should use this guide

    Este guia foi escrito para desenvolvedores e arquitetos de solução que desejam modernizar aplicativos Web ASP.NET existentes ou serviços WCF baseados no .NET Framework, para aumentar a agilidade na distribuição e liberação de aplicativos.This guide was written for developers and solution architects who want to modernize existing ASP.NET web applications or WCF services that are based on the .NET Framework, for improved agility in shipping and releasing applications.

    Você também pode achar este guia útil se for um tomador de decisões técnicas, como um arquiteto corporativo ou um líder de desenvolvimento/diretor que deseja ter apenas uma visão geral dos benefícios que podem ser alcançados usando Contêineres do Windows e implantando na nuvem ao usar o Microsoft Azure.You also might find this guide useful if you are a technical decision maker, such as an enterprise architect or a development lead/director who just wants an overview of the benefits that you can get by using Windows Containers, and by deploying to the cloud when using Microsoft Azure.

    Como usar este guiaHow to use this guide

    Este guia aborda “o porquê”, isto é, por que modernizar seus aplicativos existentes e os benefícios específicos obtidos ao usar os Contêineres do Windows ao mover seus aplicativos para a nuvem.This guide addresses the "why"-why you might want to modernize your existing applications, and the specific benefits you get from using Windows Containers when you move your apps to the cloud. O conteúdo dos primeiros capítulos do guia destina-se a arquitetos e tomadores de decisões técnicas que desejam obter uma visão geral, mas que não precisam se concentrar nos detalhes técnicos passo a passo nem na implementação.The content in the first few chapters of the guide is designed for architects and technical decision makers who want an overview, but who don't need to focus on implementation and technical, step-by-step details.

    O último capítulo deste guia apresenta vários tutoriais passo a passo que se concentram em cenários de implantação específicos.The last chapter of this guide introduces multiple walkthroughs that focus on specific deployment scenarios. Este guia oferece versões mais breves dos tutoriais passo a passo para resumir os cenários e realçar seus benefícios.This guide offers shorter versions of the walkthroughs, to summarize the scenarios and highlight their benefits. Os tutoriais passo a passo completos detalham a configuração e a implementação e são publicados como um conjunto de postagens de wiki no mesmo repositório do GitHub público em que residem os aplicativos de exemplo relacionados (discutido na próxima seção).The full walkthroughs drill down into setup and implementation details, and are published as a set of wiki posts in the same public GitHub repo where related sample apps reside (discussed in the next section). O último capítulo e os tutoriais da wiki passo a passo no GitHub serão mais interessantes para desenvolvedores e arquitetos que desejam se concentrar nos detalhes de implementação.The last chapter and the step-by-step wiki walkthroughs on GitHub will be of more interest to developers and architects who want to focus on implementation details.

    Aplicativos de exemplo para modernização de aplicativos herdados: eShopModernizingSample apps for modernizing legacy apps: eShopModernizing

    O repositório eShopModernizing no GitHub oferece dois aplicativos de exemplo que simulam aplicativos Web monolíticos herdados.The eShopModernizing repo on GitHub offers two sample applications that simulate legacy monolithic web applications. Um aplicativo Web é desenvolvido usando o ASP.NET MVC; o segundo aplicativo Web é desenvolvido usando o ASP.NET Web Forms e o terceiro aplicativo é um aplicativo de N camadas com um aplicativo da área de trabalho cliente do WinForms que consome um back-end do serviço WCF.One web app is developed by using ASP.NET MVC; the second web app is developed by using ASP.NET Web Forms and the third app is an N-Tier app with a WinForms client desktop app consuming a WCF service backend. Todos esses aplicativos são baseados no .NET Framework tradicional.All these apps are based on the traditional .NET Framework. Esses aplicativos de exemplo não usam o .NET Core ou o ASP.NET Core, pois eles se destinam a aplicativos do .NET Framework existentes/herdados que serão modernizados.These sample apps don't use .NET Core or ASP.NET Core as they are supposed to be existing/legacy .NET Framework applications to be modernized.

    Esses aplicativos de exemplo têm uma segunda versão, com o código modernizado, e são bastante simples.These sample apps have a second version, with modernized code, and which are fairly straightforward. A diferença mais importante entre as versões do aplicativo é que as segundas versões usam Contêineres do Windows como a opção de implantação.The most important difference between the app versions is that the second versions use Windows Containers as the deployment choice. Também há algumas adições para as segundas versões, como Blobs de Armazenamento do Microsoft Azure para gerenciar imagens, Azure Active Directory para gerenciar a segurança e o Azure Application Insights para monitorar e auditar os aplicativos.There also are a few additions to the second versions, like Azure Storage Blobs for managing images, Azure Active Directory for managing security, and Azure Application Insights for monitoring and auditing the applications.

    Envie seus comentáriosSend your feedback

    Este guia foi escrito para ajudar você a entender suas opções para melhorar e modernizar aplicativos Web .NET existentes.This guide was written to help you understand your options for improving and modernizing existing .NET web applications. O guia e os aplicativos de exemplo relacionados estão em evolução.The guide and related sample applications are evolving. Seus comentários são bem-vindos!Your feedback is welcome! Se você tiver comentários sobre como este guia poderia ser mais útil, envie-os para dotnet-architecture-ebooks-feedback@service.microsoft.com.If you have comments about how this guide might be more helpful, please send them to dotnet-architecture-ebooks-feedback@service.microsoft.com.