Cómo Cordage planea manejar +1,000,000 de usuarios
¿Qué es Cordage?
Cordage es un producto de software que estamos desarrollando en icorp para habilitar e incrementar la excelencia organizacional de nuestros clientes.
Cordage cuenta con módulos para:
- Elaboración y edición de documentos online
- Control documental
- Control de cambios
- Acciones correctivas
- Tareas y reportes
Además es un marketplace con la capacidad para que desarrolladores externos puedan crear más módulos. Todo esto construido con las tecnologías, metodologías de diseño y desarrollo de punteras, además con una arquitectura que soporta todo este ecosistema de servicios en la nube.
qdoc el predecesor de Cordage
qdoc ha ofrecido soluciones a clientes desde hace más de 10 años, constantemente mejorando y lanzando nuevas versiones durante este tiempo.
Este antecedente permite implementar el resultado de todo el proceso de actualización del software, en la primera versión de Cordage, garantizando que este nuevo software satisfaga las necesidades y expectativas del cliente.
¡Tendremos un crecimiento de usuarios acelerado!
También lee: ¿Cómo un software puede ayudar a tu sistema de gestión documental?
Arquitectura y escalabilidad
Uno de los atributos de calidad de un software es su escalabilidad. Esto mide la capacidad del software de soportar mayores cargas de trabajo. O sea que entre más usuarios existan usándolo, mayor será la carga.
Para Cordage este atributo es un requerimiento crítico, precisa una arquitectura de alta escalabilidad. Significa que debemos estar preparados para poder ofrecer el servicio a un considerable número de usuarios iniciales y al creciente número de clientes nuevos que podamos tener.
Para conceptualizar la arquitectura que se implementa en Cordage, veamos la evolución de la arquitectura de un software que requiere una escalabilidad desde uno hasta un millón de usuarios.
1 Usuario
Estos sistemas suelen ser muy sencillos, en general comienzan con una estructura básica:
Y al ser tan pocos usuarios se opta por tenerlos en una sola máquina, ya que perfectamente puede encargarse de todas las tareas que podrían solicitar los usuarios.
El escalamiento en estos casos es muy simple, se trata del escalamiento vertical. Esto implica crecer la potencia del hardware de la máquina, incrementando el CPU, RAM y/o disco duro.
10 Usuarios
Existe un posible problema al tener solo una máquina y este es la redundancia. Si esa máquina se cae, ¡se cae todo el sistema con ella!
Ya comienzan a aparecer más requerimientos de escalabilidad, una técnica para solucionar este problema es separar el servidor de datos en una máquina distinta, esto da la capacidad de escalarlas independientemente.
100 Usuarios
Cuando comienza a crecer el software comúnmente aparecen requerimientos para nuevas plataformas donde consumirse. Por ejemplo, una aplicación móvil. Ya conviene tener también el servidor de lógica separado de la aplicación Web para poder agregar más puntos de consumo sin tener que modificar la aplicación.
1,000 Usuarios
El escalamiento vertical tiene un problema importante, el límite. Llegará un punto donde la máquina ya tendrá el procesador más potente, la RAM más rápida o el máximo de discos duros conectados con la máxima capacidad.
Para resolver este problema recurrimos al escalamiento horizontal. Consiste en agregar más máquinas o nodos para repartir la carga de trabajo.
Cuando ya tenemos múltiples nodos para procesar las peticiones de los usuarios, se necesitas un balanceador de carga. Este es un nodo extra donde llegan todas las peticiones y este se encarga de repartirlas inteligentemente a los diferentes nodos réplicas.
También se empieza a volver muy laborioso desplegar actualizaciones en los servidores, por la cantidad que existe de ellos. Entonces viene en auxilio la integración y despliegue continuo (CI/CD), que no es más que la automatización de este proceso, cosa que vuelve sustancialmente más rápidos y sencillos los despliegues de actualizaciones. Tan fácil como subir código al repositorio.
10,000 Usuarios
Otra técnica para eficientar los recursos, es el caché, esto puede aliviar la carga de trabajo para los servidores de datos, se basa en una idea sencilla “Los datos que te pidieron, probablemente te los vuelvan a pedir”.
El caché es una memoria rápida, pequeña y de corto plazo que se encuentra entre el servidor de lógica y el servidor de datos. Si los datos que pide el servidor de lógica los tiene el caché se los entrega y evita una consulta más lenta en la fuente original.
100,000 Usuarios
¡Wow! Ya tenemos un software bastante maduro con una buena cantidad de usuarios, pero existen muchos más que también pueden consumir nuestros servicios.
Para aliviar todavía más el servidor de datos también se pueden hacer réplicas de sólo lectura de ellos, así todas las consultas podrán ser repartidas aliviando cargas.
+1,000,000 Usuarios
Esta cantidad de usuarios ya exige técnicas un poco más avanzadas. Y hay una buena cantidad de ellas, de todo tipo y con fines determinados.
Los microservicios consisten en dividir la lógica de los servidores en contextos que se encarguen de ciertas tareas, así podremos escalar independientemente cada contexto de acuerdo a su carga específica.
De igual manera, se puede seccionar el servidor de datos en varias máquinas (que es diferente a replicarlo) y existen varios acercamientos. Por ejemplo, el sharding que consta de dividir los registros en varias bases de datos, o la técnica de federation que divide las tablas de las bases de datos por funcionalidad en diferentes máquinas.
Otra alternativa es considerar usar bases de datos NoSQL o protocolos CQRS que son basados en eventos. También están las colas de mensajería que son protocolos de comunicación con un esquema de suscriptores y productores de mensajes.
Todas estas tecnologías están diseñadas para soportar cargas monstruosas de trabajo y datos del orden de terabytes de una forma eficiente.
También lee: Software de gestión de calidad en la Nube: ¿por qué es importante para las empresas?
Cloud Computing para arquitecturas complejas
Anteriormente el tema de la escalabilidad era más complejo ya que se requería hacer la configuración de estas máquinas que soportan la arquitectura de manera manual. Es un lujo que pocos se pueden permitir.
Ahora, cualquiera tiene acceso a las tecnologías que permiten este tipo de escalamiento, gracias al cloud computing que ofrece todo tipo de herramientas y solo basta con configurar parámetros para incrementar el hardware en las máquinas y crear:
- Nuevos equipos
- Servicios de datos
- Caché
- Balanceadores de carga
- Operaciones serverless
- Etc.
Este es uno de los beneficios que trajo el cloud computing consigo, la posibilidad de armar complejas arquitecturas de software a un bajo costo.
Los límites una vez más se han superado y es algo que aprovechamos para hacer de Cordage una realidad.
Fuentes: Amazon Web Services, Alex Pareto, High Scalability