Professional Documents
Culture Documents
MICROSERVICES CON
WSo2.
por Julio Cejas - IT Advisor SUNQU
WhitePaper
1
Microservices. Microservices con WSo2 | Sunqu | 2016
Índice
Introducción 3
Una pequeña historia 3
Qué es un MicroService 4
Sobre las Aplicaciones Monolíticas 5
Microservices y un API Gateway 6
MicroServices en WSO2 8
Patrón WSO2 ESB como API Gateway Microservice 8
Patrón WSO2 ESB como Message Gateway Microservice 9
Patrón WSO2 ESB como API Gateway y Message Gateway 10
WhitePaper
2
Microservices. Microservices con WSo2 | Sunqu | 2016
Introducción
3 3
Microservices. Microservices con WSo2 | Sunqu | 2016
utilizamos un modelo subyacente con muchas relaciones a otras tablas. Sobre este
modelo se establecen muchas dependencias, fácilmente reconocibles cuando un
cambio pequeño en un atributo de una tabla implica el cambio de muchos artefactos
de software, o bajar y subir toda una solución. En esencia, un cambio pequeño impacta
a toda la solución.
Qué es un MicroService
con una función de negocio concreta y, además, 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 cómo una aplicación monolítica puede ser
1. Los servicios tienen una responsabilidad micro con un enfoque ajustado al negocio.
2. Viven dentro de un contenedor con un ciclo de vida independiente (ejecutado en su propio
proceso).
3. Son organizados de forma vertical sobre las capacidades de negocio y no de tecnología.
4. Están diseñados bajo el principio de bajo acoplamiento.
5. Son desarrollados pensando en la coreografía y no en la orquestación.
6. Son diseñados para soportar el fracaso (tolerante a fallas).
7. Sus modelos de implementación y su gobierno se realizan de forma descentralizada.
8. Sus modelos de implementación no son compartidos. Por ejemplo, sus modelos de
dominio y el modelo de persistencia son exclusivos e individuales.
9. Se comunican sobre mecanismos ligeros como HTTP o JMS.
WhitePaper
Las aplicaciones monolíticas pueden ser construidas con una modularidad útil, evitando
las áreas complejas que los microservices introducen en cualquier arquitectura.
Si los límites de la solución pueden ser gestionados, son pequeños y no existe la
necesidad de conformación de una arquitectura distribuida, la solución puede abordarse
bajo estrategias de aplicaciones monolíticas. Incluso se puede combinar una arquitectura
monolítica y microservice aprovechando lo mejor de ambos enfoques.
5
Microservices. Microservices con WSo2 | Sunqu | 2016
Una recomendación concreta es comenzar con una arquitectura monolítica para luego
romperla o dividirla en microservices. Con este enfoque se puede explorar, descubrir y
explotar los límites y extensiones de la solución, estableciendo un mapa de ruta más
sólido para el diseño y arquitectura de microservices.
WhitePaper
6
6 Microservices. Microservices con WSo2 | Sunqu | 2016
de los clientes se dirigen primero a la puerta de enlace para luego invocar al microservice
apropiado. El Gateway a menudo maneja peticiones a múltiples microservices para
agregar sus resultados.
que se adapte a cada cliente. El Gateway puede tener otras responsabilidades, como la
autenticación, control, distribución de carga, almacenamiento en caché y manipulación
respuestas entre otros.
El API Gateway proporciona:
1. Un único punto de acceso.
2. Oculta al cliente los detalles asociadas a la invocación de microservices
enlazados o relacionados.
3. Disminuye las solicitudes o invocaciones a servicios a través de la red.
4. Simplifica los clientes proxys de acceso.
5. Proporciona un api personalizado.
7
Microservices. Microservices con WSo2 | Sunqu | 2016
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
WhitePaper
plataforma de microservices.
8
Microservices. Microservices con WSo2 | Sunqu | 2016
sobre HA y clustering. De la misma forma, pueden ser establecidas en contenedores
como Docker para gestionar un ciclo de vida independiente y en cluster de contenedores
Linux como Kubernetes.
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
mensajes. Una de las características más destacadas de microservices es su capacidad
de comunicación sobre mecanismos ligeros como HTTP o JMS. Un patrón de diseño
recomendado es la conformació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 comunicación. Sobre este enfoque podemos utilizar un
WSO2 ESB como mediador de mensajes (messages JMS).
WhitePaper
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 almacenar mensajes de forma temporal. Actualmente el Store mediator puede
ser utilizado para almacenar mensajes en memoria, en jms o implementaciones que
pueden ser customizadas como la utilización de REDIS, entre otras tecnologías. Otro
componente que puede ser utilizado en este patrón son los message processor, los
cuales pueden consumir mensajes de los message stores y procesarlos. En este
procesamiento, los mensajes pueden ser enviados a endpoints almacenados y
9
Microservices. Microservices con WSo2 | Sunqu | 2016 9
consultados sobre un registro.
WSO2 permite la conformación de un Gateway de mensajería para arquitecturas
basadas en MicroServices que puedan escalar de forma independiente, coordinados
y gestionados sobre HA y clustering. De la misma forma, pueden ser establecidas
en contenedores como Docker. Es importante destacar que este ESB solo puede ser
utilizado para tareas de Gateway Message.
10
10 Microservices. Microservices con WSo2 | Sunqu | 2016
WSO2 proporciona la capacidad para desarrollar servicios de datos, decisión y dominio
específico bajos diversos productos de su stack. Los servicios de datos (WSO2 DSS)
pueden responder a las necesidades de la capa de persistencia y puede comunicarse
con otros servicios mediante una forma independiente y altamente desacoplada basada
en el transporte JMS. WSO2 DSS soporta el estándar WS-Eventing que puede ser
utilizado para disparar eventos durante la ocurrencia de ciertas condiciones en los datos,
tanto en el request como en su response. El event-trigger contiene una suscripción que
cualquier cliente puede utilizar para recibir notificaciones enviadas desde un tópico a
una cola de mensajería o incluso correo electrónico.
permite que los servicios estén desacoplados utilizando un estilo de comunicación ligero
basado en mensajes por ejemplo JMS. Este enfoque permite por ejemplo establecer
endpoints como el siguiente:
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.ActiveMQInit
ialContextFactory&transport.jms.ConnectionFactoryType=queue&transport.jms.Co
nnectionFactoryJNDIName=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 envio a otros queues/topics.
11
Microservices. Microservices con WSo2 | Sunqu | 2016
Es importante destacar que se recomienda la utilización de una capa Facade (Gateway)
para evitar la proliferación de conexiones punto a punto entre los servicios.
12
Microservices. Microservices con WSo2 | Sunqu | 2016
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>
WhitePaper
13
Microservices. Microservices con WSo2 | Sunqu | 2016
desplegado de forma independiente, lo cual garantizará su escalabilidad y fiabilidad.
Entre sus características más relevantes se encuentran:
Con WSO2 MSS ahora se podrá anotar los servicios. Entre las anotaciones más
relevantes:
14
Microservices. Microservices con WSo2 | Sunqu | 2016
Anotación Propósito
@HTTPMonitoring Anotación que permitirá que el
microservice envie la información
detallada de su comportamiento en
tiempo de ejecución al WSO2 DAS, por
ejemplo: startNanoTime, serviceName,
serviceClass, responseTime, requestSize-
Bytes, httpMethod, requestUri, entre otros.
@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
WhitePaper
negocio.
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);
}
15
Microservices. Microservices con WSo2 | Sunqu | 2016
Para iniciar un microservice, se podrá utilizar:
new MicroservicesRunner()
.deploy(new MicroService())
.start();
.addInterceptor(new MetricsInterceptor(MetricReporter.CONSOLE,
WhitePaper
MetricReporter.JMX, MetricReporter.DAS))
WSO2 MSS está 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.
16
Microservices. Microservices con WSo2 | Sunqu | 2016
cancelando la espera innecesaria cuando un servicio no esté disponible o no responda.
Si la tasa de error para un servicio supera un umbral específico, 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>
WhitePaper
<retryDelay>400</retryDelay>
</markForSuspension>
<timeout>
<duration>300</duration>
<responseAction>fault</responseAction>
</timeout>
</address>
</endpoint>
Para implementar este patrón, WSO2 ESB proporciona Endpoints. A su vez, los endpoints
proporcionan 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 pueden invocar servicios de cache o responder datos temporales.
17
Microservices. Microservices con WSo2 | Sunqu | 2016
los servicios de la solución.
En la siguiente sección, se puede observar una configuración estándar de Endpoints
que permite implementar el patrón timeout sobre WSO2 ESB.
<endpoint name="MicroService">
<address uri="http://localhost:8267/platform/microservice/func">
<timeout>
<duration>320</duration>
<responseAction>fault</responseAction>
</timeout>
</address>
</endpoint>
18
Microservices. Microservices con WSo2 | Sunqu | 2016
WSO2 Microservices y descubrimiento de Endpoints
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
soportada de forma individual o centralizada.
19
Microservices. Microservices con WSo2 | Sunqu | 2016
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
desafíos de implementaciones sobre ambientes distribuidos.
20
Microservices. Microservices con WSo2 | Sunqu | 2016
En esencia
21
Microservices. Microservices con WSo2 | Sunqu | 2016
- OSGI es la base de WSO2, proporcionando servicios con interfaces
uniformes como la forma primaria de encapsulación.
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
implementación y recomendaciones fortalezcan su iniciativa y proporcionen una
arquitectura más sólida, ágil y flexible.
WhitePaper
22
Microservices. Microservices con WSo2 | Sunqu | 2016
WhitePaper
23
Microservices. Microservices con WSo2 | Sunqu | 2016