JS, Node.js, Frontend, Backend, Firebase, Express, Patrones, HTML5_APIs, Asincronía, Websockets, Testing
En estos tiempos, el software se está distribuyendo como un servicio: se le denomina web apps, o software as a service (SaaS). “The twelve-factor app” es una metodología para construir aplicaciones SaaS que:
- Usan formatos declarativos para la automatización de la configuración, para minimizar el tiempo y el coste que supone que nuevos desarrolladores se unan al proyecto;
- Tienen un contrato claro con el sistema operativo sobre el que trabajan, ofreciendo la máxima portabilidad entre los diferentes entornos de ejecución;
- Son apropiadas para desplegarse en modernas plataformas en la nube, obviando la necesidad de servidores y administración de sistemas;
- Minimizan las diferencias entre los entornos de desarrollo y producción, posibilitando un despliegue continuo para conseguir la máxima agilidad;
- Y pueden escalar sin cambios significativos para las herramientas, la arquitectura o las prácticas de desarrollo.
The Twelve-Factor App
- Código base (Codebase) Un código base sobre el que hacer el control de versiones y multiples despliegues
- Dependencias Declarar y aislar explícitamente las dependencias
- Configuraciones Guardar la configuración en el entorno
- Backing services Tratar a los “backing services” como recursos conectables
- Construir, desplegar, ejecutar Separar completamente la etapa de construcción de la etapa de ejecución
- Procesos Ejecutar la aplicación como uno o más procesos sin estado
- Asignación de puertos Publicar servicios mediante asignación de puertos
- Concurrencia Escalar mediante el modelo de procesos
- Desechabilidad Hacer el sistema más robusto intentando conseguir inicios rápidos y finalizaciones seguras
- Paridad en desarrollo y producción Mantener desarrollo, preproducción y producción tan parecidos como sea posible
- Historiales Tratar los historiales como una transmisión de eventos
- Administración de procesos Ejecutar las tareas de gestión/administración como procesos que solo se ejecutan una vez
Problemas
- Mucho código que gestionar
- Si el proyecto crece todo acaba desbordandose
- Si se cae algo... se cae todo completamente
- Escalar la aplicacion se hace en bloque aunque solo una parte especifica necesite más recursos
- Los precios de las maquinas dedicadas crecen junto al producto
- Las migraciones solo pueden hacerse en su totalidad
- Seguridad, infraestrcutura y todo lo demás es tambié nuestra responsabildiad
- No se puede escalar sin operaciones manuales, el sistema no es flexible
Ventajas
- Es facil desarrollar
- Todo puede quedarse en casa
- Menos dependencia de terceros
Recursos
- De Monolito a microservicios
- Arquitectura de microservicios vs arquitectura monolítica
- ¿Módulos o microservicios?
Problemas
- El testing es complejo
- El exceso de segmentación complica la consistencia de datos
- El desarrollador asume problemas propios de SysAdmins
- La orquestación de servicios es un reto enorme
- Desmontar monolitos es un cuello de botella caro y complejo
- La planificación de nuevas funcionalides puede demorarse sin una arquitectura clara
- Versionar es dificil
Ventajas
- Depliegue y desarrollo independiente
- Los equipos pequeños pueden sacar servicios solos
- Multiparadigma y multilenguaje, al final todo es independiente
- Integración y despliegue muy automatizable con contenedores
- Migraciones por funcionalidad
- Funcionamiento modular, las caidas de servicio son parciales
- Facil de escalar
- Facil de integrarse con otros sistemas
Recursos
- La Pastilla Roja | Microservicios
- Wikipedia | Arquitectura de microservicios
- ¿Qué es eso de los microservicios?
- En mi local funciona | Arquitectura de microservicios
- RedHat | ¿Qué son los microservicios?
- La muerte de la locura de los microservicios en 2018
- Creando una arquitectura de microservicios en node.js y Kubernetes por Paul Goldbaum
- jdonsan | Recursos para aprender microservicios con NodeJS
- Microservicios, en qué lío me he metido - Ernesto Hernández y Miguel Ortega en T3chFest 2017
- How to build a NodeJS cinema microservice and deploy it with docker
- 5 easy steps to create your REST microservice in NodeJS
- Build your first Node.js microservice
- The Best Node.js & Microservices Articles we Ever Wrote
- Github | mfornos/awesome-microservices
- Awesome Node.js microservices in the cloud for (almost) free - Gojko Adzic
- Reddit - The Death of Microservice Madness
- Hacker News - The Death of Microservice Madness
- Martin Fowler | Bounded Context
- Martin Fowler | Microservices
- 30 questions to ask a serverless fanboy
Problemas
- Posible vendorlocking si no controlas la abstracción
- Muy nuevo, faltan expertos y herramientas
- La monitorización es un reto significativo
- El entorno local puede ser complicado de crear
- El ecosistema está muy tierno
- Se requiere de una gran planificación y arquitectura para evitar que se te vaya de las manos.
Ventajas
- No te encargas de nada en plataformas (seguridad, puertos, maquinas, actualziaciones, parches...)
- Escala horizontalmente (adios clusters, balanceo, etc...)
- Pagas por lo que utilizas
- Tu provedor te ofrece una capa muuuy extensa de servicios que se acoplan de lujo
Recursos
- serverless Framework
- Qué es eso de serverless?
- Martin Fowler | Serverless Architectures
- Server-less architecture in the wild - Nikhila Ravi
- BBVA Serverless
- Amazon | Creación de aplicaciones con arquitecturas sin servidor
- Amazon | Sin servidor
- Wikipedia | Serverless computing
- Github | pmuens/awesome-serverless
- A List of Serverless Frameworks
- Github | GalacticFog/awesome-serverless
- Github | anaibol/awesome-serverless
Recursos