Persistencia políglota con Azure Cosmos DB y Azure SQL Database

Azure Cosmos DB
Azure SQL Database
Azure API Management

Ideas de soluciones

En este artículo se describe una idea de solución. Su arquitecto de la nube puede usar esta guía para ayudar a visualizar los componentes principales de una implementación típica de esta arquitectura. Utilice este artículo como punto de partida para diseñar una solución bien arquitectada que se alinee con los requisitos específicos de su carga de trabajo.

Las aplicaciones suelen controlar diversas cargas de trabajo de datos que tienen características diferentes. Los datos estructurados y transaccionales requieren integridad relacional y consultas complejas. Los datos semiestructurados, cambiantes o de gran volumen requieren esquemas flexibles y escalabilidad horizontal. Las bases de datos como Azure SQL Database y Azure Cosmos DB pueden admitir diversas cargas de trabajo y requisitos de varios modelos. Sin embargo, en determinados escenarios, las organizaciones pueden lograr mejores resultados combinando SQL Database y Azure Cosmos DB en una arquitectura de persistencia políglota.

Algunas cargas de trabajo necesitan garantías transaccionales estrictas y consultas relacionales complejas de una base de datos relacional, mientras que otras cargas de trabajo necesitan los esquemas flexibles y la escalabilidad horizontal de una base de datos de NoSQL. Un enfoque políglota asigna cada carga de trabajo a la plataforma diseñada para su patrón de acceso dominante, en lugar de obligar a una única plataforma a gestionar requisitos para los que no está optimizada. Para obtener más información, consulte Consideraciones de datos para microservicios.

Diagrama que muestra un cliente que llama a un proxy de API que dirige las solicitudes a dos API y a bases de datos NoSQL y relacionales independientes.

En este artículo se describe un enfoque de persistencia poliglot que empareja SQL Database con Azure Cosmos DB para que pueda configurar cada carga de trabajo para usar la base de datos que mejor se adapte a sus requisitos:

  • SQL Database administra datos que requieren consultas complejas, integridad relacional y transacciones con propiedades de atomicidad, consistencia, aislamiento y durabilidad (ACID). SQL Database también admite capacidades multimodelo, como JSON, grafos, datos espaciales y datos vectoriales, junto con cargas de trabajo analíticas mediante índices de almacén de columnas. Los registros de transacciones financieras son adecuados para esta base de datos porque requieren transacciones coherentes de varias tablas que abarcan elementos de línea, inventario y cuentas.

  • Azure Cosmos DB controla datos de gran volumen, flexibles de esquema o distribuidos globalmente que requieren acceso de baja latencia y escalabilidad elástica. Los catálogos de comercio electrónico son adecuados para esta base de datos porque sus esquemas evolucionan con frecuencia y los compradores esperan lecturas submillisegundas independientemente de la región.

Con un enfoque de microservicios controlado por dominio, cada servicio usa la base de datos que se ajusta a sus características de datos. Cada microservicio posee su almacén de datos privado. Este diseño evita el acoplamiento accidental entre los servicios y admite actualizaciones e implementaciones independientes sin coordinar los cambios en el sistema.

Arquitectura

Diagrama que muestra una arquitectura de persistencia poliglot donde los microservicios controlados por dominio usan Azure Cosmos DB o SQL Database, en función de los requisitos de datos.

Descargue un archivo de Visio de esta arquitectura.

Flujo de datos

El siguiente flujo de datos corresponde al diagrama anterior:

  1. Los usuarios y las aplicaciones cliente se conectan al sistema a través de Azure API Management, que proporciona una puerta de enlace unificada para todos los microservicios back-end.

  2. API Management enruta las solicitudes a los microservicios controlados por dominio adecuados. Cada microservicio posee su almacén de datos de forma independiente.

  3. Los microservicios que controlan cargas de trabajo distribuidas de forma flexible, de gran volumen o distribuidas globalmente, como perfiles de usuario, estado de sesión, catálogos de productos y carros de la compra, usan Azure Cosmos DB. Azure Cosmos DB almacena estos datos como documentos JSON, proporciona tiempos de respuesta de milisegundos de un solo dígito y se escala horizontalmente.

  4. Los microservicios que controlan cargas de trabajo estructuradas y transaccionales, como la administración de pedidos, el inventario y los pagos, usan SQL Database. SQL Database proporciona compatibilidad completa con ACID, compatibilidad con consultas complejas e integridad relacional para estas operaciones.

  5. Algunos microservicios se comunican entre sí para cumplir los requisitos de datos entre dominios. Por ejemplo, el servicio de carro de la compra consulta el servicio de sesión de usuario para el contexto de sesión y los servicios de administración de inventario y pedidos interactúan con el servicio de catálogo de productos para obtener información sobre el producto. Estas llamadas entre microservicios usan API de servicio en lugar de acceder directamente a la base de datos de otro servicio, que conserva los límites de propiedad de los datos.

