Diseño de aplicaciones

4 patrones para la arquitectura de microservicios en Couchbase

Lectura de 6 minutos

Los microservicios han surgido como un patrón de arquitectura común durante la última década.

En este enfoque, servicios pequeños, autónomos y de acoplamiento flexible trabajan juntos a través de una red distribuida. Cada microservicio suele estar delimitado a una función específica y a un límite de negocio, se ejecuta en su propio proceso y puede gestionarse e implementarse de forma independiente de los demás servicios.

Esta arquitectura da como resultado una mayor flexibilidad en comparación con una aplicación monolítica tradicional, pero al mismo tiempo requiere que cada microservicio individual proporcione resiliencia, escalabilidad y persistencia donde 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 cómo Couchbase proporciona baja latencia, resiliencia y escalabilidad para tu capa de datos.

Simplicidad con caché integrada y escalabilidad elástica

Los microservicios están vinculados a un dominio de negocio explícito.

Por ejemplo, su dominio podría ser el de los servicios de Producto, Campaña, Pago (Checkout) o Perfil de usuario de una aplicación de comercio electrónico. Los diferentes microservicios forman la aplicación de manera colaborativa, pero al mismo tiempo son totalmente independientes. A menudo, diferentes equipos desarrollan cada servicio de forma independiente y con su propio ciclo de lanzamiento y canalización de CI/CD. El resultado es un desarrollo más ágil y rápido.

A microservices architecture of an ecommerce application

En este escenario ilustrado arriba, cada microservicio es dueño de los datos de su dominio y pone estos datos a disposición de los otros servicios a través de API. Durante una transacción de pago, el servicio de Pago (Checkout) puede obtener los datos del cliente correspondientes del servicio de Perfil de Usuario. Este patrón de arquitectura de microservicios ofrece una gran flexibilidad y también permite la reutilización de microservicios en múltiples aplicaciones.

Crear servicios resilientes y escalables es fundamental. Para los microservicios sin estado, esto es bastante sencillo. Pero si es necesario persistir datos, en última instancia se necesita una arquitectura de base de datos resiliente que escale junto con el microservicio para respaldar el uso creciente del servicio.

Couchbase está construido sobre una arquitectura centrada en la memoria que ofrece no solo almacenamiento en caché integrado para un acceso de baja latencia a sus datos, sino también escalabilidad elástica. Esto le permite escalar individualmente los servicios de Couchbase sin interrumpir las operaciones de sus microservicios.

A medida que aumenta su volumen de datos, simplemente agrega más nodos de datos de Couchbase. Si necesita capacidad de consulta adicional, solo agregue nodos de consulta de Couchbase adicionales a su clúster.

Con este nivel de escalamiento multidimensional, sus diferentes servicios de Couchbase nunca necesitan competir por los recursos del sistema. En su lugar, la infraestructura subyacente se adapta a las necesidades específicas de cada servicio. Por ejemplo, el servicio de consulta de Couchbase utiliza una instancia de cómputo con mucha memoria para servir la mayor cantidad posible de datos desde la caché integrada, y utiliza un nodo con núcleos adicionales para admitir más consultas.

A Couchbase Server cluster featuring Query, Index and Data Service nodes
Escalabilidad y aislamiento de recursos en Couchbase

La arquitectura resiliente y distribuida de Couchbase también garantiza alta disponibilidad al mantener copias de réplica de sus datos. En caso de una falla de nodo, Couchbase realiza una conmutación por error 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, de modo que puedan desarrollarse, implementarse, controlarse en su acceso y escalarse de forma individual.

El acoplamiento flojo requiere que la infraestructura de base de datos subyacente admita el aislamiento de los datos para los microservicios individuales. Eso podría lograrse ya sea ejecutando instancias de bases de datos individuales por microservicio o controlando el acceso a las partes relevantes de los datos.

Si bien las bases de datos relacionales tradicionales admiten el aislamiento mediante esquemas de bases de datos, a menudo son 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 falla en caso de una interrupción en su infraestructura de bases de datos. Este es un aspecto importante a considerar al diseñar su arquitectura de microservicios, ya que una interrupción tiene grave consecuencias de que todos los microservicios compartan la misma base de datos.

Couchbase está diseñado para microservicios. Es una base de datos distribuida, altamente escalable y resiliente. Ofrece una gran flexibilidad y proporciona múltiples niveles de aislamiento para admitir hasta mil microservicios en el mismo clúster de Couchbase.

Couchbase Server 7 introduce el concepto de alcances y colecciones.

