Aplicaciones en tiempo real en una arquitectura orientada a microservicios

Arquitectura orientada a microservicios

La idea detrás de una aplicación orientada a microservicios es evitar aquellas aplicaciones monolíticas, desplegadas en un servidor de aplicaciones. Las mismas tienden a crecer en tamaño y volverse inmanejables, a su vez de requerir cada vez mayor hardware para cumplir con sus tareas. Es atacar el concepto de mega servidor de aplicaciones donde se despliegan aplicaciones, en favor de que cada aplicación instancie su propio servidor si lo necesita.
La arquitectura orientada a microservicios permite crear componentes con un propósito específico y utilizar un message broker o event bus para interconectarlos. De esta forma podemos descomponer nuestras super aplicaciones en componentes más específicos, permitiéndolos escalar en numero de instancias a aquellos que lo necesiten, evitando la compartición de recursos.

sketch

Como hemos visto en post anteriores Vert.x es una plataforma para el desarrollo de aplicaciones sobre la JVM. Sus principales puntos a destacar son:

Vert.x es escalable – Vert.x es guiado por eventos y no bloqueante, esto significa que tu aplicación puede manejar mucha concurrencia usando un numero pequeño de hilos del kernel.

Vert.x es políglota – Puedes usar Java, Javascript, Groovy, Ruby and Ceylon.

Vert.x es liviano – Vert.x core pesa alrededor de 650kB.

Vert.x es rápido – Algunos benchmarks.

Vert.x no es un servidor de aplicaciones – No hay una instancia monolítica de Vert.x donde se despliegan aplicaciones. Corrés las aplicaciones donde quieras.

Vert.x es modular – Cuando necesitas mas bits, agregas los bits que necesitas y nada más.

Vert.x es simple pero no simplista – Vert.x permite crear aplicaciones robustas de una forma simple.

Vert.x es una opción ideal para crear microservicios.

Aplicaciones en tiempo real

Son aquellas aplicaciones que requieren constante actualización de información en tiempo real (o casi tiempo real). Se basan en el concepto de server push que, a diferencia de las tecnologías client pull, donde el cliente constantemente realiza peticiones para obtener actualizaciones, es el servidor el que publica cambios hacia los clientes. Existen diversas técnicas (websockets, long polling, etc) y tecnologías para lograr server side push las cuales dependen de las capacidades de los clientes (browsers) como así también de los servidores de aplicaciones. Hoy en día existen diversos frameworks que nos abstraen del trabajo de detectar e implementar los fallbacks en caso de que alguno de los componentes no soporte alguna de las tecnologías, simulando una conexión full duplex independientemente del protocolo utilizado.

Meteor es una plataforma para crear aplicaciones web en tiempo real construida sobre Node.js. Es un full stack cliente/servidor que posee una copia propia de la base de datos de la aplicación en cada ambiente (cliente y servidor) y se encarga que ambas estén sincronizadas. Permite abstraer al desarrollador de problemas inherentes a la implementación de aplicaciones en tiempo real, como puede ser la latencia entre la ejecución de una llamada desde el cliente al servidor.

Debido a que Meteor utiliza Node.js, por ende se ejecuta JavaScript en el cliente y en el servidor, permitiendo a Meteor ser capaz de compartir código entre ambos entornos. Como resultado obtenemos una plataforma muy potente, sencilla, que nos abstrae de las molestias y dificultades que encontramos habitualmente en el desarrollo de aplicaciones web en tiempo real.

Obteniendo lo mejor de ambos mundos

Como destacamos en la sección anterior Meteor es un muy buen candidato para la implementación de aplicaciones en tiempo real, permite actualizaciones en el cliente y servidor de forma casi instantánea, utilizando mecanismos/patrones publish and subscribe, pero a la hora de implementar un sistema orientado a microservicios no se ve claro como puede escalar, ser flexible en la instanciación de algunos componentes, etc. Es más, muchos de nuestros servicios pueden ser componentes que procesan y retornan datos sin interfaz de usuario, solamente consumiendo y produciendo mensajes. Es por ello que aquí Vert.x sale al rescate y nos provee de todos los mecanismos y herramientas necesarias para la creación de una arquitectura orientada a microservicios. Para lograr una integración entre ambas plataformas podemos instalar y utilizar el paquete jmusacchio:vertxbus del repositorio de Meteor. Dicho paquete permite utilizar el event bus de Vert.x para poder enviar y recibir mensajes desde una aplicación Meteor (cliente o servidor) hacia aplicaciones/componentes implementados con Vert.x. En la wiki del paquete se ejemplifica la integración y posibles usos.

 

Tags

Access top talent now!

Related

Get in Touch