Components

  • API Management es una plataforma de administración y una puerta de enlace para las API que enrutan las solicitudes de cliente a las API, aplica límites de frecuencia y almacena en caché las respuestas y controla la autenticación. En esta arquitectura, proporciona un punto de entrada unificado que enruta las solicitudes de cliente a los microservicios de dominio adecuados.

  • Azure Cosmos DB es una base de datos multimodelo distribuida globalmente que permite a las aplicaciones escalar de forma elástica e independiente el rendimiento y el almacenamiento. En esta arquitectura, almacena datos para cargas de trabajo que requieren esquemas flexibles, acceso de baja latencia, escalabilidad horizontal o distribución global. Algunos ejemplos son los perfiles de usuario, el estado de sesión, los catálogos de productos y los carros de la compra.

  • SQL Database es un motor de base de datos relacional en la nube totalmente administrado que normalmente incluye funcionalidades antes de que estén disponibles en la versión pública más reciente de SQL Server. Además de los datos relacionales, admite cargas de trabajo de varios modelos, como JSON, grafo, espacial y datos vectoriales dentro de la misma base de datos. En esta arquitectura, gestiona las cargas de trabajo que requieren cumplimiento de ACID, integridad relacional y soporte para consultas complejas. Algunos ejemplos son la administración de pedidos, el seguimiento del inventario y el procesamiento de pagos.

Detalles del escenario

Las aplicaciones suelen combinar operaciones transaccionales con datos de gran volumen o de rápida evolución. Los datos estructurados y transaccionales requieren integridad relacional y consultas complejas. Los datos semiestructurados, en constante evolución o de gran volumen requieren esquemas flexibles y escalabilidad horizontal. Con un enfoque de persistencia políglota, puede asignar cada carga de trabajo a la tecnología de bases de datos que mejor se adapte a sus requisitos.

Los microservicios controlados por dominio aplican límites claros de propiedad de datos, por lo que cada servicio administra su propio almacén de datos de forma independiente. Este enfoque presenta desafíos como la redundancia de datos entre almacenes y la coherencia final entre los servicios. Una arquitectura poliglot también aumenta la complejidad operativa en comparación con una plataforma de base de datos única. El equipo debe desarrollar y mantener la experiencia en ambas tecnologías de base de datos, lo que aumenta la sobrecarga operativa y el entrenamiento.

Las siguientes ventajas ayudan a compensar esos desafíos:

  • Escalabilidad independiente: Cada base de datos se escala según su carga de trabajo. Azure Cosmos DB controla las ráfagas de lectura y escritura de millones de operaciones por segundo con una latencia baja garantizada. SQL Database proporciona proceso aprovisionado para cargas de trabajo estables y escalado automático sin servidor, con funcionalidades de escalado a cero para cargas de trabajo impredecibles.

  • Modelado de datos adecuado: SQL Database proporciona esquemas relacionales, claves externas y combinaciones para los datos que tienen relaciones bien definidas. Azure Cosmos DB proporciona almacenamiento independiente del esquema con indexación automática para los datos que evolucionan con frecuencia.

  • Distribución global de datos: Azure Cosmos DB proporciona replicación automática multirregión con un acuerdo de nivel de servicio (SLA) de disponibilidad de lectura del 99,999 % para las cargas de trabajo que requieren acceso de baja latencia a los datos en todo el mundo. SQL Database proporciona replicación geográfica para escenarios de lectura multiregión y réplicas con nombre de Hiperescala para escalado de lectura dentro de una región.

  • Asignación de costos optimizada: Cada servicio usa su propio modelo de precios. SQL Database proporciona precios predecibles para cargas de trabajo transaccionales estables. Azure Cosmos DB proporciona capacidad de proceso de pago por petición para cargas de trabajo muy dinámicas o con picos. La separación de tareas evita sobreaprovisionar un único sistema.

  • Capacidad compartida para cargas de trabajo multiinquilino: Ambos servicios admiten modelos de implementación de capacidad compartida. SQL Database proporciona grupos elásticos para consolidar bases de datos entre inquilinos. Azure Cosmos DB proporciona grupos de flotas para un uso compartido eficaz de recursos multiinquilino. Estas opciones mantienen el aislamiento al tiempo que reducen los costos por inquilino.

