Introducción
2. Microservicios
i. Pequeños
ii. Basados en sistemas de mensajería
iii. Limitados por contextos
iv. Desarrollados de forma autónoma
v. Implementados de forma independiente
vi. Descentralizados
vii. Independientes del lenguaje
viii. Desarrollados y lanzados con procesos automatizados
i. Ventajas:
Otorga a los desarrolladores libertad de desarrollar y
desplegar servicios de forma independiente.
Un Microservicio se puede desarrollar con un equipo de
trabajo mínimo.
Se pueden usar diferentes lenguajes de programación en
diferentes módulos.
Fácil de entender y modificar, por lo que la integración de
nuevos miembros al equipo de desarrollo será muy rápida.
Los desarrolladores podrán hacer uso de las tecnologías más
actuales. Fácil de escalar e integrar con aplicaciones de
terceros.
ii. Desventajas
Las pruebas o testeos pueden resultar complicados debido al
despliegue distribuido.
Un gran número de servicios puede dar lugar a grandes
bloques de información que gestionar.
Será labor de los desarrolladores lidiar con aspectos como la
latencia de la red, tolerancia a fallos, balanceo de carga,
cantidad de formatos admitidos, etc…
Sistema distribuido puede llegar a significar doble trabajo.
Si se cuenta con un gran número de servicios, integrarlos y
gestionarlos puede resultar muy complejo.
Esta tecnología suele incurrir en un alto consumo de memoria.
3. Patrones en Microservicios
a. Patrones base
i. Monolítico - diseña la aplicación como una unidad desplegable
individual.
ii. Microservicios - diseña la aplicación como una colección de servicios
ligeramente acoplados.
b. Patrones de despliegue
i. ¿Cómo desplegar los servicios de la aplicación?
Múltiples instancias de servicios por host - despliega múltiples
instancias de servicios en un sólo host.
Una instancia de servicio por host - despliega cada instancia de
servicio en su propio host.
Una instancia de servicio por máquina virtual - despliega cada
instancia de servicio en su propia máquina virtual.
Una instancia de servicio por contenedor - despliega cada
instancia de servicio en su propio contenedor.
Despliegue sin servidor (BaaS) - despliega un servicio en una
plataforma de "BaaS" (Backend-As-A-Service).
Plataforma de despliegue de servicios - despliega servicios
usando una plataforma de despliegue altamente automatizada
que provee abstracción de servicios.
d. Patrones de comunicación
i. Estilo
¿Qué mecanismos de comunicación usan los servicios para
comunicarse entre ellos y con sus clientes externos?
Llamada a procedimiento remoto - usa un protocolo orientado
a RPC para la comunicación entre servicios.
Mensajería - usa mensajes asíncronos para la comunicación
entre servicios.
Protocolo específico del dominio - usa un protocolo
especificado por el dominio.
ii. API Externa
¿Cómo se comunican los clientes con los servicios?
API Gateway (Puerta de enlace) - un servicio que provee a
todos los clientes con una interfaz única hacia los servicios.
Backend para el front-end - una puerta de enlace por cada tipo
de cliente
iv. Confiabilidad
¿Cómo prevenimos que la falla de un servicio afecte a los demás?
Corta circuitos - invoca un servicio remoto a través de un
proxy, el cual falla inmediatamente cuando la tasa de fallos de
la llamada remota excede un umbral.
4. Diseños en Microservicios
a. Para la implantación de una arquitectura de Microservicios hemos tener en
cuenta 3 aspectos principalmente:
b. Modelo de Referencia
i. Los siguientes serán los componentes que vamos a necesitar en una
arquitectura de Microservicios:
ii. Servidor de configuración central
iii. Servicio de registro / descubrimiento
iv. Balanceo de carga (Load balancer)
v. Tolerancia a fallos (Circuit breaker)
vi. Servidor perimetral / exposición de servicios (Edge server)
vii. Centralización de logs
viii. Servidor de Autorización
ix. Monitorización
c. Modelo Implementación
d. Modelo de Despliegue
Máquinas virtuales.
Contenedores.
En nuestro caso optaremos por contenedores Docker, ya que esta
tecnología es la que está teniendo mayor acogida y repercusión en
entornos cloud y PaaS.
5. GraphQl
a. ¿Qué es GraphQL?
6. Conclusiones
f. Durante el desarrollo he podido darme cuenta de que los tipos de schema son
limitados ya que el hecho de solo disponer de Query y Mutation limita el tipo
de API que podemos construir conceptualmente hablando. Por ejemplo, si
quisiéramos implementar un servicio que enviara un email, en nuestra opinión
debería existir un tercer tipo denominado “Service”, ya que no es ni una Query
ni un Mutation.
7. Bibliografia
https://docs.microsoft.com/es-es/azure/service-fabric/service-fabric-overview-
microservices
https://www.ca.com/content/dam/ca/us/files/ebook/microservice-architecture-
aligning-principles-practices-and-culture.pdf
https://platzi.com/blog/arquitectura-microservicios/
https://enmilocalfunciona.io/tag/microservicios/
https://platzi.com/blog/introduccion-a-graphql/
https://www.aplyca.com/es/blog/graphql
https://deku.github.io/microservice-architecture-es/