Aplicaciones distribuidas globalmente mediante Azure Cosmos DB

Cosmos DB
Traffic Manager

Las aplicaciones necesitan estar siempre en línea y tener una alta capacidad de respuesta. En este artículo se presenta una solución que usa aplicaciones distribuidas globalmente para cumplir estos requisitos. Aprovecha las capacidades de alta disponibilidad y baja latencia integradas en Azure Cosmos DB y en los centros de datos globales de Azure.

Architecture

Diagrama de arquitectura que muestra cómo Azure Traffic Manager enruta un usuario de aplicación hacia la mejor ubicación para acceder a Azure Cosmos DB.

Descargue una versión SVG de esta arquitectura.

Flujo de datos

  1. Un usuario accede a una aplicación a través de un cliente dedicado.
  2. Azure Traffic Manager usa un perfil de enrutamiento o perfiles anidados para enrutar la conexión del usuario hacia la mejor ubicación para acceder a la aplicación.
  3. En la región hacia la que se enruta al usuario, la aplicación establece una sesión y una conexión de base de datos.
  4. La solución puede dar cabida a aplicaciones de varias complejidades. Por ejemplo, la aplicación podría ser una página básica y estática. O podría ser una aplicación orientada a microservicios hospedada en Kubernetes.
  5. La conexión entre el entorno de la aplicación y Azure Cosmos DB se controla a través de un usuario de Azure Active Directory (Azure AD) que recupera las claves para Azure Cosmos DB en Azure Key Vault.
  6. La aplicación sabe cuál es la región más cercana y puede enviar las solicitudes a esa región mediante las API de hospedaje múltiple de Azure Cosmos DB. La región más cercana se identifica sin ningún cambio de configuración. Cuando agrega y quita regiones en y desde la cuenta de Azure Cosmos DB, no es necesario volver a implementar ni pausar la aplicación. La aplicación sigue teniendo alta disponibilidad. Entre bastidores, Azure Cosmos DB controla la distribución global y la replicación de los datos en función del número de regiones definidas. Si la opción de conmutación automática por error está activada y una región deja de estar disponible, el sistema conmuta por error a la región con la prioridad de conmutación por error más alta. No se requiere ninguna acción de usuario para esta conmutación por error. Las prioridades de la región se pueden modificar cuando se activa la conmutación automática por error.

Componentes

  • Traffic Manager es un equilibrador de carga de tráfico basado en DNS. Puede usar Traffic Manager para crear opciones de equilibrio de carga para las aplicaciones mediante varias opciones de enrutamiento de tráfico basadas en DNS que se pueden anidar.
  • Azure AD es un servicio de administración multiinquilino de identidad y acceso basado en la nube. Puede usar Azure AD para sincronizar directorios en el entorno local y habilitar el inicio de sesión único.
  • Azure Cosmos DB es una base de datos multimodelo distribuida globalmente para cualquier escala.

Alternativas

Puede ampliar este escenario con varias opciones de proceso y sin servidor.

Opciones de proceso

  • Azure Virtual Machines es una oferta de infraestructura como servicio (IaaS). Puede usar Virtual Machines para implementar recursos de computación a petición y escalables, como máquinas virtuales (VM) de Linux y de Windows.
  • Azure Kubernetes Service (AKS) es un servicio de Kubernetes totalmente administrado, de alta disponibilidad y seguro para cargas de trabajo de base de aplicaciones y microservicios.
  • Azure App Service proporciona un marco para compilar, implementar y escalar aplicaciones en la nube eficaces para escenarios web y móvil.

Opciones sin servidor

  • Azure Functions es una plataforma de proceso sin servidor, controlada por eventos. Con Functions, puede implementar y operar a escala en la nube y usar desencadenadores y enlaces para integrar los servicios.
  • Azure Logic Apps automatiza los flujos de trabajo. Con este servicio, puede crear rápidamente soluciones de integración eficaces.

Detalles del escenario

Las aplicaciones necesitan ofrecer tiempos de respuesta rápidos. Para lograr una latencia baja, las organizaciones implementan las aplicaciones cerca de sus usuarios. También mantienen los datos cerca de los usuarios. Cuando las organizaciones operan globalmente, necesitan usar varios centros de datos y aplicaciones distribuidas globalmente. Así, estas aplicaciones usan una copia local de datos replicados globalmente para mantener una alta capacidad de respuesta.

Esta solución usa aplicaciones distribuidas globalmente. También usa Azure Cosmos DB, que es un sistema de base de datos distribuido globalmente que replica datos de forma transparente en varias regiones. Las aplicaciones usan una réplica local de la base de datos para leer y escribir datos.

Además de ofrecer una baja latencia, la solución también se beneficia de la alta disponibilidad que proporciona Azure Cosmos DB.

Posibles casos de uso

Esta solución es una buena opción para los sectores que operan globalmente y necesitan mantener los datos cerca de sus usuarios. Entre los ejemplos se incluyen sectores como los medios de comunicación, el entretenimiento, el turismo y la hostelería. Algunos escenarios que usan aplicaciones distribuidas globalmente incluyen:

  • Servicios de vídeos en streaming para consumidores.
  • Servicios de recogida y entrega de personas y bienes que funcionan mediante aplicaciones.

Consideraciones

