Han surgido los microservicios como un patrón de arquitectura común en la última década.
En este enfoque, servicios pequeños, autónomos y poco acoplados trabajan juntos en una red distribuida. Cada microservicio suele estar delimitado a una función y un límite empresarial específicos, se ejecuta en su propio proceso y puede gestionarse y desplegarse independientemente de los demás servicios.
Esta arquitectura permite una mayor flexibilidad en comparación con una aplicación monolítica tradicional, pero al mismo tiempo exige que cada microservicio individual proporcione resiliencia, escalabilidad y persistencia cuando sea necesario.
En el siguiente artículo me gustaría centrarme en los aspectos de gestión de datos de una arquitectura de microservicios y en cómo Couchbase proporciona baja latencia, resistencia y escalabilidad para su capa de datos.
Simplicidad con caché integrado y escalabilidad elástica
Los microservicios están vinculados a un dominio empresarial explícito.
Por ejemplo, su dominio podrían ser los servicios Producto, Campaña, Pago o Perfil de usuario de una aplicación de comercio electrónico. Los diferentes microservicios forman la aplicación en colaboración, pero son totalmente independientes al mismo tiempo. A menudo, diferentes equipos desarrollan cada servicio de forma independiente y con su propio ciclo de lanzamiento y canalización CI/CD. El resultado es un desarrollo más ágil y rápido.
En este escenario, cada microservicio es propietario de los datos de su dominio y los pone a disposición de los demás servicios a través de las API. Durante una transacción de pago, el servicio de pago puede resolver los datos de cliente correspondientes del servicio de perfil de usuario. Este patrón de arquitectura de microservicios proporciona una gran flexibilidad y también permite la reutilización de microservicios en múltiples aplicaciones.
Construir servicios resistentes y escalables es crucial. Para microservicios sin estado, esto es bastante sencillo. Pero si es necesario que los datos persistan, en última instancia se necesita una arquitectura de base de datos resistente que escale junto con el microservicio para soportar el creciente uso del servicio.
Couchbase se basa en una arquitectura que da prioridad a la memoria y que proporciona no solo almacenamiento en caché integrado para un acceso de baja latencia a tus datos, sino también escalabilidad elástica. Esto te permite escalar individualmente los servicios de Couchbase sin interrumpir tus operaciones de microservicios.
A medida que tu volumen de datos aumenta, simplemente añades más nodos de datos Couchbase. Si necesitas capacidad de consulta adicional, solo tienes que añadir nodos de consulta de Couchbase adicionales a tu clúster.
Con este nivel de escalado multidimensional, tus diferentes servicios Couchbase nunca necesitan competir por los recursos del sistema. En su lugar, la infraestructura subyacente se adapta a las necesidades específicas del servicio. Por ejemplo, el servicio Couchbase Query utiliza una instancia de cálculo con mucha memoria para servir tantos datos como sea posible desde la caché integrada, y utiliza un nodo con núcleos adicionales para soportar más consultas.
La arquitectura resistente y distribuida de Couchbase también garantiza una alta disponibilidad al mantener copias réplica de tus datos. En caso de fallo de un nodo, Couchbase lo sustituye automáticamente y garantiza la continuidad de las operaciones.
Patrones comunes para microservicios en Couchbase
Una de las características clave de los microservicios es su acoplamiento flexible, que permite desarrollarlos, desplegarlos, controlar su acceso y escalarlos de forma individual.
El acoplamiento flexible requiere que la infraestructura de base de datos subyacente permita aislar los datos de cada microservicio. Esto puede hacerse ejecutando instancias de base de datos individuales por microservicio o controlando el acceso a las partes relevantes de los datos.
Aunque las bases de datos relacionales tradicionales admiten el aislamiento mediante esquemas de bases de datos, suelen ser difíciles de escalar, carecen de la flexibilidad de un modelo de datos JSON y, lo que es más importante, se convierten en el único punto de fallo en caso de interrupción de la infraestructura de la base de datos. Este es un aspecto importante que hay que tener en cuenta a la hora de diseñar la arquitectura de microservicios, ya que una interrupción tiene grave consecuencias para todos los microservicios que comparten la misma base de datos.
Couchbase está diseñada para microservicios. Es una base de datos altamente escalable, resistente y distribuida. Ofrece una gran flexibilidad y proporciona múltiples niveles de aislamiento para soportar hasta mil microservicios en el mismo clúster de Couchbase.
Servidor Couchbase 7 introduce el concepto de ámbitos y colecciones.
Los ámbitos y las colecciones son contenedores lógicos creados dentro de un bucket que organizan y aíslan tus datos. Un bucket es un espacio clave que permite configurar cuotas individuales de memoria, disco y prioridad de E/S. Estos ajustes proporcionan un aislamiento parcial de los recursos. Los buckets, Scopes y Collections proporcionan una gestión independiente del despliegue y del ciclo de vida a todos los niveles, incluido el control de acceso basado en roles, la replicación entre centros de datos (XDCR) y la copia de seguridad/restauración.
Estas características dan a sus equipos de desarrollo una mayor flexibilidad y permiten múltiples patrones de microservicios. Echemos un vistazo más de cerca a cuatro de esos patrones más comunes.
Patrón 1: Cluster Couchbase dedicado por microservicio
Usar un clúster dedicado de Couchbase proporciona escalado independiente a través del aislamiento físico. Aunque esta es una opción viable, puede no ser muy práctica cuando se ejecutan cientos o incluso miles de microservicios.
Patrón 2: Aislamiento mediante cubos
En este patrón, los buckets se utilizan para aislar microservicios.
En comparación con los clústeres dedicados, los buckets proporcionan un aislamiento parcial de los recursos, incluyendo asignación de memoria, E/S de disco y réplicas. Sin embargo, el número de buckets por clúster de Couchbase es limitado, por lo que el número de microservicios soportados en un único clúster no puede superar los treinta.
Si no tienes requisitos estrictos para aislar los datos entre servicios, o si existen otras medidas para garantizar que cada microservicio sólo trabaja con su propio conjunto de datos, entonces varios microservicios pueden compartir el mismo bucket. Normalmente, la compartición de buckets se consigue identificando el documento mediante la clave del documento o mediante un atributo de tipo adicional en el documento.
De hecho, este patrón se utilizaba habitualmente antes de la introducción de ámbitos y colecciones en Couchbase 7.
Patrón 3: Aislamiento mediante colecciones
Un patrón de despliegue de microservicios más potente es aprovechar las ventajas de Colecciones.
Mientras que un bucket circundante sigue proporcionando aislamiento de recursos, Collections aísla y controla lógicamente el acceso a tus microservicios. Esto te permite ejecutar hasta 1000 microservicios en un único clúster de Couchbase. En la siguiente ilustración, cada microservicio utiliza una colección dedicada. El control de acceso basado en roles de Couchbase asegura que cada microservicio sólo acceda a su propio conjunto de datos en la colección correspondiente.
Patrón 4: Aislamiento mediante cubos y colecciones
Este patrón de microservicios es similar al patrón anterior, pero en lugar de colocar todas las colecciones en un único bucket, las agrupas en varios buckets.
Este patrón permite configurar el bucket en función de las características de los microservicios y/o colecciones incluidos. Con este enfoque, se consigue un aislamiento físico como la asignación de memoria y el recuento de réplicas para cada bucket individual y sus colecciones contenidas.
No existe una única solución para estructurar y aislar tus datos en Couchbase. Pero usando buckets, scopes y collections, tienes infinidad de opciones para satisfacer fácilmente las necesidades específicas de tu arquitectura de microservicios.
Despliegues en contenedores
No cabe duda: Los entornos de desarrollo actuales están cambiando hacia los microservicios. Al mismo tiempo, el sector avanza hacia despliegues en contenedores gestionados a través de Kubernetes y OpenShift.
Con Couchbase, tu aplicación de base de datos autónoma y totalmente gestionada se ejecuta junto a tus microservicios en la misma plataforma Kubernetes. Este enfoque te ofrece un aislamiento completo y reduce tu carga de trabajo de DevOps con conmutación por error automática e incluso escalado automático de tu clúster.
Para más información, consulte Operador autónomo de Couchbase.
[…] https://www.couchbase.com/microservices-architecture-in-couchbase […]
[...] 4 Patrones para Arquitectura de Microservicios en Couchbase [...]