Llegamos a ustedes gracias a:



Reportajes y análisis

¿Qué es nativo de la nube?

La forma moderna de desarrollar software

[24/09/2021] El término "computación nativa de la nube ha surgido como un término general para las diversas herramientas y técnicas requeridas por los desarrolladores de software para crear, implementar y mantener aplicaciones de software modernas en la infraestructura de la nube. Aquí, definimos el término, examinamos el panorama nativo de la nube e identificamos algunas de las ventajas y los inconvenientes de convertirse en nativo de la nube.

Definición de nativo de la nube

El concepto nativo de la nube es un enfoque moderno para crear y ejecutar aplicaciones de software que aprovecha la flexibilidad, escalabilidad y resistencia de la computación en la nube. El enfoque nativo de la nube abarca las diversas herramientas y técnicas que utilizan los desarrolladores de software en la actualidad para crear aplicaciones para la nube pública, a diferencia de las arquitecturas tradicionales adaptadas a un centro on premises de datos.

[Reciba lo último de CIO Perú suscribiéndose a nuestro newsletter semanal]

El enfoque nativo de la nube para crear y ejecutar software fue iniciado por un grupo de empresas comúnmente conocidas como "nacidas en la nube -estas incluyen a las gigantes del streaming, Netflix y Spotify; la empresa de transporte privado, Uber; y la plataforma de reserva de alojamiento, Airbnb. Desde entonces, el enfoque nativo de la nube ha sido adoptado por otras empresas que buscan una agilidad digital similar y una ventaja competitiva disruptiva.

La Cloud Native Computing Foundation (CNCF) define el concepto de nativo de la nube de forma un poco más precisa, centrándose en el uso de contenedores para las aplicaciones -donde las aplicaciones se dividen en microservicios y se empaquetan en contenedores livianos para ser implementados y orquestados en una variedad de servidores.

En palabras del propio CNCF: "Las tecnologías nativas de la nube permiten a las organizaciones crear y ejecutar aplicaciones capaces de aumentar y disminuir su escala dentro de ambientes modernos y dinámicos, como las nubes públicas, privadas e híbridas.

El desarrollo de las aplicaciones nativas de la nube generalmente incluye la combinación de microservicios, plataformas en la nube, contenedores, Kubernetes, infraestructura inmutable, API declarativas y tecnología de entrega continua con técnicas como DevOps y metodología ágil.

Perspectiva de lo nativo de la nube

Este cambio en las técnicas populares de desarrollo de software ha hecho surgir un nuevo panorama de herramientas predominantemente de código abierto. El CNCF mantiene un gráfico interactivo de este ecosistema.

Es importante entender las cuatro capas que componen la computación nativa de la nube:

  • La capa de definición y desarrollo de la aplicación. La capa superior del stack nativo de la nube se centra en las herramientas que utilizan los desarrolladores para crear aplicaciones, como bases de datos, sistemas de mensajería, imágenes de contenedores y pipelines de integración y entrega continuas (CI/CD).
  • La capa de abastecimiento. La capa de abastecimiento del stack nativo de la nube incluye todo lo necesario para crear y proteger el ambiente donde se ejecutará una aplicación, idealmente de forma repetible. En el mundo nativo de la nube, esto generalmente implica tratar la infraestructura como código, almacenar imágenes en un repositorio, automatizar las compilaciones y abordar las necesidades de seguridad de las aplicaciones con escaneo de vulnerabilidades, administración de claves y políticas, y herramientas de autenticación.
  • La capa de tiempo de ejecución. La capa de tiempo de ejecución se refiere a todo lo relacionado con la ejecución de una aplicación nativa de la nube, como el tiempo de ejecución del contenedor -que todavía tiende a ser Docker- así como al almacenamiento y las redes.
  • La capa de orquestación y administración. La capa de orquestación y administración reúne las herramientas necesarias para implementar, administrar y adaptar la escala de las aplicaciones en los contenedores, incluyendo la orquestación y la programación. En la mayoría de los casos, eso significa Kubernetes -además de descubrimiento de servicios, proxy de servicio, puerta de enlace API y malla de servicios.

Fuera de estas capas, también es importante implementar prácticas destinadas a la observación, por lo que todos estos servicios se monitorean de manera efectiva. Algunas organizaciones también optan por reunir su stack en una plataforma de desarrollo interna de autoservicio, o comprar una plataforma como servicio (PaaS, por sus siglas en inglés) ligada a un proveedor, para facilitar la adopción por parte de los desarrolladores.