Estas consideraciones implementan los pilares del marco de buena arquitectura de Azure, que es un conjunto de principios guía que se pueden usar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.

Confiabilidad

La confiabilidad garantiza que la aplicación pueda cumplir los compromisos contraídos con los clientes. Para más información, consulte Resumen del pilar de fiabilidad.

La disponibilidad de la instancia de Azure Cosmos DB depende de muchos factores. A mayor número de regiones en las que se replique Azure Cosmos DB, mayor será la disponibilidad de la aplicación. Cada región contiene todas las particiones de datos de un contenedor de Azure Cosmos DB y puede atender operaciones de escritura de forma predeterminada. Para aumentar la disponibilidad de la capa de datos, puede habilitar la escritura en varias regiones. También puede aumentar la disponibilidad mediante el empleo de niveles de coherencia y zonas de disponibilidad más débiles.

Para configurar la solución para maximizar el Acuerdo de Nivel de Servicio (SLA) que ofrece la aplicación, use la conmutación automática por error de Azure Cosmos DB.

Para la capa de aplicación, configure Traffic Manager con perfiles anidados. Al insertar este diseño en el nivel más alto, puede escalar las distintas opciones de la aplicación por región. La implementación por región también adopta un enfoque de alta disponibilidad.

Para una mayor resistencia, puede usar zonas de disponibilidad para las implementaciones de Azure Cosmos DB. La resistencia también depende del nivel de coherencia que use en su implementación de Azure Cosmos DB. Para obtener más información, consulte Inconvenientes de la coherencia, disponibilidad y rendimiento.

Seguridad

La seguridad proporciona garantías contra ataques deliberados y el abuso de datos y sistemas valiosos. Para más información, consulte Introducción al pilar de seguridad.

Desde una perspectiva de seguridad, opte por un sistema basado en identidades, donde se pueda usar Azure AD para proteger el acceso al entorno. En el back-end, acceda a la aplicación a través de identidades administradas. Como alternativa, considere la posibilidad de utilizar usuarios de Azure AD y la solución Key Vault para proteger el acceso. La instancia de Azure Cosmos DB debe protegerse aún más. Convierta los distintos back-end que se implementan en diferentes regiones en las únicas entidades que son capaces de leer y escribir en la instancia de base de datos. Aplique una restricción de dirección IP a la cuenta mediante el firewall integrado.

Azure Cosmos DB también admite el control de acceso basado en roles con Azure AD. Para más información, consulte Configuración del control de acceso basado en roles con Azure Active Directory para la cuenta de Azure Cosmos DB.

Eficiencia del rendimiento

La eficiencia del rendimiento es la capacidad de la carga de trabajo para escalar con el fin de satisfacer de manera eficiente las demandas que los usuarios hayan ejercido sobre ella. Para obtener más información, vea Resumen del pilar de eficiencia del rendimiento.

El rendimiento del sistema se ve afectado por muchos factores en el nivel de proceso y de base de datos. La SKU de un plan de App Service u otra opción de proceso afecta a la memoria y a los núcleos que están disponibles en cada región. Además, el número de regiones en las que se implementa la capa de proceso puede determinar la escala que es capaz de controlar. La implementación de más ubicaciones alivia la presión de las regiones existentes y debería provocar aumentos lineales en el rendimiento máximo que puede satisfacer la aplicación.

Configure Azure Cosmos DB para que no cause un cuello de botella con los recursos del nivel de proceso. Cada base de datos y contenedor de Azure Cosmos DB debe configurarse para el escalado automático, y se les debe proporcionar un valor máximo de unidad de solicitud que garantice que Azure Cosmos DB no limite las solicitudes. Para determinar los valores de unidad de solicitud máxima adecuados para las entidades de Azure Cosmos DB, puede ejecutar pruebas de carga cerca del rendimiento máximo aproximado de la aplicación. En comparación con sus homólogos más fuertes, los niveles de coherencia más débiles ofrecen mayores ventajas de rendimiento y capacidad de proceso.

Fundamentalmente, al implementar la lógica en código que realiza operaciones de lectura y escritura desde y hacia Azure Cosmos DB, ya sea a través del SDK, enlaces de Functions, etc., debe usarse PreferredLocations para que cada API regional enrute las solicitudes a la región de Azure Cosmos DB más cercana. Según la configuración de la cuenta de Azure Cosmos DB, la disponibilidad regional actual y la lista de preferencias especificada, el SDK elegirá el punto de conexión óptimo para realizar las operaciones de lectura y escritura. Este proceso da lugar a importantes aumentos en el rendimiento.

El escalado se basa en muchos niveles en esta solución. Azure Cosmos DB está diseñado específicamente para el escalado elástico y un rendimiento predecible. En el nivel de la aplicación, debe consultar el modelo de proceso usado. Functions y App Service se pueden escalar automáticamente. En el caso de las máquinas virtuales de Azure, puede usar Azure Virtual Machine Scale Sets. En caso de conocer esta necesidad, debe optar por una opción sin servidor siempre que sea posible.

Pasos siguientes

Obtener más información sobre Azure Cosmos DB:

Más información sobre Traffic Manager:

Ideas de soluciones relacionadas:

Arquitecturas completas relacionadas:

Guía de arquitectura relacionada: