Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

40
Seminario Web MongoDB & Paradigma Desarrolle aplicaciones más escalables utilizando microservicios

Transcript of Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Page 1: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Seminario WebMongoDB & Paradigma

Desarrolle aplicaciones más escalables utilizando microservicios

Page 2: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Ruben TerceñoSenior Solutions ArchitectMongoDB

Miguel GarridoSenior Solutions Architect Paradigma Digital

Page 3: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Agenda

Introducción a los microservicios:¿Por qué han surgido? ¿Qué beneficios aportan frente a arquitecturas tradicionales?

Nuevas tecnologías que ayudan en arquitecturas de microservicios

¿Qué beneficios aporta el uso de MongoDB en este tipo de arquitecturas?

Page 4: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

INTRODUCCIÓN A LOS MICROSERVICIOS

Page 5: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

5

Definición de microservicio“Microservices is a software architecture style, in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs. These services are small, highly decoupled and focus on doing a small task.”

Page 6: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

6

Un poco de historiaEquipo de desarrollo

Arquitecturas monolíticas (pre-SOA)

Arquitecturas SOA Microservicios

En arquitecturas monolíticas cualquier cambio afecta al producto completo y todos los equipos deben estar de acuerdo en implementarlo.

Los elementos en SOA se desarrollan de manera más autónoma pero los equipos deben coordinarse con otros para que los cambios encajen en el diseño general.

El nuevo paradigma de desarrollo

Page 7: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

7

• Alto nivel de acoplamiento

• Complejidad de código

• Un pequeño cambio de código en la aplicación implica un despliegue

completo

• Escalado ineficiente

• Menos especialización

Arquitecturas monolíticas

Page 8: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

8

• Menor acoplamiento entre servicios

• Bus de servicios que mapea el servicio lógico y llama al servicio físico

• Se premia la reusabilidad, lo que puede llevar a que contengan

demasiado código

• Los servicios tienen estado

• Suelen utilizar modelos de datos relacionales

• En algunos casos, es complicado separar la funcionalidad entre

servicios

Arquitecturas SOA

Page 9: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

9

Arquitecturas de microservicios

• Principio de responsabilidad única

• Desarrollo eficiente

• Escalado elástico

• Ciclo de vida independiente

• Menor Time-to-Market (Continuous Delivery)

• Facilidad de integración con otros sistemas

Page 10: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

10

Retos de una arquitectura de microservicios

• ¿Dónde se encuentran desplegados los servicios?

• ¿Qué pasa si alguno falla?

• ¿Cómo se configuran?

• ¿Dónde se guardan las trazas?

• ¿Cómo los monitorizamos?

• ¿Cómo los desplegamos?

• Gestionar el aumento del tráfico internoPaaS

Microservicio 1

Microservicio 2

Microservicio 3

Microservicio 4

Servicio de enrutamiento

Almacenamiento

Servicio de orquestación

Servicio de descubrimiento

Registro de contenedores

Consumidores

Servicios de logging / monitorización

Servicio de configuración

Herramienta de CI

Control de versiones

Alejandro Asensio González
Representar los retos sin nombres, de manera genérica.
Page 11: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

11

Herramientas

Microservicio 1

Microservicio 2

Microservicio 3

Microservicio 4

Servicio de enrutamiento

Docker registry

Servicio de orquestación

Servicio de descubrimiento

Devops

Consumidores

Servicios de logging / monitorización

Servicio de configuración

Page 12: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

12

Herramientas

Microservicio 1

Microservicio 2

Microservicio 3

Microservicio 4

Servicio de enrutamiento

Docker registry

Servicio de orquestación

Servicio de descubrimiento

Devops

Consumidores

Servicios de logging / monitorización

Servicio de configuración

Encargado del pipeline de

Continuous Delivery

Gestión del código fuente de los

microservicios

Gestión de imágenes docker de los

diferentes microservicios

Motor de base de datos

Page 13: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

13

Ejemplo de una arquitectura de microservicios

PaaS

Consumidor 1

CPD 1

Node 1

Gestión de pedidos

Gestión de clientes

Gestión de artículos

Gestión de usuarios

Node 2

EurekaGestión de clientes

CPD 2

Node 3

Gestión de pedidos

Node 4

Gestión de clientes

Gestión de artículos

Gestión de usuarios

Zuul

Zuul

Spring Cloud ConfigEurekaSpring Cloud

Config

MongoDBMongoDB