Las ventajas de las arquitecturas nativas de la nube frente a las on premises

El desarrollo de las aplicaciones nativas de la nube requiere una arquitectura muy diferente a la de las aplicaciones empresariales tradicionales, que normalmente se ejecutan en un centro de datos on premises. A continuación, se muestran algunas diferencias clave y las ventajas que las aplicaciones nativas de la nube aportan sobre los modelos de desarrollo de aplicaciones tradicionales.

  • Lenguajes. Las aplicaciones on premises escritas para ejecutarse en servidores de la empresa tienden a estar escritas en lenguajes tradicionales, como C/C++, C# y Java empresarial. Es más probable que las aplicaciones nativas de la nube estén escritas en un lenguaje centrado en la web, como HTML, CSS, Java, JavaScript, .NET, Go, Node.js, PHP, Python y Ruby. Trabajar con lenguajes y plataformas modernas puede ayudar a la hora de atraer a los mejores ingenieros para que trabajen en su organización.
  • Capacidad de actualización. Las aplicaciones nativas de la nube están diseñadas para ser muy disponibles, resistentes y actualizables con regularidad, mientras que las aplicaciones on premises generalmente se actualizan una o dos veces al año mediante una metodología en cascada. La capacidad de actualización de la computación nativa de la nube proporciona un impulso de productividad para que los equipos de desarrollo se centren en su ventaja competitiva y les entreguen nuevas funciones a los clientes con más frecuencia que antes.
  • Elasticidad. Generalmente, las aplicaciones nativas de la nube aprovechan la elasticidad de la nube al flexionar el consumo según la demanda, mientras que una aplicación on premises requeriría el abastecimiento físico de infraestructura adicional para adaptar su escala de manera efectiva. Esto también tiene implicaciones en los costos, ya que la nube le permite pagar por lo que usa y evitar el costoso abastecimiento excesivo de su propia infraestructura -al menos en teoría.
  • Usuarios múltiples. Una aplicación nativa de la nube no tiene problemas para trabajar en un espacio virtualizado y compartir recursos con otras aplicaciones utilizando un modelo multiusuario. Esto aporta un claro impulso a la eficiencia de los equipos de desarrollo.
  • Tiempo de inactividad. La nube ofrece una mayor redundancia debido a la escala y la distribución geográfica de los centros de datos administrados por los proveedores de nube a hiperescala, por lo que las interrupciones se pueden administrar mejor redirigiendo rápidamente el tráfico a otra región y evitando costosos tiempos de inactividad.
  • Automatización. Las técnicas nativas de la nube abren una gran cantidad de oportunidades de automatización para que los ingenieros construyan una vez y pasen a otros desafíos más urgentes.
  • Sin estado. Las aplicaciones nativas de la nube tienden a no tener estado, ya que no transfieren los datos guardados de una sesión a otra. Este modelo ofrece la oportunidad de aumentar su escala fácilmente en varios servidores, almacenar en caché más fácilmente para incrementar el rendimiento, usar menos almacenamiento y, al no estar conectado a un servidor específico, evitar el temido bloqueo del proveedor.

Desafíos del enfoque nativo de la nube

Tratar de levantar y cambiar una aplicación on premises existente para que sea nativa de la nube, sin plantear desafíos arquitectónicos, es un error común. Asimismo, reestructurar algo para la nube también es un desafío de ingeniería significativo en sí mismo.

Para las organizaciones que buscan convertirse en nativas de la nube, encontrar la combinación de habilidades adecuada para hacer esto -adaptarse a un modelo de seguridad centrado en la nube y administrar el cambiante perfil de costos de un ambiente de nube- sigue siendo un desafío clave.

Aún así, los desarrolladores deberían considerar adoptar la tecnología nativa de la nube como un principio organizativo, ya sea creando nuevas aplicaciones destinadas a la nube o dividiendo las aplicaciones monolíticas existentes en microservicios para que se adapten mejor a un ambiente de nube.

Esto requerirá un cambio de mentalidad significativo, que parte de las tradicionales implementaciones en cascada hacia principios de desarrollo más ágiles como el desarrollo de un producto mínimo viable (MVP, por sus siglas en inglés), la adopción de la automatización, las pruebas multivariadas, la iteración rápida, la capacidad de observación y el trabajo en estrecha colaboración con el equipo de operaciones en un modelo DevOps.