Modernización de las aplicaciones .NET existentes con la nube de Azure y los contenedores de Windows (segunda edición)Modernize existing .NET applications with Azure cloud and Windows Containers (2nd edition)

Imagen de portada de la guía Modernización de las aplicaciones .NET

PUBLICADO PORPUBLISHED BY
Microsoft Press y Microsoft DevDivMicrosoft Press and Microsoft DevDiv
Divisiones de Microsoft CorporationDivisions of Microsoft Corporation
One Microsoft WayOne Microsoft Way
Redmond, Washington 98052-6399Redmond, Washington 98052-6399

Copyright © 2018 de Microsoft CorporationCopyright © 2018 by Microsoft Corporation

Todos los derechos reservados.All rights reserved. No se puede reproducir de ninguna forma ni por ningún medio ninguna parte del contenido de este libro sin la autorización por escrito del publicador.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 libro está disponible de forma gratuita en formato de libro electrónico (e-book) a través de varios canales de 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.

Si tiene preguntas relacionadas con este libro, envíe un correo electrónico a dotnet-architecture-ebooks-feedback@service.microsoft.com.If you have questions related to this book, email at dotnet-architecture-ebooks-feedback@service.microsoft.com

Este libro se proporciona “tal cual” y expresa las opiniones del autor.This book is provided "as-is" and expresses the author's views and opinions. Las opiniones y la información expresados en este libro, incluidas las direcciones URL y otras referencias a sitios web de Internet, pueden cambiar sin previo aviso.The views, opinions, and information expressed in this book, including URL and other Internet website references, may change without notice.

Algunos ejemplos descritos aquí se proporcionan únicamente con fines ilustrativos y son ficticios.Some examples depicted herein are provided for illustration only and are fictitious. No debe deducirse ninguna asociación ni conexión reales.No real association or connection is intended or should be inferred.

Microsoft y las marcas comerciales indicadas en https://www.microsoft.com en la página web "Marcas comerciales" pertenecen al grupo de empresas de Microsoft.Microsoft and the trademarks listed at https://www.microsoft.com on the "Trademarks" webpage are trademarks of the Microsoft group of companies. El resto de marcas pertenecen a sus respectivos propietarios.All other marks are property of their respective owners.

Autor:Author:

Cesar de la Torre, administrador de programas sénior del equipo de producto de .NET, Microsoft Corp.Cesar de la Torre, Sr. PM, .NET Product Team, Microsoft Corp.

Participantes y revisores:Participants and reviewers:

Scott Hunter, director asociado de administración de programas del equipo de .NET, MicrosoftScott Hunter, Partner Director PM, .NET team, Microsoft
Paul Yuknewicz, director principal de administración de programas del equipo de Visual Studio Tools, MicrosoftPaul Yuknewicz, Principal PM Manager, Visual Studio Tools team, Microsoft
Lisa Guthrie, administradora de programas del equipo de Visual Studio Tools, MicrosoftLisa Guthrie, Sr. PM, Visual Studio Tools team, Microsoft
Ankit Asthana, director principal de administración de programas del equipo de .NET, MicrosoftAnkit Asthana, Principal PM Manager, .NET team, Microsoft
Unai Zorrilla, responsable de desarrollo de Plain ConceptsUnai Zorrilla, Developer Lead, Plain Concepts
Javier Valero, director de operaciones de Grupo SolutioJavier Valero, Chief Operating Officer at Grupo Solutio

IntroducciónIntroduction

Si decide modernizar las aplicaciones web o los servicios, y moverlos a la nube, no tiene necesariamente que rediseñar por completo las aplicaciones.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. Rediseñar una aplicación con un enfoque avanzado como los microservicios no siempre es posible por las restricciones de costos y tiempo.Rearchitecting an application by using an advanced approach like microservices isn't always an option because of cost and time restraints. Según el tipo de aplicación, rediseñar una aplicación podría no ser necesario.Depending on the type of application, rearchitecting an app also might not be necessary. Para optimizar la rentabilidad de la estrategia de migración a la nube de su organización, es importante tener en cuenta las necesidades de su negocio y los requisitos de las aplicaciones.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. Debe determinar:You'll need to determine:

  • Qué aplicaciones requieren una transformación o un cambio de diseño.Which apps require a transformation or rearchitecting.

  • Qué aplicaciones necesitan modernizarse solo parcialmente.Which apps need to be only partially modernized.

  • Qué aplicaciones se pueden "elevar y desplazar" directamente a la nube.Which apps you can "lift and shift" directly to the cloud.