CPD 3 (virtual)

MongoDBArbiter

Master 1 Master 2

MongoDBMongoDB

Master 3

Consumidor 2 Consumidor 3 Consumidor 4 Consumidor 5 Consumidor 6

Page 14: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

14

• Como hemos visto, la manera de comunicarse entre microservicios son los protocolos de red, especialmente el

protocolo http, definiendo APIs REST como interfaz de comunicación. Estas APIs proporcionan:

– Organizan sistemas internos para dar apoyo a nuevos proyectos innovadores de una manera uniforme.

– Reducen costes de mantenimiento.

– Incrementan la agilidad en los procesos de transformación.

– Acercan la omnicanalidad a la empresa

Microservicios y APIs

Servicio

API

Page 15: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

15

JSON como formato de intercambio

• JSON son las siglas de JavaScript Object Notation, y fue originalmente pensado para llevar la notación nativa

usada para declarar objetos en JavaScript a otros lenguajes. Proporciona:

– Flexibilidad

– Ligereza

– Evita transformaciones con bases de datos en formato JSON

– Modelo de datos autoexplicativo

Page 16: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

16

Proyecciones y expansiones

• Funcionamiento similar a MongoDB

• Minimizan el tráfico y optimizan el servicio en casos de acceso a múltiples datastores

• Ejemplo de llamada con proyección: rest/api/content?type=page&spaceKey=TEST&projections=version, history

• Proporcionan mayor rendimiento y menor consumo, limitando el número de llamadas a un API

• Permiten la expansión de campos e items embebidos de un recurso

• Ejemplo de llamada con expansión: rest/api/content?type=page&spaceKey=TEST&expand=version,history.lastUpdated

Proyecciones Expansiones

Page 17: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

17

Transaccionalidad en microserviciosLa división de los datos en diferentes repositorios (base de datos, colas de mensajes, etc) y su accesibilidad a través de servicios que los envuelven supone perder la transaccionalidad nativa a nivel de base de datos:

Existen diversos patrones que permiten tratar esta situación:

• Reintentar: en situaciones de caída puntual o no disponibilidad parcial del servicio (caída de un nodo por ejemplo), reintentar la operación puede ser una solución válida.

• Abortar la operación completa: en esta situación, debe existir una operación de ‘compensación’ para volver a un estado de consistencia.

• Transacción distribuida: basa su funcionamiento en la la existencia de un proceso de gobierno de la transacción (‘transaction manager’).

Ok

Servicio 1

Servicio 2

Servicio 3

Servicio 3

Ok

Reintento

Servicio 1

Servicio 2

Servicio 3

Deshacer

Coordinador

Servicio 2

Servicio 3

Preparar

Servicio 1 Commit

Page 18: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

TECNOLOGÍAS MICROSERVICIOS

Page 19: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

19

Cloud, IaaS y PaaS

• Ayudan con la gestión eficiente de recursos

• Posibilitan escalado ilimitado

• Delegación de responsabilidad en piezas propias (balanceo de

carga, enrutamiento, descubrimiento, seguridad...etc)

• Monitorización de servicios

• Logs centralizados

• Trazabilidad de servicios

• Despliegue automatizado con estrategias de balanceo

automáticas

Page 20: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

20

Docker containers

• Proveen entornos aislados gestionados por procesos (hypervisor) con el mínimo kernel de sistema operativo en cada contenedor

• Con el mismo hardware se pueden ejecutar más contenedores que con máquinas virtuales

• Docker ha conseguido un gran seguimiento de la comunidad con un repositorio público de imágenes, Docker Hub, que contiene sobre 400.000 imágenes

Page 21: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

21

Broker de mensajería

• Broker de mensajería publisher / subscriber con persistencia en disco

• Conecta microservicios

• Desacopla llamadas entre microservicios

• Proporciona alta disponibilidad

Microservicio 1 Microservicio 2

Almacenamiento

Microservicio 1 Microservicio 2

Almacenamiento

- Dependencia entre servicios- Gestión de errores y reintentos en el servicio llamante

- Añadir un nuevo servicio implica sólo suscripción- Gestión de reintentos en Kafka- Desacoplamiento entre servicios

Page 22: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

MICROSERVICIOS Y MONGODB

Page 23: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

23

Bases de datos NoSQL

Lenguaje de búsqueda expresivoÍndices secundarios

Consistencia Fuerte

Integración con herramientas de gestión

Escalable y distribuido• Escalabilidad horizontal• Cloud

