miércoles, 21 de agosto de 2019

Doce buenas prácticas para la construcción de software como servicio


Uno de los paradigmas que trae consigo el cloud computing es el ofrecimiento de las capacidades IT como un servicio siguiendo el modelo de utility empleado en agua, electricidad, etc. Una de las formas, quizá la más avanzada, de esa prestación 'como servicio', sea el Software como Servicio (SaaS, 'Software as a Service').

Proporcionar el software como servicio tiene unas importantísimas implicaciones a nivel de gestión TI y de modelos operativos y de negocio, pero también tiene, no lo olvidemos, una base tecnológica. Aunque el cloud computing está alcanzando ya unos niveles de madurez que nos hacen empezar a percibirlo como algo 'normal', lo cierto es que el diseño de aplicaciones para la nube, tiene sus indudables dificultades y problemáticas propias.

Cuando en el post anterior hablábamos del modelo de madurez para aplicaciones cloud nativas propuesto por de Tom Laszewski, Kamal Arora, Erik Farr y Piyum Zonooz, en su libro 'Cloud Native Architectures', mencionábamos, dentro del eje de diseño centrado en la aplicación, una metodología denominada 'los doce factores'.

En este post quisiera ampliar un poco más la información sobre esa metodología. En mi opinión, no se trata realmente de una metodología sino, más bien, de unas buenas prácticas nacidas de la experiencia práctica de los creadores del documento. Eso si, doce muy interesantes buenas prácticas y que creo que recogen muy acertadamente la experiencia de sus creadores y proporcionan buenos sabios consejos.

Las doce buenas prácticas son, muy resumidas, las siguientes:
  • Código base (codebase): Utilizar un repositorio de control de versiones y un código base único usado para los diferentes despliegues que puedan ser necesarios.

  • Dependencias: Declarar todas las dependencias de forma completa y explícita de forma que una aplicación no dependa nunca de la existencia de paquetes ya instalados.

  • Configuraciones: Separación estricta de configuración y código y almacenamiento de la configuración en el entorno.

  • Servicios de soporte: Tratar los servicios de soporte como 'attached resources' y tratar de la misma forma los servicios propios y los proporcionados por terceros.

  • Construcción, despliegue y ejecución: Separación completa de las fases de construcción, distribución y ejecución.

  • Procesos: Las aplicaciones se ejecutan como procesos sin estado y son 'share nothing', es decir, cualquier información que deban almacenar se hará mediante un servicio de soporte (como una base de datos).

  • Asignación de puertos: Hacer aplicaciones auto-contenidas sin dependencia de la existencia de un servidor web y, a esos efectos, publicar los servicios indicando los puertos en que escuchan.

  • Concurrencia: Preparar la aplicación para escalar con base en una correcta aplicación del modelo de procesos y confiar en el gestor de procesos del sistema operativo.

  • 'Desechabilidad': Hacer las aplicaciones 'desechables' es decir, que puedan iniciarse y finalizarse en el momento que sea necesario y teniendo en cuenta cosas como minimizar el tiempo de arranque y la finalización en modo seguro.

  • Paridad desarrollo/producción: Minimizar las diferencias (de tiempo, personal y herramientas) entre entornos de desarrollo y producción, facilitando la filosofía del despliegue continuo.

  • Trazas (logs): Hacer que la aplicación 'se despreocupe' del enrutado o almacenamiento de los 'logs'. escribiendo en su lugar en la salida estándar y, posteriormente, en cada entorno, haciendo la redirección de esa salida a donde sea oportuno.

  • Procesos de administración: Hacer que procesos del tipo de migraciones, scripts, etc se ejecuten en el mismo entorno que los procesos 'normales'.
Estas buenas prácticas, por supuesto, se explican en más detalle que lo aquí mencionado y están accesibles en la web, incluso en español, y también se pueden descargar como documento ePub.

Escritas por técnicos para técnicos, creo que estas doce buenas prácticas pueden resultar muy interesantes e ilustrativas para desarrolladores, arquitectos y operadores cloud.

No hay comentarios:

Publicar un comentario