Acerca de esta guíaAbout this guide

Esta guía se centra principalmente en la modernización inicial de las aplicaciones orientadas a servicios o aplicaciones web de Microsoft .NET Framework, es decir, se centra en la acción de mover una carga de trabajo a un entorno más moderno y nuevo sin alterar significativamente la arquitectura básica ni el código de la aplicación.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.

En esta guía también se destacan las ventajas derivadas de mover las aplicaciones a la nube y modernizarlas parcialmente con el uso de un conjunto específico de nuevas tecnologías y enfoques, como los contenedores de Windows y las plataformas de procesos en Azure que admiten los contenedores de Windows.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.

Ruta de acceso a la nube para aplicaciones .NET existentesPath to the cloud for existing .NET applications

Las organizaciones suelen elegir la migración a la nube por la agilidad y velocidad que pueden obtener para sus aplicaciones.Organizations typically choose to move to the cloud for the agility and speed they can get for their applications. Puede configurar miles de servidores (VM) en la nube en cuestión de minutos, en comparación con las semanas que suele llevar la configuración de los servidores locales.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.

No hay una estrategia única y general para migrar las aplicaciones a la nube.There isn't a single, one-size-fits-all strategy for migrating applications to the cloud. La estrategia de migración adecuada para su caso dependerá de las necesidades y prioridades de la organización y del tipo de aplicaciones que se vayan a migrar.The right migration strategy for you will depend on your organization's needs and priorities, and the kind of applications you are migrating. No todas las aplicaciones garantizan la inversión que conlleva la migración a un modelo de plataforma como servicio (PaaS) o el desarrollo de un modelo de aplicación nativa de la nube.Not all applications warrant the investment of moving to a platform as a service (PaaS) model or developing a cloud-native application model. En muchos casos, puede adoptar un enfoque por fases o incremental para invertir en la migración de los recursos a la nube, en función de las necesidades de su negocio.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 aplicaciones modernas con la mejor agilidad y el mejor valor a largo plazo para la organización, puede beneficiarse de la inversión en arquitecturas de aplicaciones nativas de la nube.For modern applications with the best long-term agility and value for the organization, you might benefit from investing in cloud-native application architectures. Sin embargo, para las aplicaciones que son recursos existentes o heredados, la clave está en emplear el mínimo tiempo y dinero (sin tener que rediseñar ni cambiar el código) para migrarlas a la nube, a fin de obtener importantes ventajas.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.

En la figura 1-1 se muestran las posibles rutas de acceso que puede usar para migrar las aplicaciones .NET existentes a la nube en fases incrementales.Figure 1-1 shows the possible paths you can take when you move existing .NET applications to the cloud in incremental phases.

 Rutas de acceso de modernización de servicios y aplicaciones .NET existentes

Figura 1-1.Figure 1-1. Rutas de acceso de modernización de servicios y aplicaciones .NET existentesModernization paths for existing .NET applications and services

Cada método de migración tiene distintas ventajas y motivos para su uso.Each migration approach has different benefits and reasons for using it. Puede elegir un único enfoque para migrar las aplicaciones a la nube o seleccionar determinados componentes de varios enfoques.You can choose a single approach when you migrate apps to the cloud, or choose certain components from multiple approaches. Las aplicaciones individuales no están limitadas a un único enfoque o a un solo estado de madurez.Individual applications aren't limited to a single approach or maturity state. Por ejemplo, un enfoque híbrido común tendría ciertos componentes locales y otros componentes en la nube.For instance, a common hybrid approach would have certain on-premises components plus other components in the cloud.

A continuación se definen y explican brevemente los distintos niveles de madurez de una aplicación:The definition and short explanation for each application maturity level are the following:

