Las arquitecturas basadas en Microservicios están emergiendo actualmente como opciones apropiadas para aplicaciones distribuidas de misión crítica.
En una arquitectura basada en microservicios, la aplicación se construye basada en una colección de servicios que deben ser desarrollados, probados, versionados y desplegados en producción, de forma independiente.
En paralelo, las empresas actualmente están descubriendo como con contenedores Docker pueden reducir costes, resolver problemáticas de despliegues y en definitiva mejorar DevOps y operaciones de despliegues a producción. Docker se esta convirtiendo en un estándar “de facto”.
Las arquitecturas de microservicios son realmente independientes, a nivel purista, de los contendores Docker. Se puede implementar una aplicación con microservicios sin contenedores Docker, por ejemplo, desplegando microservicios como simples procesos. Y viceversa también es cierto, se puede usar contenedores Docker en aplicaciones con despliegue monolítico (como una aplicación web sencilla), sin arquitectura de microservicios. Pero también es cierto que el uso de contendores Docker en arquitecturas de microservicios es una opción muy conveniente y en general, hoy en dia, se recomienda hacer uso de contenedores en aplicaciones con arquitectura de microservicios.
Microsoft has estado en los últimos años creando mucha innovación alrededor de contendores Docker, tanto contenedores Linux como contenedores Windows, así como creando productos de despliegue de infraestructura tipo orquestadores como Azure Container Service (AKS) con Kuberentes y Azure Service Fabric. Estos productos permiten desplegar aplicaciones basadas en contenedores al tiempo que posibilitan ofrecer alta escalabilidad tanto en la nube (Microsoft Azure u otras nubes publicas) como también on-premises (en tu propio datacenter).
Hace algunos meses, desde el grupo de producto de Microsoft .NET publicamos en ingles una guía/eBook sobre Microservicios .NET y Contenedores Docker, actualizada a .NET Core 2.0 (Blog post en el Blog de .NET con resumen en inglés), la cual ha tenido muy buena aceptación en la comunidad .NET y en el contexto profesional empresarial. Sin embargo, recibimos también bastante feedback solicitando la traducción de este libro a otros idiomas, como el español, chino, etc. Me hubiera encantado traducirlo personalmente a español, pero me ha sido imposible por falta de tiempo.
Microsoft eBook gratuito en Español: “Microservicios .NET – Arquitectura para aplicaciones .NET contenerizadas”
Hoy anuncio que hemos podido traducirlo a español (gracias a la ayuda y buen trabajo de Miguel Veloso, consultor en Turing Challenge, en España) y está disponible para bajarlo desde Internet en la siguiente URL:
https://aka.ms/microservicesebook-es-es
También esta disponible en chino, por si el lector de este blog post en español conoce a alguien que este interesado en dicho idioma. 🙂
A continuación, paso a destacar los puntos mas destacables de la guía/libro:
Esta guía/libro (unas 300 páginas con implementación de código detallada) es una guía de desarrollo de aplicaciones basadas en microservicios y en contenedores Docker.
Cubre conceptos de arquitectura, diseño e implementación de microservicios con .NET Core y Docker.
Aplicación de referencia relacionada con la guía de arquitectura
Para hacer más fácil el arrancar y aprender sobre esta temática, también se ha creado una aplicación de referencia de microservicios/contenedores a la cual se referencia desde el eBook según se avanza en diferentes implementaciones.
Esta aplicación de referencia se llama eShopOnContainers y esta disponible en GitHub. Es código open-source y abierta a la colaboración de la comunidad. De hecho a la fecha hemos tenido ya mas de 176 PRs (Pull Requests) con código de la comunidad mejorando la aplicación.
Eso sí, lo relacionado a la aplicación, Wiki, setups, etc. está solamente disponible en inglés.
Es importante destacar que el hecho de que el dominio de negocio de esta aplicación ejemplo sea sobre eCommerce es puramente como ejemplo por ser una temática que todos los desarrolladores conocen. Pero esta aplicación no trata de ser un modelo/referencia de eCommerce como tal, solamente de aplicación de ejemplo de como se puede implementar microservicios con .NET Core y contendores Docker.
El siguiente diagrama muestra un resumen de alto nivel de la arquitectura de esta aplicación ejemplo, en un entorno de desarrollo/pruebas.
Requerimientos:
Es importante destacar que lo único que se necesita para hacer funcionar la aplicación es un -PC Windows 10 con Visual Studio 2017 y Docker for Windows- o incluso opcionalmente también un -Mac con Docker for Mac y .NET Core SDK- o un -PC Windows 10 con Docker for Windows y .NET SDK-
La siguiente imagen seria como se recomienda desplegar en un ‘entorno de producción’ en Azure con un API Gateway tipo “Azure API Management”:
Sin embargo, actualmente estamos trabajando en una actualización de la aplicación para uso de API Gateways genéricos (basados en Ocelot) en contenedores Docker .NET, y de esa forma el uso de ‘Azure API Management’ en producción seria opcional.
La lista siguiente son las características más importantes implementadas en la aplicación ejemplo y explicadas en el eBook/Libro:
Microservicios en el backend:
• Microservicio IDENTITY, basado actualmente en ASP.NET Core Identity e IdentityServer4.
• Microservicio CATALOG, es un servicio sencillo, CRUD (create, read, update, delete) que consume su propia base de datos SQL Server con Entity Framework Core.
• Microservicio ORDERING, es un microservicio con implementacion interna basada en patrones DDD (Domain-Driven Design).
• Microservicio BASKET, es un esrvicio CRUD con datos en Redis Cache
• Microservicios MARKETING y LOCATION, como ejemplos de uso de bases de datos No-SQL (MongoDB / CosmosDB).
• Una app web MVC “watchdogs” que consulta y muestra informacion sobre el estado de salud (HealthChecks) de todos los servicios de la aplicacion.
Todos estos microservicios estan implementados con ASP.NET Core Web API y desplegados como contenedores Docker.
Las aplicaciones cliente se comunican con los servicios de backend mediante HTTP.
Los microservicios también se comunican entre ellos pero solamente mediante mensajes asíncronos (Eventos de integración) basados en un Bus de Eventos con varias implementaciones opcionales:
- Contenedor RabittMQ (para entorno Dev/Test)
- Azure Service Bus (Para entornos escalables en la nube)
- NServiceBus (Implementacion en un fork realizado por Particular Software: https://github.com/Particular/eShopOnContainers )
Ademas, la aplicación dispone de tres apps cliente:
• Una aplicacion cliente web tradicional creada con ASP.NET Core MVC
• Una aplicacion cliente SPA (Single Page Application) basada en Angular y Typescript.
• Una app movil, cross-platform para iOS, Android y Windows, basada en Xamarin.Forms.
Puntos adicionales recientemente actualizados:
-
Uso de .NET Core 2.0 y .NET Standard Library 2.0.
-
Uso de Entity Framework 2.0 con caracteristicas como owned entities para implementación del patron Value Object.
-
Uso de ASP.NET Core 2.0 Docker multi-arch images en dockerfiles (Linux y Windows Containers)
-
Soporte en los ficheros docker-compose para Docker Linux y Windows Containers
-
-
Uso de Docker multi-stage builds, en los dockerfiles.
-
Codigo actualizado de logging y configuration en ASP.NET Core 2.0
-
Uso del nuevo IHostedService para la tarea de background llamada OrderGracePeriod de la aplicación.
-
Actualizado MVC y SPA-Angular a las ultimas templates en Visual Studio 2017 con ASP.NET Core 2.0
-
Migrado a ASP.NET Identity 2.0
-
Implementacion de Idempotent commands.
-
Uso de MediatR con Behaviors para la implementacion de Domain Events (eventos de dominio internos a un microservice)
-
Uso opcional de Azure Application Insights para monitorizacion de los microservices/containers.
-
Soporte de Kubernetes en despliegues a Azure AKS (Linux containers deployment)
-
Soporte de Service Fabric en despliegues a Azure (Linux and Windows containers deployment)
-
Event Bus e Integration Events soportando contenedor local de RabbitMQ o implementacion con Azure Service Bus
-
NServiceBus y Sagas en la version “forked”: Forked version of eShopOnContainers for NServiceBus.
-
Muy interesante la informacion de eventos de integracion mostrada por Particular ServiceInsight basada en info de ejecucion.
-
Gracias a Particular Software por esta implementación adicional (forked)
-
Para una lista más detallada de las implementaciones, véase el eShopOnContainers Roadmap and features Wiki post.
—-
Libro relacionado: “Modernizar aplicaciones .NET Framework existentes con Contenedores Windows y Azure”
También hace poco hemos traducido este otro libro relacionado.
En este caso no se trata de arquitecturas de microservicios. Tampoco de .NET Core. Al contrario, se trata simplemente de como se puede mejorar aplicaciones .NET Framework existentes, “antiguas” o “legacy”, la mayoría con despliegues monolíticos o 3-Tier, e implementadas, por ejemplo, con .NET Framework y ASP.NET WebForms, MVC o WCF y como contenerizarlas con WINDOWS CONTAINERS para mejorar los despliegues a entornos de produccion o Dev/Test y en definitiva mejorar mucho vuestro Dev/Test y los entornos CI/CD eliminando los típicos problemas tradicionales de:
“Por qué no funciona en producción? ¡En mi máquina de desarrollo funciona perfectamente!” – Eso es precisamente lo que solucionan los contenedores Docker.
https://aka.ms/liftandshiftwithcontainersebook-es-es
Visita el “.NET Application Architecture Center” y obtiene más recursos (en ingles)
En ingles hay muchos mas recursos que hemos hecho disponibles en la pagina .NET Application Architecture Center page desde donde se pueden bajar muchos otros eBooks en ingles.
Comentarios, feedback y colaboraciones de la comunidad
Agradezco mucho vuestros comentarios para mejorar. Podeis hacerlo directamente en los comentarios de este blog post o mandándome un email a “cesardl at microsoft.com”.
Espero pueda servir de ayuda y no dudéis en contactar con nosotros.
Cesar de la Torre
.NET Product Group
El link se encuentra caído. Solo encuentro el libro en ingles. Podrías volver a cargarlo.
A la fecha fecha sigue caído el link.
Actualizado. Redirecciona al la ultima version del libro pero en paginas HTML en docs.microsoft.com.
La ultima version del libro no se encuentra traducida en formato .PDF, solamente en paginas en docs.microsoft.com, por eso el enlace estaba caido.
La URL final es esta:
https://docs.microsoft.com/es-es/dotnet/architecture/microservices/
Buenas Cesar,
Hay alguna forma de conseguir la traducción? Aunque sea de una versión antigua del libro?
Estoy realmente interesado en leerlo. Y mi inglés no es del todo bueno como para poder entender todo el libro.
Ahora de momento, voy a leer:
https://docs.microsoft.com/es-es/dotnet/architecture/microservices/
Pero voy a estar al tanto de tu respuesta.
Perdon las molestias,
Saludos!
Hola Daniel , que pena en demorar ver este blog : acá lo tienes https://1drv.ms/b/s!AleR24baFHcs02klqnJtm8mgNlPx?e=PKMJhi
Hola Daniel,
Puedes bajar el .PDF de la version/edition v1.0 del link de abajo, pero recomiendo la version online porque han habido muchos cambios hasta la version 3.0 que estamos actualmente.
.PDF v1.0 en castellano:
https://1drv.ms/b/s!Ag33_uWyTcH5n-hAiFkU0cRqZ5WfLg?e=nbWhZx
Saludos,
Espero que este enlace te sirva mientras suben el PDF nuevamente:
Microservices .net en español