11. Introducción al despliegue
Desplegar
Desplegar: Instalar la aplicación web que hemos desarrollado (
HTML,
CSS,JS,Código Servidor, etc) en un servidor Web.
Para desplegar hay muchas cosas a tener en cuenta.
¿Cómo distingues al loro propiedad de un desarrollador de software de los loros cuyos dueños son de otras profesiones? Es el que repite sin parar
«En mi equipo funciona bien».
Desafíos y tareas para desplegar
Generación de la aplicación a instalar
Múltiples programas a instalar
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
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:
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.
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.
npm install sass -g
sass ./scss/main.scss ./css/main.css
npm install typescript -g
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