Nivel 1: aplicaciones de infraestructura lista para la nube: en este enfoque de migración, solo tiene que migrar o volver a hospedar las aplicaciones locales actuales a una plataforma de infraestructura como servicio (IaaS).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. Las aplicaciones tienen casi la misma composición que antes, pero ahora se implementan en máquinas virtuales en la nube.Your apps have almost the same composition as before, but now you deploy them to VMs in the cloud. Este sencillo tipo de migración se suele conocer en el sector como "elevar y desplazar".This simple type of migration is typically known in the industry as "Lift & Shift."

Nivel 2: aplicaciones optimizadas para la nube: En este nivel y sin tener que rediseñar o modificar código significativo, puede obtener ventajas adicionales de la ejecución de la aplicación en la nube con tecnologías modernas como contenedores y otros servicios administrados en la nube.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. Se mejora la agilidad de las aplicaciones para distribuirlas con más rapidez al perfeccionar los procesos de las operaciones de desarrollo empresariales (DevOps).You improve the agility of your applications to ship faster by refining your enterprise development operations (DevOps) processes. Esto se consigue mediante el uso de tecnologías como los contenedores de Windows, que se basan en el motor de Docker.You achieve this by using technologies like Windows Containers, which is based on Docker Engine. Los contenedores eliminan la fricción causada por las dependencias de la aplicación al implementarla en varias fases.Containers remove the friction that’s caused by application dependencies when you deploy in multiple stages. En este modelo de madurez, puede implementar contenedores en IaaS o PaaS, a la vez que usa otros servicios administrados en la nube relacionados con las bases de datos, la memoria caché como servicio, la supervisión y las canalizaciones de integración continua e implementación continua (CI/CD).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.

El tercer nivel de madurez es el objetivo final de la nube, pero es opcional para muchas aplicaciones y no el enfoque principal de esta guía: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:

Nivel 3: aplicaciones nativas para la nube: este enfoque de migración suele basarse en las necesidades y los objetivos empresariales de modernización de las aplicaciones críticas.Level 3: Cloud-Native applications: This migration approach typically is driven by business need and targets modernizing your mission-critical applications. En este nivel, debe usar los servicios PaaS para migrar las aplicaciones a plataformas informáticas PaaS.At this level, you use PaaS services to move your apps to PaaS computing platforms. Debe implementar la arquitectura de microservicios y aplicaciones nativas de la nube para desarrollar aplicaciones con una agilidad a largo plazo y para escalar a nuevos límites.You implement cloud-native applications and microservices architecture to evolve applications with long-term agility, and to scale to new limits. Este tipo de modernización suele requerir un diseño específico para la nube.This type of modernization usually requires architecting specifically for the cloud. A menudo puede ser necesario escribir código nuevo, sobre todo, al migrar a modelos basados en microservicios y en aplicaciones nativas de la nube.New code often must be written, especially when you move to cloud-native application and microservice-based models. Este enfoque puede ayudar a obtener ventajas que son difíciles de conseguir en un entorno de aplicaciones locales y monolíticas.This approach can help you gain benefits that are difficult to achieve in your monolithic and on-premises application environment.

En la tabla 1-1 se describen las principales ventajas y motivos para elegir cada enfoque de migración o modernización.Table 1-1 describes the main benefits of and reasons for choosing each migration or modernization approach.

