Documentos de Académico
Documentos de Profesional
Documentos de Cultura
0 (basado en 0 votos)
Antes de comenzar con este artículo, posiblemente os interese saber un poco más sobre el
concepto de alta disponibilidad en aplicaciones A estas alturas, seguro que os habéis dado
cuenta de que Digital Ocean es uno de mis proveedores cloud favoritos, tanto por su precio
como por sus características. Por ello, en esta ocasión, voy a mostraros como crear
aplicaciones con alta disponibilidad, en Digital Ocean, aprovechando una de sus
características más recientes, los load balancers o balanceadores de carga, que nos
permítirán escalar horizontalmente nuestras aplicaciones.
Si estáis interesados en saber más de este proveedor, aquí os dejo una comparativa entre
Digital Ocean y Aws lightsail, donde podréis ver sus características básicas.
Introducción
El objetivo de este artículo será crear la arquitectura cloud necesaria para disponer de
un backend que nos ofrezca alta disponibilidad, es decir, que tengamos un servicio que
podamos consultar rápidamente y con el menor tiempo de inactividad posible. Nuestra
arquitectura de alta disponibilidad se basa en la correcta instalación y configuración de los
siguientes componentes:
1. Backend
2. Droplet de Digital Ocean
3. Pm2
4. Nginx
5. Balanceador de carga de Digital Ocean
6. Cloud firewall de Digital Ocean
Backend
Antes de comenzar, lo primero que tenemos que hacer es construir nuestro backend. Para
este ejemplo desarrollaremos un servicio en nodejs con dos rutas, una que devolverá un
objeto json y otra que nos servirá para comprobar la operatividad del mismo.
});
https://antoniofernandez.com/alta-disponibilidad-balanceadores-carga-digital-ocean/ 1/8
8/1/23, 19:22 Creando aplicaciones con alta disponibilidad en Digital Ocean
res.status(200).end();
});
Droplet
Para hacer funcionar esta aplicación nuestro código deberá ser desplegado en algún tipo de
contenedor. En nuestro caso, al usar Digital Ocean, crearemos un droplet “One-click apps” de
tipo nodejs, con el que dispondremos de un contenedor con ubuntu y todas las dependencias
necesarias para desplegar nuestro backend en nodejs.
Para configurar el tamaño del droplet, seleccionaremos la primera opción con dos cpus, más
adelante, cuando instalemos pm2, entenderéis por qué. Una vez que creemos nuestro droplet
le damos un nombre, por ejemplo, TEST-api y le añadimos una etiqueta a la que también
llamaremos “TEST-api”.
Las “one click apps” de Digital Ocean son contenedores con toda la configuración
necesaria para trabajar con diferentes stacks sin la necesidad de instalar librerías o
https://antoniofernandez.com/alta-disponibilidad-balanceadores-carga-digital-ocean/ 2/8
8/1/23, 19:22 Creando aplicaciones con alta disponibilidad en Digital Ocean
Pm2
Pm2 es un administrador de procesos para aplicaciones nodejs que, entre otras cosas,
dotará a nuestra aplicación de las siguientes características:
Balanceo de carga : Nos permite escalar nuestra aplicación a través de las diferentes CPUs
disponibles.
Auto-reinicio : Permite que nuestra aplicación se reinicie si sucede una caída de la misma o
de la propia máquina.
Para realizar la instalación y configuración de pm2, os dejo mí artículo completo sobre el uso
de pm2 en aplicaciones nodejs
Nginx
Nginx es un servidor web de alto rendimiento que nos permitirá manejar las solicitudes a
nuestro backend de una forma eficiente.
Instalación
Para instalar nginx, simplemente ejecutamos la orden
Configuración
Ahora tendremos que configurar nginx para que atienda nuestras peticiones en el puerto 80
y las redirija a nuestro backend. Para ello, creamos un fichero de configuración de nuestro
sitio, usando como base el fichero default de nginx, ejecutando la siguiente orden, donde
{site} será el nombre de nuestro sitio:
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/{site}
server {
listen 80;
listen [::]:80;
server_name {site};
location / {
proxy_pass {backend};
Aquí, {backend} será la url donde atiende nuestra aplicación, por ejemplo, localhost:3000. Por
otra parte, {site}, es el nombre del servidor que podemos dejar por defecto como localhost, o
utilizar un dominio, si tenemos alguno apuntando a la ip del droplet.
ln -s /etc/nginx/sites-available/{site} /etc/nginx/sites-enabled/
Certificado de seguridad
Aunque realmente esto no es algo que vaya a mejorar directamente la disponibilidad del
servicio, es importante recordar, que por motivos de seguridad, es más que recomendable
cifrar las peticiones a nuestros servicios. En nuestro caso, vamos a utilizar un certificado let’s
encrypt que cubrirá nuestras necesidades de forma gratuita y lo instalaremos de forma
automatizada gracias a la herramienta Certbot.
Instalación
https://antoniofernandez.com/alta-disponibilidad-balanceadores-carga-digital-ocean/ 4/8
8/1/23, 19:22 Creando aplicaciones con alta disponibilidad en Digital Ocean
apt-get update
add-apt-repository ppa:certbot/certbot
apt-get update
Configuración
Cerbot dispone de una característica que nos proveerá de los certificados y la configuración
de nginx de forma automática, con solo ejecutar la siguiente orden:
Con el parámetro -d indicamos el nombre del sitio para el que queremos obtener dicho
certificado. Si necesitamos obtener un certificado válido para varios nombres, lo podemos
hacer de la siguiente forma:
Es importante que, para que todo funcione correctamente, {site} debe coincidir con
el nombre indicado en server_name en la configuración de nuestro nginx.
Auto-renovación
Los paquetes de Cerbot que hemos instalado vienen con un cron job que renovará
automáticamente nuestro certificado de seguridad antes de que llegue a su fecha de
expiración. Podéis comprobar que está funcionando correctamente ejecutando el siguiente
comando:
Load balancer
https://antoniofernandez.com/alta-disponibilidad-balanceadores-carga-digital-ocean/ 5/8
8/1/23, 19:22 Creando aplicaciones con alta disponibilidad en Digital Ocean
Los load balancers de Digital Ocean constituyen una potente característica que nos
permtirán balancear la carga de trabajo entre diferentes droplets, ayudándonos de esta
forma, a escalar nuestra aplicación de manera horizontal.
Creación
Para crear un balanceador de carga, simplemente accedemos a networking –> load balancers
y “create load balancer”. Una vez dentro de la pestaña de configuración, tendremos que
seleccionar la región de nuestro balanceador (la misma que nuestros droplets a balancear),
así como sus reglas de reenvío y configuración avanzada.
Reglas de reenvío
Estas reglas nos permiten definir el comportamiento de nuestro balanceador de carga,
estableciendo una relación entre pares protocolo - puerto de nuestro balanceador y de
nuestros droplets. De esta forma, podemos indicar que, por ejemplo, todas las peticiones
https del balanceador sean redirigidas al puerto 443 de nuestro droplet.
https://antoniofernandez.com/alta-disponibilidad-balanceadores-carga-digital-ocean/ 6/8
8/1/23, 19:22 Creando aplicaciones con alta disponibilidad en Digital Ocean
Configuración avanzada
En esta pestaña tenemos la posibilidad de definir ciertas características avanzadas, como son:
Algoritmo: Podremos elegir entre round robin o least connections. Por normal general,
round robin nos servirá.
Sticky sessions: Podremos habilitar o no esta característica, aunque si nuestro tipo de
aplicación es sessionless, no lo necesitaremos.
Health checks: Apartado muy importante, donde definiremos la url a la que llamaremos
para comprobar que nuestro backend funciona. Gracias a que lo hemos configurado
previamente en nuestro código, aquí introduciremos el path /health.
Redirección a SSL : Redirecciona todo el tráfico http a https. Personalmente, yo siempre lo
marco, nunca está de más 😋.
Gracias a los health checks, nuestro balanceador dejará de enviar tráfico a aquellos
droplets que no estén respondiendo, balanceando toda la carga hacia aquellos que
sí estén funcionando.
Añadir droplets
Una vez que hemos creado y configurado nuestro balanceador de carga, podremos añadir
droplets al mismo. En lugar de añadir droplets por nombre, seleccionaremos la etiqueta
“TEST-api”.
Cloud firewalls
https://antoniofernandez.com/alta-disponibilidad-balanceadores-carga-digital-ocean/ 7/8
8/1/23, 19:22 Creando aplicaciones con alta disponibilidad en Digital Ocean
Los cloud firewalls de Digital Ocean no solo nos ayudan a mejorar la seguridad de nuestra
arquitectura, bloqueando ataques de fuentes no deseadas, sino que además, ayudan a
mejorar la disponibilidad de nuestra aplicación, ya que este tipo de firewall bloquea las
peticiones antes de que lleguen a nuestras máquinas. Si queréis saber más, os recomiendo
que leáis mi artículo sobre el funcionamiento de los cloud firewalls de Digital Ocean. En este
caso crearemos uno, configurando las reglas de entrada para que **solo permita conexiones
http y https **. Una vez creado, cuando vayamos a asignarle recursos, seleccionaremos la
etiqueta “TEST-api”.
En el caso de que necesitemos añadir más droplets al balanceador, podemos crear uno nuevo
a partir de una snapshot del anterior. De esta manera, dispondremos de un droplet, con una
configuración exactamente igual al de la snapshot, y con solo aplicarle la etiqueta “TEST-api”,
le habremos asignado un firewall y añadido a nuestro balanceador de carga, todo esto, de
forma automática.
Si hemos seguido los pasos correctamente, ya tendremos nuestra aplicación configurada con
alta disponibilidad. De todos modos, podéis consultarme vuestras dudas en la sección de
comentarios. Si os ha gustado este artículo, compartidlo en vuestras redes 😉
https://antoniofernandez.com/alta-disponibilidad-balanceadores-carga-digital-ocean/ 8/8