Aprendizajes clave

Como resumen de los aprendizajes clave, a continuación, presentamos las conclusiones más importantes de esta guía.

Beneficios del uso de contenedores. Las soluciones basadas en contenedores proporcionan el beneficio importante del ahorro de costes, ya que los contenedores son una solución a los problemas de despliegue causados por la falta de dependencias en los entornos de producción. Los contenedores mejoran significativamente las operaciones de DevOps y producción.

Los contenedores serán ubicuos. Los contenedores basados en Docker se están convirtiendo en el estándar de facto en la industria de contenedores, con el soporte de los proveedores más importantes en los ecosistemas Windows y Linux. Esto incluye Microsoft, Amazon AWS, Google e IBM. En un futuro próximo, es probable que Docker sea ubicuo tanto en centros de datos en la nube como locales.

Contenedores como unidad de despliegue. Un contenedor Docker se está convirtiendo en la unidad estándar de despliegue para cualquier aplicación o servicio basado en servidor.

Microservicios. La arquitectura de microservicios se está convirtiendo en el enfoque preferido para aplicaciones grandes o complejas de misión crítica, distribuidas y basadas en múltiples subsistemas independientes en forma de servicios autónomos. En una arquitectura basada en microservicios, la aplicación se construye como una colección de servicios que se pueden desarrollar, probar, versionar, desplegar y escalar independientemente, además pueden incluir cualquier base de datos autónoma relacionada.

Diseño basado en el dominio y SOA. Los patrones de arquitectura de microservicios de derivan de la arquitectura orientada a servicios (SOA) y el diseño basado en el dominio (DDD). Cuando diseña y desarrolla microservicios para entornos con reglas cambiantes del negocio, que conforman un dominio en particular, es importante tener en cuenta los enfoques y patrones de DDD.

Desafíos de los microservicios. Los microservicios ofrecen muchas capacidades poderosas, como el despliegue independiente, fuertes límites de subsistema y diversidad tecnológica. Sin embargo, también plantean muchos desafíos nuevos, relacionados con el desarrollo distribuido de aplicaciones, como modelos de datos fragmentados e independientes, comunicación resiliente entre microservicios, consistencia eventual y complejidad operativa que resulta de agregar la información de registro y monitorización de múltiples microservicios. Estos aspectos introducen un grado mayor de complejidad que una aplicación monolítica tradicional. Como resultado, sólo escenarios específicos son adecuados para aplicaciones basadas en microservicios. Estas incluyen aplicaciones grandes y complejas con múltiples subsistemas en evolución. En estos casos, vale la pena invertir en una arquitectura de software más compleja, ya que proporcionará una mayor agilidad a largo plazo y un mejor mantenimiento de las aplicaciones.

Contenedores para cualquier aplicación. Los contenedores son convenientes para los microservicios, pero no son exclusivos para ellos. Los contenedores también se pueden utilizar con aplicaciones monolíticas, incluyendo aplicaciones legacy basadas en el .NET Framework tradicional y modernizadas a través de Windows Containers. Los beneficios de utilizar Docker, como las facilidades para resolver muchos problemas de despliegue a producción y proporcionar entornos de desarrollo y pruebas de última generación, se aplican a muchos tipos de aplicaciones diferentes.

CLI versus IDE. Con las herramientas de Microsoft, puede desarrollar aplicaciones .NET contenerizadas usando el enfoque que prefiera. Puede desarrollar con un CLI y un entorno basado en un editor de texto, usando Docker CLI y Visual Studio Code. O bien, puede utilizar un enfoque centrado en el IDE con Visual Studio y sus características exclusivas para Docker, como ser capaz de depurar aplicaciones multi-contenedor.

Aplicaciones resilientes en la nube. En los sistemas basados en nube y en los sistemas distribuidos en general, siempre existe el riesgo de fallo parcial. Dado que los clientes y los servicios son procesos separados (contenedores), es posible que un servicio no pueda responder a tiempo a la solicitud de un cliente. Por ejemplo, un servicio podría estar inactivo debido a una falla parcial o por mantenimiento, el servicio podría estar sobrecargado y responder extremadamente lento a las solicitudes, o simplemente podría no estar accesible por un tiempo breve, debido a problemas de red. Por lo tanto, una aplicación basada en la nube debe aceptar estos fallos y contar con una estrategia para responder a ellos. Estas estrategias pueden incluir políticas de reintento (reenvío de mensajes o peticiones de reintento) y la implementación de patrones de interruptores automáticos para evitar la carga exponencial de peticiones repetidas. Básicamente, las aplicaciones basadas en la nube deben tener mecanismos resilientes, ya sea personalizados o basados en la infraestructura de la nube, como los frameworks de alto nivel de los orquestadores o los buses de servicio.

Seguridad. Nuestro mundo moderno de contenedores y microservicios puede exponer nuevas vulnerabilidades. La seguridad básica de las aplicaciones se basa en la autenticación y autorización; existen múltiples formas de implementarlas. Sin embargo, la seguridad de los contenedores incluye componentes clave adicionales que resultan en aplicaciones intrínsecamente más seguras. Un elemento crítico para crear aplicaciones más seguras es tener una forma segura de comunicarse con otras aplicaciones y sistemas, algo que a menudo requiere credenciales, tokens, contraseñas y otros tipos de información confidencial, lo que generalmente se conoce como secretos de aplicación. Cualquier solución segura debe seguir las mejores prácticas de seguridad, tales como encriptar secretos durante el transporte, encriptar secretos en reposo y evitar que se produzcan fugas involuntarias cuando se consumen en la aplicación final. Esos secretos necesitan ser guardados y mantenidos a salvo en algún lugar. Para ayudarle con la seguridad, puede aprovechar la infraestructura de su orquestador elegido, o la infraestructura de nube como Azure Key Vault y las maneras en se puede utilizar desde el código de aplicación.

Orquestadores. Los orquestadores basados en contenedores como los que se proporcionan en Azure Container Service (Kubernetes, Mesos DC/OS, and Docker Swarm) y Azure Service Fabric son indispensables para cualquier aplicación basada en microservicios y para cualquier aplicación multi-contenedor con una complejidad significativa, necesidades de escalabilidad y evolución constante. Esta guía ha presentado los orquestadores y su papel en las soluciones basadas en microservicios y contenedores. Si sus necesidades de aplicación le llevan hacia aplicaciones contenerizadas complejas, encontrará útil buscar en los recursos adicionales para aprender más sobre orquestadores.