Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Sugerencia
Este contenido es un extracto del libro electrónico, Arquitectura de aplicaciones .NET nativas de nube para Azure, disponible en .NET Docs o como un PDF descargable gratuito que se puede leer sin conexión.
Otro día más en la oficina, trabajando en "el próximo gran hito".
Tu teléfono celular suena. Es su amable reclutador - el que llama a diario con nuevas oportunidades emocionantes.
Pero esta vez es diferente: Empresa emergente, capital y abundante financiación.
La mención de la nube, los microservicios y la tecnología de vanguardia le llevan al límite.
Avance rápido unas semanas y ahora eres un nuevo empleado en una sesión de diseño que diseña una aplicación de comercio electrónico importante. Competirás con los principales sitios de comercio electrónico.
¿Cómo lo crearás?
Si sigue las instrucciones de los últimos 15 años, probablemente compilará el sistema que se muestra en la figura 1.1.
Figura 1-1. Diseño monolítico tradicional
Se crea una aplicación principal de gran tamaño que contiene toda la lógica de dominio. Incluye módulos como Identity, Catalog, Ordering, etc. Se comunican directamente entre sí dentro de un único proceso de servidor. Los módulos comparten una base de datos relacional grande. El núcleo expone la funcionalidad a través de una interfaz HTML y una aplicación móvil.
¡Felicidades! Acabas de crear una aplicación monolítica.
No todo es malo. Los monolitos ofrecen algunas ventajas distintas. Por ejemplo, son sencillos de...
- Construir
- prueba
- desplegar
- solucionar problemas
- escalar verticalmente
Muchas aplicaciones exitosas que existen hoy en día fueron creadas como monolitos. La aplicación es un éxito y continúa evolucionando, iteración después de la iteración, agregando más funcionalidad.
Sin embargo, en algún momento empiezas a sentirte incómodo. Está perdiendo control sobre la aplicación. A medida que pasa el tiempo, la sensación se vuelve más intensa y finalmente entras en un estado conocido como Fear Cycle
:
- La aplicación se ha vuelto tan abrumadoramente complicada que nadie lo entiende.
- Usted teme realizar cambios: cada cambio tiene efectos secundarios no deseados y costosos.
- Las nuevas características y correcciones se vuelven complicadas, lentas y costosas de implementar.
- Cada versión se vuelve lo más pequeña posible y requiere una implementación completa de toda la aplicación.
- Un componente inestable puede bloquear todo el sistema.
- Las nuevas tecnologías y marcos no son una opción.
- Es difícil implementar metodologías de entrega ágiles.
- La erosión arquitectónica se instala a medida que la base de código se deteriora con interminables "correcciones en el momento".
- Por último, los consultores entran y le dicen que lo reescriba.
¿Suena familiar?
Muchas organizaciones han abordado este ciclo de miedo monolítico mediante la adopción de un enfoque nativo de la nube para crear sistemas. En la figura 1-2 se muestra el mismo sistema creado para aplicar técnicas y prácticas nativas de la nube.
Figura 1-2. Diseño nativo de la nube
Observe cómo se descompone la aplicación en un conjunto de microservicios aislados pequeños. Cada servicio es independiente y encapsula su propio código, datos y dependencias. Cada uno se implementa en un contenedor de software y lo administra un orquestador de contenedores. En lugar de una base de datos relacional grande, cada servicio posee su propio almacén de datos, el tipo de que varía en función de las necesidades de datos. Tenga en cuenta cómo algunos servicios dependen de una base de datos relacional, pero otras de bases de datos NoSQL. Un servicio almacena su estado en una caché distribuida. Tenga en cuenta cómo todo el tráfico se canaliza a través de un servicio de API Gateway, el cual es responsable de dirigir el tráfico hacia los servicios centrales del back-end y de aplicar muchos temas transversales. Lo más importante es que la aplicación aproveche al máximo las características de escalabilidad, disponibilidad y resistencia que se encuentran en las plataformas en la nube modernas.
Informática nativa en la nube
Hmm... Acabamos de usar el término Cloud Native. Tu primer pensamiento podría ser: "¿Qué significa exactamente eso?" ¿Otra palabra de moda del sector codificada por los proveedores de software para comercializar más cosas?"
Afortunadamente es muy diferente, y esperamos que este libro le ayude a convencerle.
En poco tiempo, el nativo de la nube se ha convertido en una tendencia impulsora en el sector del software. Es una nueva manera de construir sistemas grandes y complejos. El enfoque aprovecha al máximo las prácticas modernas de desarrollo de software, las tecnologías y la infraestructura en la nube. La nube nativa cambia la forma de diseñar, implementar, implementar y poner en funcionamiento sistemas.
A diferencia de las constantes expectativas que caracterizan a nuestro sector, lo nativo de nube es real. Considere la Cloud Native Computing Foundation (CNCF), un consorcio de más de 400 grandes corporaciones. Su misión es hacer que la informática nativa de la nube sea omnipresente en toda la tecnología y las soluciones en la nube. Como uno de los grupos de código abierto más influyentes, hospeda muchos de los proyectos de código abierto de mayor crecimiento en GitHub. Estos proyectos incluyen Kubernetes, Prometheus, Helm, Envoy y gRPC.
El CNCF fomenta un ecosistema de neutralidad de código abierto y proveedor. Siguiendo esa dirección, este libro presenta principios, patrones y mejores prácticas diseñados para la nube que son independientes de la tecnología. Al mismo tiempo, se describen los servicios y la infraestructura disponibles en la nube de Microsoft Azure para construir sistemas nativos de nube.
Entonces, ¿qué es exactamente Cloud Native? Siéntate, relájate y déjanos ayudarte a explorar este nuevo mundo.