Infraestructura preparada para la nubeCloud Infrastructure-Ready
Elevación y desplazamientoLift and shift
Optimizado para la nubeCloud-Optimized
ModernizaciónModernize
Nativo en la nubeCloud-Native
Modernización, rediseño y reescrituraModernize, rearchitect and rewrite
Destino de cálculo de la aplicaciónApplication's compute target
Aplicaciones implementadas en las máquinas virtuales de AzureApplications deployed to VMs in Azure Aplicaciones monolíticas o de n niveles implementadas en Azure App Service, Azure Container Instances (ACI), máquinas virtuales con contenedores o AKS (Azure Kubernetes Service)Monolithic or N-Tier apps deployed to Azure App Service, Azure Container Instance (ACI), VMs with containers, or AKS (Azure Kubernetes Service) Microservicios en contenedores de Azure Kubernetes Service (AKS) o microservicios sin servidor basados en Azure Functions.Containerized microservices on Azure Kubernetes Service (AKS) and/or serverless microservices based on Azure Functions.
Destino de datosData target
SQL o cualquier base de datos relacional en una máquina virtualSQL or any relational database on a VM Instancia administrada de Azure SQL Database u otra base de datos administrada en la nube.Azure SQL Database Managed Instance or another managed database in the cloud. Bases de datos específicas por microservicio basadas en Azure SQL Database, Azure Cosmos DB u otra base de datos administrada en la nubeFined-grain databases per microservice, based on Azure SQL Database, Azure Cosmos DB, or another managed database in the cloud
VentajasAdvantages
  • Sin rediseños ni código nuevoNo rearchitecting, no new code
  • Mínimo esfuerzo para una migración rápidaLeast effort for quick migration
  • Mínimo común denominador compatible con AzureLeast-common denominator supported in Azure
  • Garantías de disponibilidad básicasBasic availability guarantees
  • Después de la migración a la nube, todavía es más fácil modernizarAfter moving to the cloud, it's easier to modernize even more
  • Sin rediseñosNo rearchitecting
  • Cambios mínimos en el código o la configuraciónMinimal code/config changes
  • Desarrollo y agilidad de DevOps mejorados para publicar debido a los contenedoresImproved deployment and DevOps agility to release because of containers
  • Mayor densidad y costos de implementación más bajosIncreased density and lower deployment costs
  • Portabilidad de aplicaciones y dependenciasPortability of apps and dependencies
  • Flexibilidad de destinos de host: Enfoques de PaaS o IaaSFlexibility of host targets: PaaS approaches or IaaS
  • Arquitecto de la nube, obtiene los mejores beneficios de la nube, pero se necesita nuevo código.Architect for the cloud, you get the best benefits from the cloud but new code is needed
  • Enfoques nativos de la nube de los microserviciosMicroservices cloud-native approaches
  • Aplicaciones críticas modernas, muy escalables y resistentes en la nubeModern mission-critical applications, cloud-resilient hyper-scalable
  • Servicios totalmente administradosFully managed services
  • Optimizado para escaladoOptimized for scale
  • Optimizado para la agilidad autónoma por subsistemaOptimized for autonomous agility by subsystem
  • Basado en implementaciones y DevOpsBuilt on deployment and DevOps
  • DesafíosChallenges
  • Valor menor de la nube, aparte del cambio en gastos operativos o en el cierre de los centros de datosSmaller cloud value, other than shift in operating expense or closing datacenters
  • Muy poca administración: sin aplicación de revisiones del SO o del software intermedio, con posibles soluciones de infraestructura, como Terraform, Spinnaker o PuppetLittle is managed: No OS or middleware patching; might use infrastructure solutions, like Terraform, Spinnaker, or Puppet
  • La inclusión en contenedores es un paso adicional de la curva de aprendizaje para los desarrolladores y las operaciones de TIContainerizing is an additional step in the learning curve for developers and IT Operations
  • Las canalizaciones de DevOps y CI/CD suelen ser imprescindibles en este enfoque.DevOps and CI/CD pipelines are usually ‘a must’ for this approach. Si no están presentes actualmente en la cultura de la organización, podría ser un desafío adicionalIf not currently present in the culture of the organization, it might be an additional challenge
  • Es necesario volver a diseñar para las aplicaciones nativas en la nube y las arquitecturas de microservicios. Además, normalmente se requiere la reescritura o refactorización de código importante durante la modernización (mayor tiempo y presupuesto)Requires rearchitecture for cloud native apps and microservice architectures and usually requires significant code refactoring or rewriting when modernizing (increased time and budget)
  • Tabla 1-1.Table 1-1. Ventajas y desafíos de la modernización de rutas de los servicios y las aplicaciones .NET existentesBenefits and challenges of modernization paths for existing .NET applications and services

    Arquitecturas y tecnologías clave por nivel de madurezKey technologies and architectures by maturity level

    Las aplicaciones .NET Framework se iniciaron por primera vez con .NET Framework 1.0, que se publicó a finales de 2001..NET Framework applications initially started with the .NET Framework version 1.0, which was released in late 2001. Después, las empresas cambian a nuevas versiones (como 2.0, 3.5 y .NET 4.x).Then, companies moved towards newer versions (such as 2.0, 3.5 and .NET 4.x). La mayoría de esas aplicaciones se ejecutaron en Windows Server y Internet Information Server (IIS) y usaron una base de datos relacional, como SQL Server, Oracle, MySQL o cualquier otra instancia de 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.

    La mayoría de las aplicaciones .NET existentes pueden basarse actualmente en .NET Framework 4.x o incluso en .NET Framework 3.5 y usar marcos de trabajo web, como ASP.NET MVC, Formularios web ASP.NET, ASP.NET Web API, Windows Communication Foundation (WCF), ASP.NET SignalR y ASP.NET Web Pages.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. Estas tecnologías de .NET Framework establecidas dependen de Windows.These established .NET Framework technologies depend on Windows. Es importante tener en cuenta esa dependencia si solo se van a migrar aplicaciones heredadas y solo se desea realizar cambios mínimos en la infraestructura de las aplicaciones.That dependency is important to consider if you are simply migrating legacy apps and you want to make minimal changes to your application infrastructure.

    En la figura 1-2 se muestran los estilos de arquitectura y las tecnologías principales utilizados en cada uno de los tres niveles de madurez de la nube:Figure 1-2 shows the primary technologies and architecture styles used at each of the three cloud maturity levels:

    Tecnologías principales de cada nivel de madurez para modernizar las aplicaciones web .NET existentes

    Figura 1-2.Figure 1-2. Tecnologías principales de cada nivel de madurez para modernizar las aplicaciones web .NET existentesPrimary technologies for each maturity level for modernizing existing .NET web applications

    En la figura 1-2 se destacan los escenarios más comunes, pero se pueden presentar muchas variaciones híbridas y mixtas en relación con la arquitectura.Figure 1-2 highlights the most common scenarios, but many hybrid and mixed variations are possible when it comes to architecture. Por ejemplo, los modelos de madurez no solo se aplican a arquitecturas monolíticas de las aplicaciones web existentes, sino también a la orientación del servicio, a variaciones de n niveles y a otras variaciones de estilo de la arquitectura.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. El foco o porcentaje más alto en uno u otro tipo de arquitectura y las tecnologías relacionadas determina el nivel de madurez general de las aplicaciones.The higher focus or percentage on one or another architecture type and related technologies determines the overall maturity level of your applications.

    Cada nivel de madurez del proceso de modernización está asociado con los siguientes enfoques y tecnologías clave:Each maturity level in the modernization process is associated with the following key technologies and approaches:

    • Infraestructura lista para la nube (rehospedaje o elevación y desplazamiento básicos): como primer paso, muchas organizaciones solo desean ejecutar una estrategia de migración a la nube con rapidez.Cloud Infrastructure-Ready (rehost or basic lift & shift): As a first step, many organizations want only to quickly execute a cloud-migration strategy. En este caso, lo que se hace es rehospedar las aplicaciones.In this case, applications are rehosted. La mayoría del rehospedaje puede automatizarse mediante Azure Migrate, un servicio que ofrece la orientación, la información y los mecanismos necesarios para facilitar la migración a Azure basada en herramientas de la nube, como Azure Site Recovery y Azure Database Migration Service.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. También puede configurar el rehospedaje manualmente, para poder aprender los detalles de los recursos de la infraestructura al mover las aplicaciones heredadas a la nube.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 ejemplo, puede mover las aplicaciones a las máquinas virtuales de Azure con pocas modificaciones, probablemente, solo con cambios de configuración menores.For example, you can move your applications to VMs in Azure with little modification-probably with only minor configuration changes. En este caso, el servicio de red es similar a un entorno local, sobre todo, si crea redes virtuales en Azure.The networking in this case is similar to an on-premises environment, especially if you create virtual networks in Azure.

    • Optimizado para la nube (servicios administrados y contenedores de Windows): este modelo consiste en hacer algunas optimizaciones importantes en la implementación para obtener algunas ventajas importantes de la nube, sin cambiar la arquitectura básica de la aplicación.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. El paso fundamental aquí es agregar la compatibilidad con los contenedores de Windows a las aplicaciones .NET Framework existentes.The fundamental step here is to add Windows Containers support to your existing .NET Framework applications. Este paso importante (creación de contenedores) no requiere modificar el código, por lo que el esfuerzo general de elevación y desplazamiento es bajo.This important step (containerization) doesn't require touching the code, so the overall lift and shift effort is light. Puede usar también herramientas como Image2Docker o Visual Studio con sus herramientas para Docker.You can use tools like Image2Docker or Visual Studio, with its tools for Docker. Visual Studio elige automáticamente valores predeterminados inteligentes para aplicaciones ASP.NET e imágenes de contenedores de Windows.Visual Studio automatically chooses smart defaults for ASP.NET applications and Windows Containers images. Estas herramientas ofrecen un bucle interior rápido y una ruta rápida para obtener los contenedores en Azure.These tools offer both a rapid inner loop, and a fast path to get the containers to Azure. La agilidad se mejora al implementar en varios entornos.Your agility is improved when you deploy to multiple environments. Después, al pasar a producción, puede implementar los contenedores de Windows en Azure Web App for Containers, Azure Container Instances (ACI) y máquinas virtuales de Azure con Windows Server 2016 y contenedores, si prefiere un enfoque de 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. En el caso de las aplicaciones de varios contenedores más complejas, le recomendamos usar orquestadores como Azure Kubernetes Service (AKS/ACS).For more complex multi-container applications, consider using orchestrators like Azure Kubernetes Service (AKS/ACS).

    Durante esta modernización inicial, también puede agregar recursos desde la nube, como la supervisión con herramientas como Azure Application Insights; canalizaciones de CI/CD para los ciclos de vida de la aplicación con Azure DevOps Services y muchos más servicios de recursos de datos que están disponibles en 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 ejemplo, puede modificar una aplicación web monolítica desarrollada originalmente con las herramientas Web Forms ASP.NET o ASP.NET MVC tradicionales, pero ahora se implementa con los contenedores de 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. Si usa los contenedores de Windows, también debe migrar los datos a una base de datos en la Instancia administrada de Azure SQL Database, y todo sin tener que modificar la arquitectura de código de la aplicación.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 en la nube: tal como se ha explicado en la introducción, debe considerar la posibilidad de volver a diseñar aplicaciones nativas de la nube cuando su objetivo son aplicaciones grandes y complejas con varios equipos de desarrollo independientes que trabajan en diferentes microservicios que se pueden desarrollar e implementar 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. Además, debido a la escalabilidad independiente y granular por microservicio.Also, due to granularized and independent scalability per microservice. Estos enfoques arquitectónicos se enfrentan a desafíos y complejidades muy importantes, pero se pueden simplificar en gran medida mediante PaaS de nube y orquestadores como Azure Kubernetes Service (AKS/ACS) (Kubernetes administrado) y Azure Functions para un enfoque sin 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. Todos estos enfoques (por ejemplo, microservicios y sin servidor) normalmente requieren que se diseñe la aplicación para la nube y se escriba código nuevo que se adapte a determinadas plataformas PaaS o código que se adapte a arquitecturas específicas, como microservicios.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.

    En la figura 1-3 se muestran las tecnologías internas que se pueden usar para cada nivel de madurez:Figure 1-3 shows the internal technologies that you can use for each maturity level:

    Tecnologías internas para cada nivel de madurez de la modernización

    Figura 1-3.Figure 1-3. Tecnologías internas para cada nivel de madurez de la modernizaciónInternal technologies for each modernization maturity level

    Escenario de elevación y desplazamientoLift and shift scenario

    Para las migraciones de elevación y desplazamiento, tenga en cuenta que puede usar muchas variaciones distintas de elevación y desplazamiento en los escenarios de aplicaciones.For lift and shift migrations, keep in mind that you can use many different variations of lift and shift in your application scenarios. Si solo rehospeda la aplicación, puede tener un escenario como el que se muestra en la figura 1-4, donde se usan máquinas virtuales en la nube solo para la aplicación y el servidor de base de datos.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.

    Ejemplo de un escenario IaaS puro en la nube

    Figura 1-4.Figure 1-4. Ejemplo de un escenario IaaS puro en la nubeExample of a pure IaaS scenario in the cloud

    Escenarios de modernizaciónModernization scenarios

    Para los escenarios de modernización, puede disponer de una aplicación pura optimizada para la nube que usa elementos solo de dicho nivel de madurez.For modernization scenarios, you might have a pure Cloud-Optimized application that uses elements only from that maturity level. También puede tener una aplicación de estado intermedio con algunos elementos de la infraestructura lista para la nube y otros elementos de operaciones optimizadas para la nube (un modelo de elección o mixto), como el que se muestra en la 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.

    Ejemplo de escenario de elección, con base de datos IaaS, DevOps y recursos incluidos en contenedores

    Figura 1-5.Figure 1-5. Ejemplo de escenario de elección, con base de datos IaaS, DevOps y recursos incluidos en contenedoresExample "pick and choose" scenario, with database on IaaS, DevOps, and containerization assets

    A continuación, como el escenario ideal para muchas aplicaciones .NET Framework existentes que se van a migrar, podría migrar a una aplicación optimizada para la nube para obtener importantes ventajas por el hecho de tener que realizar poco trabajo.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. Este enfoque también lo prepara para la opción de nativo en la nube como un posible paso posterior.This approach also sets you up for Cloud-Native as a possible future evolution. En la figura 1-6 se muestra un ejemplo.Figure 1-6 shows an example.

    Ejemplo de escenario de aplicaciones optimizadas para la nube, con contenedores de Windows y servicios administrados

    Figura 1-6.Figure 1-6. Ejemplo de escenario de aplicaciones optimizadas para la nube, con contenedores de Windows y servicios administradosExample Cloud-Optimized apps scenario, with Windows Containers and managed services

    Para ir incluso más allá, puede extender la aplicación optimizada para la nube existente con la adición de algunos microservicios para escenarios específicos.Going even further, you could extend your existing Cloud-Optimized application by adding a few microservices for specific scenarios. De esta forma, pasaría parcialmente al nivel de aplicación nativa de la nube, que no es el enfoque principal de esta guía.This would move you partially to the level of Cloud-Native model, which is not the main focus of the present guidance.

    Aspectos no tratados en esta guíaWhat this guide does not cover

    En esta guía se incluye un subconjunto específico de los escenarios de ejemplo, como se muestra en la figura 1-7.This guide covers a specific subset of the example scenarios, as shown in Figure 1-7. Esta guía se centra solo en los escenarios de elevación y desplazamiento y, en última instancia, en el modelo de operaciones optimizadas para la nube.This guide focuses only on lift and shift scenarios, and ultimately, on the Cloud-Optimized model. En el modelo de operaciones optimizadas para la nube, una aplicación .NET Framework se moderniza mediante contenedores de Windows, así como con componentes adicionales, como la supervisión y las canalizaciones 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 es fundamental para implementar aplicaciones en la nube más rápido y con agilidad.Each component is fundamental to deploying applications to the cloud, faster, and with agility.

    Las aplicaciones nativas de la nube no se tratarán en esta guía.

    Figura 1-7.Figure 1-7. Las aplicaciones nativas de la nube no se tratarán en esta guía.Cloud-Native is not covered in this guide

    El objetivo de esta guía es específico.The focus of this guide is specific. Se muestra la ruta que se puede adoptar para conseguir una elevación y un desplazamiento de las aplicaciones .NET existentes, sin rediseñar ni cambiar el 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. En última instancia, se explica cómo hacer que la aplicación tenga operaciones optimizadas para la nube.Ultimately, it shows you how to make your application Cloud-Optimized.

    En esta guía no se explica cómo crear aplicaciones nativas de la nube, como la forma de evolucionar a una arquitectura de microservicios.This guide doesn't show you how to create Cloud-Native applications, such as how to evolve to a microservices architecture. Para rediseñar las aplicaciones o crear otras basadas en microservicios, consulte el libro electrónico Microservicios de .NET: Arquitectura para aplicaciones .NET en contenedor.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 adicionalesAdditional resources

    • Ciclo de vida de aplicaciones de Docker en contenedor con la plataforma y las herramientas de Microsoft; (libro electrónico descargable) Containerized Docker application lifecycle with Microsoft platform and tools (downloadable e-book)
      https://aka.ms/dockerlifecycleebook

    • Microservicios de .NET. Arquitectura para aplicaciones .NET en contenedor (libro electrónico descargable) .NET Microservices: Architecture for containerized .NET applications (downloadable e-book)
      https://aka.ms/microservicesebook

    • Diseño de aplicaciones web modernas con ASP.NET Core y Azure (libro electrónico descargable) Architecting modern web applications with ASP.NET Core and Azure (downloadable e-book)
      https://aka.ms/webappebook

    Destinatarios de esta guíaWho should use this guide

    Esta guía se escribió para desarrolladores y arquitectos de soluciones que quieren modernizar aplicaciones web ASP.NET o servicios WCF existentes basados en .NET Framework, para mejorar la agilidad de distribución y publicación de aplicaciones.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.

    Esta guía puede resultar útil también si es responsable de toma de decisiones, como un arquitecto empresarial o un jefe o director de desarrollo que solo desea obtener información general de las ventajas que se pueden obtener con el uso de los contenedores de Windows y con la implementación en la nube mediante 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.

    Cómo usar esta guíaHow to use this guide

    En esta guía se aborda el motivo por el que modernizar las aplicaciones existentes y las ventajas específicas derivadas del uso de los contenedores de Windows al mover las aplicaciones a la nube.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. El contenido de los primeros capítulos de la guía está diseñado para arquitectos y responsables de tomar decisiones técnicas que desean obtener información general, pero que no necesitan centrarse en información detallada de carácter técnico ni en la implementación.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.

    En el último capítulo de esta guía se presentan varios tutoriales centrados en escenarios de implementación específicos.The last chapter of this guide introduces multiple walkthroughs that focus on specific deployment scenarios. En esta guía, se ofrecen versiones más cortas de los tutoriales, para resumir los escenarios y destacar sus ventajas.This guide offers shorter versions of the walkthroughs, to summarize the scenarios and highlight their benefits. Los tutoriales completos profundizan en los detalles de configuración e implementación y se publican como una serie de entradas de wiki en el mismo repositorio de GitHub público en el que se encuentran aplicaciones de ejemplo relacionadas (tratadas en la siguiente sección).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). El último capítulo y los tutoriales detallados de la wiki de GitHub resultarán más interesantes para los desarrolladores y arquitectos que desean centrarse en los detalles de implementación.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.

    Aplicaciones de ejemplo para modernizar aplicaciones heredadas: eShopModernizingSample apps for modernizing legacy apps: eShopModernizing

    En el repositorio eShopModernizing de GitHub se ofrecen dos aplicaciones de ejemplo que simulan aplicaciones web monolíticas heredadas.The eShopModernizing repo on GitHub offers two sample applications that simulate legacy monolithic web applications. Una aplicación web se desarrolla mediante ASP.NET MVC; la segunda aplicación web se desarrolla mediante ASP.NET Web Forms y la tercera aplicación es una aplicación de n niveles con una aplicación de escritorio cliente de WinForms que consume un back-end de servicio 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. Todas estas aplicaciones se basan en el marco .NET Framework tradicional.All these apps are based on the traditional .NET Framework. Estas aplicaciones de ejemplo no usan .NET Core o ASP.NET Core, ya que se supone que se van a modernizar aplicaciones .NET Framework existentes/heredadas.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.

    Estas aplicaciones de ejemplo tienen una segunda versión, con código modernizado, y son bastante sencillas.These sample apps have a second version, with modernized code, and which are fairly straightforward. La diferencia más importante entre las versiones de las aplicaciones es que las segundas versiones usan los contenedores de Windows como opción de implementación.The most important difference between the app versions is that the second versions use Windows Containers as the deployment choice. También hay algunas adiciones en las segundas versiones, como Azure Storage Blob para administrar imágenes, Azure Active Directory para administrar la seguridad y Azure Application Insights para supervisar y auditar las aplicaciones.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.

    Envíe sus comentariosSend your feedback

    Esta guía se escribió para ayudar a entender las opciones para mejorar y modernizar las aplicaciones web .NET existentes.This guide was written to help you understand your options for improving and modernizing existing .NET web applications. La guía y las aplicaciones de ejemplo relacionadas evolucionan.The guide and related sample applications are evolving. Agradecemos sus comentarios.Your feedback is welcome! Si tiene comentarios sobre cómo esta guía podría resultar más útil, envíelos a 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.