Escalabilidad

La escalabilidad en entornos informáticos como lo son las redes o los sistemas es la propiedad de reaccionar y adaptarse a diferentes escenarios sin perder calidad en los servicios ofrecidos. Es decir, cuando nuestros sistemas son escalables somos libres de implementar nuevos módulos con nuevas funcionalidades de una manera rápida y fluida sin la necesidad de tener que re programar cientos de lineas de código o cambiar la arquitectura de nuestro sistema.

Comunmente cuando se tienen sistemas de información muy grandes en donde la concurrencia esta presente en todo momento las peticiones se tratan como van llegando al server sin llevar el orden adecuado, dando como resultado que se realice cierta actividad 2 veces.

Una solución a este tipo de problemas es implementar un sistema de colas, encargado de gestionar las peticiones hacia el server de una manera ordenada distribuyendolas a workers encargados de llevar acabo dicha petición. Cada worker puede estar destinado para llevar a cabo diferentes o las mismas actividades y se pueden tener tantos workers como sea necesario.

Implementando un sistema con estas característica nos aseguramos de manejar de una manera óptima los problemas de concurrencia ya que todas las peticiones son secuenciales siempre una detrás de otra. Este tipo de arquitectura permite crear workers en el mismo o diferentes servers agilizando el proceso de peticiones evitando la sobrecarga de los mismos.

¿Que necesitamos para implementar este tipo de arquitectura?

La respuesta a esto es AMQP (Advanced Message Queuing Protocol) ya que es un protocolo de comunicación por mensajes encargado de gestionar peticiones y rutearlas a workers específicos. Existen distribuciones para implementar este protocolo como lo es RabbitMQ que cuenta con las siguientes características:

  • Confiabilidad
  • Enrutamiento flexible
  • Clustering
  • Colas
  • Muchos clientes
  • Rastreo
  • Plugins