Objetivo 7: servicios esenciales para aplicaciones en la nube

Descripción

Todos los programas deben tener una serie de servicios: los registros de actividad (logs) y el uso de configuración, posiblemente distribuida, son fundamentales.

Prerrequisitos

Haber superado los tests del objetivo anterior.

Explicación

Todas las aplicaciones en la red tienen que usar una serie de servicios, pero dos de ellos son fundamentales. La configuración (siguiendo los principios SOLID debe estar en el entorno, y por lo tanto deben usarse servicios que lo permitan. Y la actividad de una aplicación tiene que ser observable, así que tendrán que registrarla, sea normal o errónea.

En el primer caso, la configuración tiene que incluir diferentes posibles niveles de la misma, desde configurar desde línea de órdenes hasta usar sistemas de configuración remota, depósitos clave-valor distribuidos que permitan, a diferentes copias de un mismo servicio, compartir todos los elementos de configuración pertinentes, desde rutas y direcciones IP hasta claves de diferentes servicios. Relacionado con “la configuración esa en el entorno”, uno de los principios de los “12 factores”, eventualmente se trata de dotar a nuestras aplicaciones de una serie de funcionalidades que permitan fácilmente desplegar la aplicación, y diferentes copias de un microservicio, donde sea menester.

Por otro lado, el registro de actividad se plasma en el uso de bibliotecas de registro o log, y el uso extensivo de la misma para registrar toda la actividad, especialmente la errónea, pero también actividad relacionada con el usuario que permita, incluso de forma automática, escalar servicios horizontal o verticalmente para servir mejor al usuario.

En este objetivo habrá, por tanto, que añadir estas dos funcionalidades a la aplicación, justificando la elección de los servicios e integrando esta funcionalidad dentro del desarrollo normal de la aplicación, usando issues y también integrándolo en un PMV.

Información adicional

Del curso 0 se puede consultar el material sobre servicios avanzados en informática.

La configuración es un ejemplo de dependencia que debe estar desacoplada, por lo que se aconseja que se mire el tema de inversión de dependencias.

Lista de comprobación

* [ ] ¿Se han registrado todos los eventos relevantes en la aplicación, es decir, se
  han añadido comandos para registrarlos en todos ellos?
* [ ] ¿Se han seguido buenas prácticas en el uso de configuración remota?
* [ ] ¿Se han explicado correctamente las decisiones técnicas que se han tomado
  sobre las bibliotecas usadas?
* [ ] ¿Te has asegurado de que el fichero `.env` no se pueda añadir
accidentalente al repositorio?
* [ ] ¿Los logs y la configuración están en un objeto que se *inyecta* en las
clases manejadoras para su uso?
* [ ] ¿*Realmente* se usan los logs en las diferentes clases en eventos
importantes?
* [ ] ¿Se testea el código creado para logs y configuración, igual que
    cualquier otro código?
* [ ] ¿La clase o módulo de configuración lee *siempre* las variables de entorno?

Entrega de la práctica

Subir los fuentes a GitHub y hacer un pull request al fichero de este objetivo. En el fichero iv.yaml habrá que añadir la clave configuracion que use como valor el fichero en el que se haya abstraído la configuración de la aplicación.

También se comprobará que se ha configurado .gitignore para que no se añada nunca un fichero de configuración al repo.

Objetivos a alcanzar

Se tendrán que alcanzar los siguientes objetivos

  1. Entender las buenas prácticas en la configuración de aplicaciones en la nube, incluyendo la seguridad.
  2. Integrar los sistemas de registro para permitir observabilidad del comportamiento de un sistema.
  3. Entender cuando y cuánto es necesario registrar la actividad de una aplicación.
  4. Comprender el concepto de inyección de dependencias.

Valoración

El alcanzar este objetivo avanzará, en principio, 10% de la puntuación de este apartado.

A donde ir desde aquí

¡Has llegado muy lejos! Puedes avanzar al penúltimo objetivo de la asignatura.