Saas: La metodología de 12 factores explicada
Tags: saas, serverless, devops, cloud
Published: 2021-06-21 00:13:26

La metodología de doce-factores es una metodología para crear aplicaciones de software como servicio (Saas). Consta de  algunas "mejores prácticas" diseñadas para permitir que las aplicaciones web se creen con portabilidad y resiliencia.
![12-factores_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8uyn56ay1tf8dsc5o7ej.jpg)
Para comprender esta metodología podemos dividir los doce factores en 3 componentes clave:
![12-factores-3-componentes](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mop1e47n55jgyzp5ugzm.png)
A continuación, veremos las mejores prácticas que se debe seguir en cada factor para que nuestra aplicación cumpla con esta metodología.
## Factores de código:
### Factor 1 - Código base:
![codebase_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/88bat7esyojurnh3a8eu.png)
- Se debe hacer seguimiento a los cambios en el código desden un sistema de control de versiones (VCS) como Github, BitBucket, etc.
- Relación uno a uno entre el código base y la aplicación.
- Puede haber múltiples implementaciones de la aplicación.
- Pueden haber diferentes versiones del código base en cada implementación.
   
### Factor 5: Compila, publica y ejecuta:
![build_release_run_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nqdkfa5ujzqt3hlctzj8.png)
- Build (Compilación): transforma un código base en una unidad ejecutable llamada build.
- Release (Lanzamiento): Combina el build con la configuración para que esté listo para ejecutarse.
- Ejecución: ejecuta la aplicación.

### Factor 10 - Paridad Dev/Prod:
![dev_prod_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4pcf5i767q74tvl8alwp.png)
- Minimiza las diferencias entre los entornos de implementación y producción.
- Los servicios de back-end deben ser los mismos en todos los entornos (dev/prod).

## Factores de implementación:

### Factor 2 - Dependencias:
![dependencia_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nwo8742ttq3rbi120am5.jpeg)
- Ten en cuenta que una aplicación solo es confiable como su dependencia menos confiable.
- Asegúrate de que el código declare explícitamente cualquier dependencia.
  
### Factor 3 - Configuración:
![config_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8tivn8wk9v1yvqarq47c.png)
- La configuración contiene todo lo que varía entre las implementaciones, como las credenciales y las ubicaciones de los servicios de respaldo.
- Las configuraciones deben mantenerse separadas del código
- Almacena la configuración en variables de entorno.

### Factor 4 - Servicios de back-end:
![back_end_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r94g7io1nlu15tdsocq7.png)
- Las aplicaciones no deben distinguir entre servicios de back-end locales y de terceros.
- Se debe acceder a todos los servicios mediante URLs y credenciales para que puedan intercambiarse sin cambiar el código.

### Factor 6 - Procesos:
![process_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7hcklo53ws070o5i0srs.png)
- "Stateless" y no comparten nada.
- Los servicios de respaldo almacenan datos persistentes ya que la memoria y los sistemas de archivos no se comparten entre los procesos.
- Los datos se almacenan de forma centralizada.

### Factor 7 - Enlace a través de puertos:
![ports_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/67qg3oel4zzh9bxw1980.png)
- Exportación de servicios designando un puerto. HTTP y otros servicios se exportan de esta manera.
- Para vincular un puerto normalmente debe declarar una biblioteca de servidor web.
- Las aplicaciones pueden ser servicios que sean llamadas por otras aplicaciones a través de la URL y el puerto.

### Factor 9 - Desechabilidad:
![disposability_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/po4etp9xuwa9543758a3.png)
- Las aplicaciones deben tener un tiempo de inicio de proceso mínimo y un cierre o terminación de la applicación eficiente.
- Implementar código y configurar cambios rápidamente.
- Escale aplicaciones fácilmente.
 
### Factor 11 - Registros (logs):
![logs_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b7y490pmgjd6yljdfnyx.png)
- Las aplicaciones no deben preocuparse por almacenar registros (logs).
- Las aplicaciones deben tener registros de tendencias en forma de un flujo de eventos escrito en stdout.
- El entorno de ejecución captura el flujo de todas las aplicaciones, agrega los registros y enruta los registros a su destino.

## Factores operativos:

### Factor 8 - Simultaneidad:
![concurrency_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4xlapzhnskergfq9tqs7.png)
- Se pueden utilizar procesos concurrentes para escalar la aplicación.
- Los procesos sin estado se pueden activar sin crear dependencias en otros procesos.

## Factor 12 - Procesos de administración:
![admin_process_img](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/goltagu96akqskkt2uzc.png)
- Habilite procesos únicos de administración de aplicaciones, como la migración de bases de datos.
- Ejecutar contra una versión con la misma configuración del código base.
- Están incluidos en el código de la aplicación.

###Fuentes:
- El sitio web de la Metodología de los Doce Factores: [12factor] (https://12factor.net/)