Tabla de Contenidos
Creación de una aplicación web de ejemplo (Docker avanzado)
Contenido perteneciente al curso Docker avanzado.
Los 12 factores
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
La metodología “twelve-factor” puede ser aplicada a aplicaciones escritas en cualquier lenguaje de programación, y cualquier combinación de ‘backing services’ (bases de datos, colas, memoria cache, etc)
Apps Monolíticas vs Microservicios
Las aplicaciones monolíticas agrupan la funcionalidad y sus servicios en una base de código única
- Fáciles de desarrollar
- Fáciles de desplegar
- Sencillo y rápido ejecutarlas
- Muy difícil o costoso de escalar
- El mantenimiento y las actualizaciones pueden ser complejas y derivar en problemas funcionales
Los microservicios son una manera de construir aplicaciones y servicios digitales
Una arquitectura de microservicios busca desacoplar o independizar los componentes individuales de una aplicación, para que cada componente sea una aplicación en sí misma
Los microservicios se conectan entre sí a través de API’s, permitiendo que diferentes equipos trabajen al mismo tiempo en diferentes partes de una aplicación. O incluso en diferentes lenguajes
Distintos componentes del software pueden ser desarrollados y desplegados de forma independiente
Los microservicios presentan grandes ventajas:
- La escalabilidad del sistema es más sencilla dado que se pueden escalar cada uno de los microservicios por separado
- Se puede hacer un uso más optimo de los recursos de la máquina
Pero también presentan grandes retos tecnológicos y complejidad a la hora de implementarlos:
- Al tener un mayor número de componentes su operación y diseño es más complejo
- Diseñar y desarrollar la infraestructura requiere mas tiempo y recursos
- Monitorización de servicios distribuidos (KPIs de aplicación, redes, logs, transaccionalidad)
La arquitectura monolítica sigue siendo la norma para la mayor parte de las aplicaciones, aunque no es lo mejor para sistemas complejos
La arquitectura de microservicios nació como una reacción de los desarrolladores ante la imposibilidad de continuar escalando aplicaciones
Transformar una aplicación monolítica en una orientada a microservicios es un proceso complejo y costoso que ha de hacerse en pequeños pasos
El primer paso sería tratar de identificar partes de la lógica de negocio que se puedan aislar del resto debido a su bajo acoplamiento
El siguiente paso podría ser identificar las partes del código que consuman más cantidad de recursos y que aparenten poder ser aislados
Desarrollo Web APP Java
Para desarrollar una aplicación web en JAVA solemos necesitar:
- Un IDE como Netbeans o Eclipse
- Una herramienta de gestión de dependencias, por ejemplo MAVEN
- Un servidor de aplicaciones como Tomcat, Glassfish, …
Podemos recurrir a diferentes tecnologías:
- JSP y Servlets
- Java Server Faces
- Spring Boot
Configurando el entorno
En nuestro caso vamos a trabajar con Netbeans, Maven, Spring Boot y Docker
Para establecer el entorno podemos usar el siguiente manual: https://jaxenter.com/playing-with-spring-boot-docker-in-netbeans-ide-127672.html
Caso práctico
Consideremos el supuesto en el que queremos desarrollar una aplicación para satisfacer las necesidades de la empresa XYZ. Esta empresa cuenta con más de 10.000 empleados repartidos en varias sedes, su catálogo de productos cuenta con más 100.000 referencias y maneja ventas a clientes en todo el mundo
Esta aplicación debe poder gestionar:
- El directorio de empleados
- El directorio de productos
- El directorio de clientes
- Las ordenes de pedidos de los clientes
- La facturación de los clientes
¿Cómo deberíamos afrontar el diseño de esta aplicación?
Trata de hacer una aproximación del desarrollo de la funcionalidad de listado de empleados siguiendo la siguiente arquitectura
Web App HTML5 → HR Backing Service → HR BBDD