Cuándo usar cada servicio

SQL Database y Azure Cosmos DB tienen funcionalidades superpuestas. Ambos servicios pueden almacenar JSON y entregar respuestas de baja latencia cuando se configuran correctamente. La decisión depende de qué puntos fuertes de diseño principal del servicio se alineen con los patrones de acceso dominantes de la carga de trabajo:

  • Elija Azure Cosmos DB cuando la carga de trabajo requiera principalmente almacenamiento de documentos con esquemas flexibles, distribución automática en varias regiones con lecturas garantizadas de un solo dígito de milisegundos o escalado horizontal elástico en todas las particiones. Estas características son puntos fuertes nativos de Azure Cosmos DB y representan su ruta de acceso optimizada.

  • Elija SQL Database cuando la carga de trabajo requiera principalmente integridad relacional aplicada entre tablas, transacciones ACID de varios estados o combinaciones y agregaciones complejas. Estas características son puntos fuertes nativos de SQL Database y representan su ruta de acceso optimizada.

Cuando los requisitos de una carga de trabajo no favorecen claramente un servicio, evalúe el patrón de acceso dominante en lugar de las funcionalidades secundarias. Por ejemplo, SQL Database admite el almacenamiento JSON, pero una carga de trabajo que consta principalmente de documentos JSON flexibles de esquema con un rendimiento de escritura alto se adapta mejor a Azure Cosmos DB. Para obtener criterios de selección detallados, consulte Prepare para elegir un almacén de datos en Azure.

Posibles casos de uso

Esta arquitectura se adapta a las aplicaciones que controlan varios tipos de carga de trabajo de datos que tienen diferentes requisitos de coherencia, escalabilidad y esquema:

  • E-commerce y retail: Aplicaciones que usan SQL Database para cuentas de cliente, pedidos e inventario, y Azure Cosmos DB para catálogos de productos, personalización y datos de sesión en tiempo real.

  • Software como servicio (SaaS): Aplicaciones multiinquilino que almacenan datos relacionales por inquilino en SQL Database y metadatos compartidos replicados globalmente o el contenido de la sesión del usuario en Azure Cosmos DB.

  • Atención sanitaria e Internet de las cosas (IoT): Sistemas que almacenan resultados agregados, datos de referencia o informes finales en SQL Database e incorporan métricas de gran volumen o datos de sensores en Azure Cosmos DB.

  • Servicios financieros: plataformas de pago y comercio que usan SQL Database para la integridad transaccional a través de registros financieros y Azure Cosmos DB para el acceso distribuido globalmente y de baja latencia a los datos operativos o de cartera.

  • Aplicaciones mejoradas con IA: soluciones que utilizan SQL Database para registros relacionales de transacciones y acuerdos, y Azure Cosmos DB para almacenar metadatos generados por IA, sesiones de chat o artefactos contextuales que requieren un esquema flexible y un acceso rápido.

Optimización de costos

La optimización de costos se centra en formas de reducir los gastos innecesarios y mejorar las eficiencias operativas. Para obtener más información, consulte Lista de comprobación de revisión de diseño para la optimización de costes.

  • Evite el sobreaprovisionamiento separando las cargas de trabajo en función de las características de los datos. Ubicar las lecturas NoSQL de gran volumen en Azure Cosmos DB y las consultas transaccionales complejas en la SQL Database permite que cada servicio funcione dentro de su perfil de costes óptimo.

  • SQL Database proporciona niveles de proceso aprovisionados y sin servidor . Utilice capacidad de cómputo aprovisionada para cargas de trabajo transaccionales constantes. Sin servidor puede reducir los costos de las cargas de trabajo intermitentes o impredecibles, pero la latencia de arranque en frío puede afectar a los tiempos de respuesta después de períodos de inactividad.

Azure Cosmos DB ofrece los modos rendimiento aprovisionado y sin servidor. Utilice el rendimiento aprovisionado en modo de escalado automático para cargas de trabajo de producción con demanda variable. La informática sin servidor puede reducir los costes en las cargas de trabajo de desarrollo y con poco tráfico, pero la latencia de inicio en frío puede afectar a los tiempos de respuesta tras periodos de inactividad.

Tip

Para calcular el coste de los recursos de Azure para esta idea de solución, use la estimación preconfigurada en la calculadora de precios de Azure.

Pasos siguientes