Tabla de Contenidos
11. Introducción al despliegue
Desplegar
Para desplegar hay muchas cosas a tener en cuenta.
Desafíos y tareas para desplegar
- Generación de la aplicación a instalar
- Obtener el código fuente
- Compilar el código fuente
- Probar la aplicación
- Analizar la calidad del código
- Múltiples programas a instalar
- Sistema Operativo
- Servidor Web
- Base de datos
- La aplicación
- Servidor de envío de correos
- Etc.
- Hosts
- La base de datos puede estar en un Hosts y el servidor web en otro Hosts, etc.
- Los Host pueden ser maquinas virtuales o máquinas físicas estando cada una de ellas en proveedores distintos (Amazon AWS, Microsoft Azure, Google Cloud, etc).
- Administración
- Creación de copias de seguridad
- Logs
- Seguridad: Recuperación en caso de perdida de datos por algún fallo
- Rendimiento: Permitir que la aplicación siga funcionando aunque haya un pico de peticiones
- Añadir nuevas máquinas si hay un pico de peticiones y quitarlas cuando ya no las hay tantas peticiones
- Balanceo de carga entre todos los servidores de la aplicación
- Monitorización del rendimiento
- Alertas de bajo rendimiento
- Fiabilidad: Permitir que la aplicación siga funcionando aunque falle algún Host.
- Microservicios: Una única aplicación se divide en pequeñas micro-aplicaciones, llamadas microservicios con lo que se multiplican todas las complicaciones anteriores por el número de microservicios que tengamos
Herramientas relacionadas con el despliegue
Herramientas que vamos a usar en clase:
- Script de Bash
- Git
- Docker
- Git Actions
- NodeJS
Otras herramientas y Servicios:
- Kubernetes
- Vagrant
- AWS
- Ansible
- Jenkins
- etc. Hay muchísimas herramientas distintas y servicios que ayudan al despliegue de aplicaciones.
Ejemplos de Tipos de Despliegue
- Todo el código está en un único servidor junto con el servidor Web y la base de datos.
- Todo el código está en un único servidor y por otro lado el servidor Web y la base de datos están en un mismo Host
- Todo el código está en un único servidor, el servidor Web en un Host y la base de datos está en otro Host
- Todo el código está en un único servidor, el servidor Web en otro Host , la base de datos está en otro Host y la copias de seguridad de la base de datos están en otro Host
- Todo el código está en un único servidor, el servidor Web está distribuido en 4 Hosts, hace falta otro host adicional para el balanceo de carga , la base de datos está en otro Host y la copias de seguridad en otro Host.
- El proyecto está dividido en 3 microservicios, estando cada uno de ellos en un host distinto pero el código está unificado en un único servidor. El primer microservicio tiene su propia base de datos en otro host y obviamente otro host con el servidor web y lo mismo el segundo microservicio. El último microservicio necesita de otro Host con el servidor web y un servidor de correo para enviar notificaciones pero no necesita base de datos.
- Como en el caso anterior pero se añade que los log de todos los servidores web y de las bases de datos, están centralizados en un Host distinto.
- Como en el caso anterior pero se añade otro servidor que es el que cuando se quiere cambiar el programa , compila el código y lo instala en los Hosts que sea necesario (El código está en el mismo servidor que en el que compila).
- Como en el caso anterior pero se añade que el código fuente está en otro servidor.
- Como en el caso anterior pero uno de los microservicios tiene una base de datos tolerante a fallos, por lo que hay 2 Host para la base de datos, de forma que los datos están sincronizados entre ellos y un balanceador de carga si detecta un fallo en una base de datos, redirige las peticiones a la otra base de datos.
En el siguiente diagrama se vería el ejemplo donde , el servidor web, la base de datos y el servidor de copias de seguridad son servidores distintos:
Conceptos
- VPS (Virtual Private Server): Una máquina virtual que alquilas a una empresa.
- Empresa de Hosting: Empresa que alquila los Host sean tanto un VPSs como una máquina real
- Balanceador de carga: Software que le llega una petición y la redirige a otro Host de entre varios para no sobrecargar ningún Host o evitar enviarlo a un host que no funciona
- Escalabilidad: Diseñar la aplicación de forma que se alquilen o se desalquilen Hosts (VPS o máquinas reales) en función de la carga del sistema
- Tolerancia a fallos: Diseñar la aplicación de forma que aunque un host falle, la aplicación siga funcionando
- IAAS (Infraestructura como servicio) : Si la empresa de Hosting solo se ofrece el Host y nosotros nos tenemos que instalar todo el software, incluyendo el sistema operativo y administrarlo todo.
- PAAS (Plataforma como servicio): Si la empresa de Hosting nos ofrece el Host pero tambien software generico ya instalado como el Sistema Operativo, Servidor Web, Servidor de Correo, Balanceador de Carga , etc. En este caso nosotros solo debemos instalar el código específico de nuestra aplicación.En este caso aunque nos ofrecen un host ya que en algún sitio debe estar la app, realmente nos están ofreciendo el servidor web donde instalar nuestra app. En el caso de PAAS, no tenemos que administrar nosotros ni el Sistema Operativo ni el servidor.
- SAAS (Software como Servicio): Como desarrolladores nunca usamos un SASS ya que la empresa de hosting ya ofrece hasta la aplicación instalada. Un ejemplo sería Google con "Google Docs" , Microsoft con su "MS Ofice 365", DropBox , etc. que ya ofrecen todo para el usuario final.
Ejemplo de PAAS en Java:
IAAS vs PAAS
El IAAS es mas versátil ya que solo nos ofrecen el ordenador y nosotros nos montamos todo como queremos. El problema es que es mas complicado todo de hacer y tenemos que administrarlo todo: Sistema operativo, servidor web y aplicación
Por otro lado en el PAAS, solo nos tenemos que preocupar de nuestra aplicación lo que hace que sea mas sencillo. El problema es que ya no hay tanta versatilidad, ya que debemos ceñirnos al entorno que nos ofrece la empresa
Tareas de Automatización del despliegue
Veamos ahora un ejemplo de como desplegar una aplicación web en Java con SASS , TypeScript y que se despliega en Apache.
- Build (en maven se llama package)
- Copiar el código de "src" en "target"
- Compilar el código Java
- Transpilar el código SASS en CSS dentro de la carpeta "target"
- Transpilar el código TypeScript en JavaScript dentro de la carpeta "target"
- Borrar el código SASS de la carpeta "target"
- Borrar el código TypeScript de la carpeta "target"
- Generar el
.jar
- Desplegar
- Copiar el
.jarde la carpeta "target" al servidor donde se va a ejecutar o copiar el.waren el Tomcat
- Ejecutar
- Ejecutar el
.jar
Para hacer todas esta tareas vamos a usar Scripts del sistema operativo , por ejemplo en Linux se usará "Bash" y los Script de npm que vamos a ver mas adelante.
Transformar SASS en CSS
- Instalar SASS
npm install sass -g
- Transpilar SASS en CSS
sass ./scss/main.scss ./css/main.css
Transformar TypeScript en JavaScript
- Instalar TypeScript
npm install typescript -g
- Transpilar TypeScript en JavaScript
tsc --outDir ./js ./ts/*.ts
Ejercicios
Ejercicio 1
Del apartado "Ejemplos de Tipos de Despliegue" de este tema, haz un diagrama del esquema de Hosts que se usan y que software se instalaría en cada uno de ellos. Pero solo para los ejemplos 2, 5 y 10
Ejercicio 2
Imagina un nuevo ejemplo de despliegue que tenga al menos 4 servidores. Deberás explicarlo y hacer su esquema.
Ejercicio 3
Busca por internet el nombre de 2 servidores web que permitan aplicaciones en Java y de 2 servidores web que permitan aplicaciones en PHP
Ejercicio 4
Busca por internet el nombre de 2 balanceadores de carga y indica cuando usarías cada uno de ellos.
Ejercicio 5
Busca por internet el nombre de dos empresas que ofrezcan servicios de tipo IAAS
Ejercicio 6
Busca por internet el nombre de dos empresas que ofrezcan servicios de tipo PAAS
Ejercicio 7
Busca por internet el nombre de dos empresas que ofrezcan servicios de tipo SAAS
Ejercicio 8
Busca dos empresas de Hosting y comprara el precio de sus VPS, suponiendo características parecidas. ¿Cual elegirías?
Ejercicio 9
Busca por internet una empresa con su precio y características para poder tener:
- Aplicación en Java con servicio IAAS
- Aplicación en Java con servicio PAAS
- Aplicación en PHP con servicio IAAS
- Aplicación en PHP con servicio PAAS