Rendimiento• Usuarios globales• Muy alta disponibilidad

Flexibilidad• Esquema flexible• Datos no estructurados• Sin relaciones complejas

Page 24: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

24

MongoDB Nexus Architecture

Lenguaje de búsqueda expresivoÍndices secundarios

Consistencia Fuerte

Integración con herramientas de gestión

The only NoSQL Database that combines best of RDBMS + NoSQL

Escalable y distribuido• Escalabilidad horizontal• Cloud

Rendimiento• Usuarios globales• Muy alta disponibilidad

Flexibilidad• Esquema flexible• Datos no estructurados• Sin relaciones complejas

Page 25: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

25

Modelo de datos flexible

Consumidor A Consumidor B

Microservicio 1

• El esquema flexible de MongoDB permite que cada consumidor del servicio pueda tener una percepción propia de un modelo común, sin afectar esto a la morfología del dato en MongoDB

• La propagación de los cambios en el modelo de datos de los consumidores es automática

• Las vistas read-only permiten exponer el modelo de datos de forma polimórfica y realizar ofuscación

Page 26: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

26

Redundancia

Debido a la naturaleza distribuida de los microservicios, estos tienen que ser diseñados teniendo en cuenta la redundancia del dato. MongoDB encaja perfectamente en este requerimiento, ya que proporciona de base redundancia a través de sus replica set.

Es muy importante destacar MongoDB permite que la política de redundancia puede ser variable por petición y por criticidad del dato

CloudCPD 2CPD 1

Replica set

Nodo 1 Nodo 2 ArbiterNodo 3 Nodo 4

Page 27: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Los microservicios no se pueden interrumpir para hacer cambios en su esquema de datos. MongoDB puede adaptarse a cambios en el esquema de datos sin ninguna pérdida de servicio. Su arquitectura independiente de la plataforma proporciona facilidad de portabilidad.

Frontend Applications

Digital & Mobile Apps

Backend Applications … Operational & BI

Reporting

Application Layer

API Access Layer

MicroservicesLayer

Database Layer

Flexibilidad para modelar estructuras de datos cambiantes sin necesidad de parar la plataforma para realizar mantenimiento.

1

MongoDB and Microservices – Flexibility

Page 28: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

La habilidad de escalar rapidamente para adaptarse a una demanda cambiante es un atributo clave de los microservicios. La arquitectura de MongoDB permite escalado y alta disponibilidad de forma nativa.

Frontend Applications

Digital & Mobile Apps

Backend Applications … Operational & BI

Reporting

Application Layer

API Access Layer

MicroservicesLayer

Database Layer

2 La escalabilidad y alta disponibilidad nativas se dan la mano con el alto rendimiento necesario en una plataforma de microservicios.

MongoDB and Microservices – Scalability

Page 29: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

MongoDB proporciona funcionalidad de autenticación, control de acceso, auditoría y cifrado para proteger los despliegues de MongoDB. Las vistas read-only permiten exponer el modelo de datos de forma polimórfica y realizar ofuscación.

Frontend Applications

Digital & Mobile Apps

Backend Applications … Operational & BI

Reporting

Application Layer

API Access Layer

MicroservicesLayer

Database Layer

3 Seguridad nativa que protege los datos y facilita el desarrollo de aplicaciones al asumir el control de accesos y la visibilidad.

MongoDB and Microservices – Security

Page 30: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Nuestra receta:

Orquestación de MongoDB con Docker

Page 31: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Gestiona y provisiona los contenedores

Convierte un grupo de contenedores en un único servicio

Define una aplicación multicontenedor en un único fichero de descripción

PS

S

Ecosistema Docker

Page 32: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

OrquestaciónCoordina los contenedores de MongoDB para realizar un despliegue según las mejores prácticas.

Control de RecursosDimensionado de cada instancia (y cada clúster) para evitar contención de recursos

Docker

Page 33: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

5x más rápido que Kubernetes para lanzar un

nuevo contenedor

7x más rápido que Kubernetes en listar

los contenedores activos

Evaluación de plataformas a gran escala

1000 instancias EC2 en un clúster

¿Rendimiento?

¿Capacidad operativa?

¿Facilidad de soporte?

https://medium.com/on-docker/evaluating-container-platforms-at-scale-5e7b44d93f2c#.k2fxds8c2

https://www.docker.com/survey-2016

Porqué Swarm?

Page 34: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

swarm-node-2

swarm-node-3swarm-node-1

¿Cómo conectamos los diferentes procesos mongod?• Swarm proporciona redes host a host • Utiliza el hostname definido en el archivo Compose

magicmagic

magic

Redes multi host de Swarm

Page 35: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

SECONDARY

cgroup/docker

cgroup/docker cgroup/docker cgroup/docker

cgroup/docker cgroup/docker

cgroup/dockercgroup/docker cgroup/docker

cgroup/dockercgroup/docker cgroup/docker

cgroup/dockercgroup/docker cgroup/docker

cgroup/dockercgroup/docker cgroup/docker

PRIMARY SECONDARY SECONDARY

PRIMARY SECONDARY

PRIMARYSECONDARY SECONDARY

PRIMARYSECONDARY SECONDARY

PRIMARYSECONDARY SECONDARY

PRIMARYSECONDARY SECONDARY

Tendremos un primario y al menos dos secundarios por aplicación.

Definiremos reglas de afinidad en Docker Compose para evitar que los miembros de un mismo replicaset se desplieguen el en mismo servidor físico.

Con Linux cgroups aislaremos los recursos (RAM / CPU / BlockIO) a lo que tendrá acceso cada mongod.

MongoDB Ops/Cloud Manager es clave en este proceso ya que permite la provisión programática !

MACHINE 1

AP

P 1

MACHINE 2 MACHINE 3

AP

P 2

AP

P 3

AP

P 4

AP

P 5

AP

P 6

SECONDARY

Despliegue en alta disponibilidad

Page 36: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

SECONDARY

cgroup/docker

cgroup/docker cgroup/docker cgroup/docker

cgroup/docker cgroup/docker

cgroup/dockercgroup/docker cgroup/docker

cgroup/dockercgroup/docker cgroup/docker

cgroup/dockercgroup/docker cgroup/docker

cgroup/dockercgroup/docker cgroup/docker

PRIMARY PRIMARY SECONDARY

PRIMARY PRIMARY

PRIMARYSECONDARY SECONDARY

PRIMARYSECONDARY SECONDARY

PRIMARYSECONDARY SECONDARY

PRIMARYSECONDARY SECONDARY

MACHINE 1

AP

P 1

MACHINE 2 MACHINE 3

AP

P 2

AP

P 3

AP

P 4

AP

P 5

AP

P 6

SECONDARY

En caso de fallo a nivel de servidor alguno de los nodos secundarios tomará el rol de primario.

Cuando los contenedores de la máquina en fallo se vuelvan a levantar, siempre que respeten los nombres la arquitectura se resincroniza.

Evento de HA (La ley de Murphy)

Page 37: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Frontend Applications

Digital & Mobile Apps

Backend Applications

… Operational & BI Reporting

Application Layer

API Access Layer

Microservices

Layer

DatabaseApplicatio

n

Storage

Modelo Uno:Contenedores para todos

Pros:• Se despliega como un todo• Se migra fácilmente entre

entornos

Cons:• El storage debe ser

persistente• La comunicación intra nodo es

más compleja• Más difícil de debugear

Arquitectura de referencia

Page 38: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Frontend Applications

Digital & Mobile Apps

Backend Applications

… Operational & BI Reporting

Application Layer

API Access Layer

Microservices

Layer

Database Cluster

Modelo Dos:Contenedores para la aplicación

Pros:• Permite a la base de datos

manejear su propia HA y escalado

• Permite la separación entre las capas lógicas y de datos (Seguridad)

• Más fácil de debuguear

Cons:• La base de datos se

provisiona de forma independiente.

Arquitectura de referencia

Page 39: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

• Nuevos clústers en segundos

• Despliegues con redundancia y alta disponibilidad

• Completamente elástico, sin pérdida de servicio

• Parches automáticos y acceso inmediato a nuevas funcionalidades

• Con autenticación y cifrado

• Backup continuo con recuperación a la carta

• Alertas personalizables y monitorización fina

Completamente seguro

Ya lo hacemos nosotros

• Pago or uso. Facturación por horas

• Soporte multi cloud (AWS ahora mismo, Azure & Google Cloud antes de verano)

• Fácil migración mediante herramientas a despliegues cloud, on premise o híbridos.

Sin trucos

MongoDB AtlasBase de datos como servicio de MongoDB

Page 40: Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando microservicios

Preguntas

Gracias.

[email protected]

@mongodb

www.mongodb.com