Los ámbitos y colecciones son contenedores lógicos creados dentro de un depósito que organizan y aíslan sus datos. Un depósito es un espacio de claves que le permite configurar la cuota de memoria individual, el disco y la prioridad de E/S. Estas configuraciónes proporcionan un aislamiento parcial de los recursos. Los depósitos, ámbitos y colecciones proporcionan gestión independiente del ciclo de vida y del despliegue en todos los niveles, incluido el control de acceso basado en roles, la replicación entre centros de datos (XDCR) y las copias de seguridad y restauración.

An architecture diagram of Couchbase Buckets, Scopes and Collections

Estas características brindan a sus equipos de desarrollo mayor flexibilidad y permiten múltiples patrones de microservicios. Analicemos más de cerca cuatro de esos patrones más comunes.

Patrón 1: Clúster de Couchbase dedicado por microservicio

El uso de un clúster de Couchbase dedicado proporciona un escalamiento independiente mediante el aislamiento físico. Si bien esta es una opción viable, puede no ser muy práctica al ejecutar cientos o incluso miles de microservicios.

An architecture with a dedicated Couchbase Server cluster per microservice

Patrón 2: Aislamiento mediante depósitos

En este patrón, se utilizan cubetas para aislar los microservicios.

En comparación con los clústeres dedicados, los buckets proporcionan un aislamiento parcial de recursos que incluye la asignación de memoria, E/S de disco y réplicas. Sin embargo, la cantidad de buckets por clúster de Couchbase es limitada, por lo que el número de microservicios admitidos en un solo clúster no puede superar los treinta.

Si no tiene requisitos estrictos para aislar los datos entre servicios, o si existen otras medidas para garantizar que cada microservicio solo funcione con su propio conjunto de datos, entonces varios microscervicios pueden compartir el mismo bucket. Por lo general, el uso compartido de buckets se logra identificando el documento ya sea por la clave del documento o por un atributo de tipo adicional en el documento.

De hecho, este patrón se usaba comúnmente antes de la introducción de ámbitos y colecciones en Couchbase 7.

A Couchbase cluster with microservices isolated into Buckets

Patrón 3: Aislamiento mediante colecciones

Un patrón de implementación de microservicios más potente es aprovechar Colecciones.

Si bien un bucket envolvente aún proporciona aislamiento de recursos, las Colecciones aíslan lógicamente y controlan el acceso para sus microservicios. Esto le permite ejecutar hasta 1000 microservicios en un solo clúster de Couchbase. En la ilustración a continuación, cada microservicio utiliza una Colección dedicada. El control de acceso basado en roles de Couchbase garantiza que cada microservicio solo acceda a su propio conjunto de datos en la colección correspondiente.

Microservices isolation using Couchbase Collections in a single Bucket

Patrón 4: Aislamiento mediante contenedores y colecciones

Este patrón de microservicios es similar al patrón anterior, pero en lugar de colocar todas las colecciones en un solo depósito, se agrupan en varios depósitos.

Este patrón le permite configurar el bucket de acuerdo con las características de los microservicios y/o colecciones incluidos. Con este enfoque, logra un aislamiento físico como la asignación de memoria y el recuento de réplicas para cada bucket individual y sus colecciones contenidas.

Couchbase Buckets and Collections to isolate microservices

No hay una única mejor solución para estructurar y aislar sus datos en Couchbase. Pero utilizando buckets, scopes y collections, usted tiene un sinfín de opciones para satisfacer fácilmente las necesidades específicas de su arquitectura de microservicios.

Despliegues en contenedores

No hay duda: los entornos de desarrollo actuales están migrando hacia los microservicios. Al mismo tiempo, la industria avanza hacia implementaciones en contenedores gestionadas a través de Kubernetes y OpenShift.

Con Couchbase, su aplicación de base de datos con estado, autónoma y totalmente administrada, se ejecuta junto a sus microservicios en la misma plataforma de Kubernetes. Este enfoque le brinda aislamiento completo y reduce su carga de trabajo de DevOps con conmutación por error automática e incluso escalado automático de su clúster.

Para más información, consulte el Couchbase Autonomous Operator.

Compartir este artículo

Autor

Marian Puhl es una ingeniera de soluciones sénior en Couchbase en la región nórdica.

¿Listo para comenzar con Couchbase Capella?

Comenzar a construir

Visita nuestro portal para desarrolladores para explorar NoSQL, consultar recursos y comenzar con los tutoriales.

Usa Capella gratis

Empieza a usar Couchbase en tan solo unos clics. Capella DBaaS es la forma más fácil y rápida de comenzar.

Ponte en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítenos ayudarte.