Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microservices con
WSO2
Julio Cejas
Arquitecto Chakray
Introducción 3
Que es un Microservice 5
Microservices en WSO2 8
Recomendaciones Generales 18
En esencia 19
Sobr el autor 20
www.chakray.com 2
Introducción
www.chakray.com 3
Una pequeña historia
www.chakray.com 4
Que es un Microservice
En esencia, un microservice es un artefacto de software que está diseñado para evitar que
dependa de un modelo de relaciones extenso y pesado; el cual debe cumplir con una fun-
ción de negocio concreta; además de contar con una implementación simple y pensada en
la integración con otros. Su objetivo es propiciar el desarrollo de componentes individuales
que sean capaces de evolucionar y escalar de forma independiente. En este enfoque, los
contratos se adaptan a las necesidades del negocio y no a un modelo de dominio y/o una
estructura de datos grande y relacional. Su enfoque es evitar la creación de soluciones frá-
giles y complejas.
En el diagrama anterior se puede observar como una aplicación monolítica puede ser di-
vidida en servicios independientes que cumplen con una función concreta de negocio. A
continuación se enumeran las principales características de microservices:
01 Los servicios tiene una responsabilidad micro con un enfoque ajustado al negocio.
www.chakray.com 5
05 Son desarrollados pensando en la coreografía y no en la orquestación.
10 Crecen individualmente.
www.chakray.com 6
Microservices y un API Gateway
www.chakray.com 7
Microservices en WSO2
Un ESB (Enterprise Service Bus) es una infraestructura que puede realizar servicios de
mediación, enrutamiento, enriquecimiento y la incorporación de políticas sobre servicios
web y otros artefactos. Estas características pueden ser utilizadas para implementar un
Gateway para arquitecturas microservices. En esencia, en este patrón, utilizamos el WSO2
ESB y todas sus características para desplegar un Gateway para nuestra plataforma de mi-
croservices.
El WSO2 ESB Gateway puede ofrecer un mecanismo que permita el acceso a microser-
vices individuales desde aplicaciones mediante la conformación de una puerta de enlace,
proporcionando un único punto de entrada para todos los clientes. Este Gateway puede
ser distribuido y soportar alta disponibilidad (HA) y clustering; es importante destacar que
este ESB solo puede ser utilizado para tareas de Gateway. A continuación se enumeran las
funciones que este ESB debe cumplir como Gateway:
01 Aislar a los clientes sobre la lógica de integración, composición, entres los microser-
vicios.
www.chakray.com 8
04 Reducir el número de peticiones (ida y vuelta).
Utilizando el WSO2 ESB como un Gateway y limitando sus funciones para arquitecturas
microservices, podemos implementar dos tipos de gawatey, uno para APIs y otro para men-
sajes. Una de las características de microservices es su capacidad de comunicación sobre
mecanismos ligeros como HTTP o JMS. Un patrón de diseño recomendado es la conforma-
ción de un Gateway de mensajería que pueda enriquecer e incluir políticas a los mensajes
que son intercambiados entre microservices cuando utilizamos JMS como norma de co-
municación. Sobre este enfoque podemos utilizar un WSO2 ESB como mediador de men-
sajes (messages JMS).
www.chakray.com 9
Bajo este patrón, podemos utilizar la capacidad del WSO2 ESB para la gestión de storage
de mensajes, utilizando la funcionalidad de Message Stores (Store Mediator) para almace-
nar mensajes de forma temporal. Actualmente el Store mediator puede ser utilizado para
almacenar mensajes en memoria, en jms o implementaciones que pueden ser customiza-
das como la utilización de REDIS, entre otras tecnologías. Otro componente que puede ser
utilizado en este patrón son los message processor, quienes pueden consumir mensajes de
los message stores y procesarlos. En este procesamiento, los mensajes pueden ser envia-
dos a endpoints almacenados y consultados sobre un registro.
Resumiendo, WSO2 ESB puede ser utilizado como componente para la conformación de
API Gateways y message Gateways; estableciendo un único punto de acceso para arqui-
tecturas basada en microservices. Los gateways pueden desarrollar políticas para la vali-
dación, seguridad, cache, garantía de entrega, tolerancia a fallas, logging, audit, entre otras.
Bajo este enfoque WSO2 ESB asume y desarrolla diversos roles, limitando y estandarizan-
do su función en contextos de arquitectura.
www.chakray.com 10
Patrón WSO2 Stack y soporte WS-Eventing para
Microservice
jms:/Ordertopic?transport.jms.DestinationType=queue&transport.jms.
ContentTypeProperty=Content-Type&java.naming.provider.url=tcp://localhost:61616&java.naming.
factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&transport.jms.Connection
FactoryType=queue&transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory
De igual forma cada servicio de datos puede ser expuesto sobre el transporte JMS. En el
siguiente diagrama se puede observar que pueden ser inyectados al request o response
eventos que pueden ser disparados ante la ocurrencia de un evento, soportada por Xpath y
WS-Eventing. El payload o carga útil puede ser enviada a un topic interno y posteriormente
a un JMS Queue/Topic a través de una suscripción establecida. De igual forma pueden ser
utilizados listener para el envió a otros queues/topics.
www.chakray.com 11
Patron WSO2 Gateway con WSO2 GW para
Microservices
WSO2 GW será la puerta de enlace de mensajería que servirá de Gateway para productos
como WSO2 Enterprise Service Bus, WSO2 Security Gateway, entre otros.
02 10 veces más rápido que el transporte HTTP presente actualmente en WSO2 ESB.
www.chakray.com 12
Con este enfoque se podrá establecer servicios RESTfull directamente, por ejemplo:
<rest path=”/iot”>
<get uri=”/dispositivo”>
<to uri=”direct:getDispositivos”/>
</get>
<get uri=”/dispositivo/{id}”>
<to uri=”direct:getDispositivosById”/>
</get>
</rest>
<route>
<from uri=” direct:getDispositivosById “/>
<recipientList>
<simple>iot:http://iot/posts/${header.id}</simple>
</recipientList>
</route>
WSO2 se encuentra desarrollando un modelo más aislado del ESB para aquellas imple-
mentaciones que requieran la implementación del paradigma microservice mediante es-
trategias como el Non-blocking IO, procesamiento y programación concurrente basada en
Netty, Patrón Disruptor, Java 8, Programación Reactiva, entre otros; mejorando las limita-
ciones actuales del enfoque ESB y su planteamiento basado en roles. El producto es deno-
minado WSO2 Microservice Server (WSO2 MSS).
www.chakray.com 13
WSO2 MSS permite la construcción y entrega de aplicaciones orientadas en microservices
sobre servicios REST, ofreciendo una arquitectura de alto rendimiento (tiempo de ejecu-
ción y arranque) y la garantía del bajo consumo de recursos. WSO2 MSS ha incorporado la
gestión de métricas y análisis a través de la integración con WSO2 Data Analytics Server
(WSO2 DAS), que ofrece una solución completa para el análisis de datos. Cada microser-
vice se desarrolla para un solo propósito y es desplegado de forma independiente, lo cual
garantizará su escalabilidad y fiabilidad.
Con WSO2 MSS ahora se podrá anotar los servicios. Entre las anotaciones más relevantes:
ANOTACIÓN PROPÓSITO
@Metered Anotación que permite establecer una métrica para medir la tasa de eventos
en un tiempo determinado.
@Timed Anotación que permite establecer una métrica para medir la duración de
ejecución de una determinada función de negocio.
www.chakray.com 14
Para establecer un microservice:
@Path(“/micro”)
@HTTPMonitoring
public class MicroService { …
@GET
@Path(“/dispositivo/{id}”)
@Metered
public int getDispositivo(@PathParam(“id”) int id) {
return persistence.getDispositivo(id);
}
new MicroservicesRunner()
.deploy(new MicroService())
.start();
Pueden ser colocados interceptores que pueden gestionar políticas de validación, seguri-
dad, métricas entre otros; por ejemplo:
.addInterceptor(new MetricsInterceptor(MetricReporter.CONSOLE,
MetricReporter.JMX, MetricReporter.DAS))
WSO2 MSS esta soportada por las siguientes tecnologías: Carbon server, IO netty, Netty
jaxrs Http, gson, imbusDS Java library; entre otros marcos Open Source. Es importante
destacar que soporta JSON Web Token para la seguridad de servicios REST.
WSO2 permite incorporar estrategias para el fracaso parcial y el cache mediante en-
dpoints en WSO2 ESB. Cuando la llamada a un microservice supere un umbral establecido,
se implementa un patrón denominado disyuntor o circuit-breaker, cancelando la espera
www.chakray.com 15
innecesaria cuando un servicio no esté disponible o no responda. Si la tasa de error para
un servicio supera un umbral especifico, WSO2 puede disparar un interruptor y todas las
peticiones fallarán inmediatamente por un período de tiempo.
<endpoint name=”CircuitBreakerEP”>
<address uri=”http://localhost:9764/app/microservices/call”>
<suspendOnFailure>
<initialDuration>60000</initialDuration>
</suspendOnFailure>
<markForSuspension>
<errorCodes>101507,101508</errorCodes>
<retriesBeforeSuspension>3</retriesBeforeSuspension>
<retryDelay>400</retryDelay>
</markForSuspension>
<timeout>
<duration>300</duration>
<responseAction>fault</responseAction>
</timeout>
</address>
</endpoint>
Para implementar este patrón, WSO2 ESB proporciona Endpoints; los endpoints propor-
cionan propiedades como la duración del timeout y la acción si el timeout ha superado un
determinado umbral. De igual forma se pueden utilizar secuencias de excepción que pue-
den invocar servicios de cache o responder datos temporales.
<endpoint name=”MicroService”>
<address uri=”http://localhost:8267/platform/microservice/func”>
<timeout>
<duration>320</duration>
<responseAction>fault</responseAction>
</timeout>
</address>
</endpoint>
www.chakray.com 16
WSO2 Microservices Bulkheads
WSO2 ESB permite el establecimiento de estrategias para evitar el fracaso en cascada
mediante endpoints configurados de forma adecuada; pudiendo aislar problemas de red o
servicios sin afectar la arquitectura de la solución. El Bulkheads es un patrón que establece
prácticas para reducir el riesgo de fracaso y así evitar la degradación y sus consecuencias
mediante barreras como la implementación del patrón timeout, retries, circuit-breaker, en-
tre otros.
www.chakray.com 17
WSO2 Microservices Monitoreo y Análisis de Datos
WSO2 ESB y WSO2 MSS permiten la integración con el producto de análisis de datos
WSO2 DAS que soporta análisis batch, en tiempo real, predictivo e interactivo. Con esta
estrategia la capacidad de monitoreo y alertas en plataforma para Microservices es sopor-
tada de forma individual o centralizada.
Recomendaciones Generales
WSO2 ofrece un soporte completo a todo el stack de aspectos necesarios para construir
una plataforma de microservices, proporcionando estrategias concretas y viables a los de-
safíos de implementaciones sobre ambientes distribuidos.
08 Framework como vagrant, saboteur, wiremock, hixtrix, cucumber pueden ser combi-
nado para establecer un stack sólido para las pruebas de microservices.
www.chakray.com 18
En esencia
· Los productos del stack WSO2 pueden utilizar el estándar ws-eventing para estable-
cer mecanismos de comunicación desacoplados y ligeros basados en HTTP o JMS.
· Los microservices pueden ser implementados sobre plataformas como WSO2 DSS,
BRS, AS dentro de un contenedor con un ciclo de vida independiente (ejecutado en
su propio proceso), por ejemplo Docker.
· Los microservices pueden ser desplegados como un war en contenedores como Jetty
o Tomcat e incluir el descubrimiento de servicios mediante un registro (WSO2 GR).
· El WSO2 ESB Gateway puede inyectar políticas de cache, seguridad, logging, audit,
validación, garantía de entrega, entre otros.
· Cada servicio puede contar con aspectos de logging, auditoria, excepciones de forma
independiente o estos pueden ser inyectados dentro de un servicio Gateway (ESB o
servicios sobre un servidor de aplicaciones).
WSO2 es un stack Open Source que puede ser utilizado para implementar en toda su
extensión una arquitectura de MicroService. Espero que estos modelos de implemen-
tación y recomendaciones fortalezcan su iniciativa y proporcionen una arquitectura más
sólida, ágil y flexible.
www.chakray.com 19
¡Muchas gracias!
Sobre el autor:
Julio Cejas
Arquitecto Chakray / julio.cejas@chakray.com
SABER MÁS
www.chakray.com 20
info@chakray.com www.chakray.com
www.chakray.com 21