Cómo maximizar la disponibilidad de Azure Cosmos DB

La mayoría de las aplicaciones de comercio electrónico no toleran ningún tiempo de inactividad. Cualquier impacto en los recursos de la aplicación puede afectar las métricas de disponibilidad del sitio. La base de datos Azure Cosmos es una de las principales bases de datos NoSQL utilizadas en la industria. Aunque Azure Cosmos en sí proporciona una disponibilidad mínima del 99.99% para una sola región sin una zona de disponibilidad, ¿cómo podemos mejorar aún más la disponibilidad de la base de datos con las opciones disponibles en Azure Cosmos?

Lectura y escritura en múltiples regiones

Las lecturas en una sola región afectarán la disponibilidad y también pueden llevar a un único punto de fallo. Por lo tanto, las aplicaciones con una alta carga de lectura deben tener habilitada la lectura en múltiples regiones, aunque la escritura en múltiples regiones no sea una opción para una aplicación. Sin embargo, la escritura en múltiples regiones proporciona una mayor disponibilidad tanto para aplicaciones con carga de lectura como de escritura.

Con la capacidad de escritura en múltiples regiones, puede habilitar la replicación en múltiples maestros, donde todas las regiones configuradas pueden funcionar como puntos de escritura.

Mejores prácticas

  • Seleccione regiones más cercanas a la región donde se implementa la aplicación.
  • Configure múltiples regiones preferidas en función de los requisitos de la aplicación para mejorar la disponibilidad.
  • Configure más de una región preferida en la aplicación para lecturas y escrituras con el fin de mejorar la disponibilidad y reducir la latencia.
  • Establezca las regiones preferidas en el orden de las regiones actuales o más cercanas de la aplicación primero en la lista.

Aplicación implementada en West US 2

Java

 

 // Configure la aplicación implementada en West US 2 de la siguiente manera 

import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;

// ...

CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
    .setEndpoint(accountEndpoint)
    .setKey(accountKey)
    .setPreferredRegions(Arrays.asList("West US 2", "East US"));

CosmosClient client = clientBuilder.buildClient();

// 

Aplicación implementada en East US

Java

 

//Configurar la aplicación desplegada en East US como se indica a continuación
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;

// ...

CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
    .setEndpoint(accountEndpoint)
    .setKey(accountKey)
    .setPreferredRegions(Arrays.asList( "East US","West US 2"));

CosmosClient client = clientBuilder.buildClient();

// 

Conclusión

Aunque habilitar la lectura y escritura en múltiples regiones puede proporcionar una mayor disponibilidad, configurar la lectura y escritura de la aplicación más cerca de la región en la que se despliega y proporcionar más de una región preferida ayuda a que la aplicación se recupere inmediatamente en la región disponible sin ninguna intervención manual.

Niveles de Consistencia

Seleccione los niveles de consistencia en función de los requisitos de la aplicación. Las expectativas de una mayor consistencia generalmente resultan en una menor disponibilidad. Si la aplicación requiere una fuerte consistencia de datos, asegúrese de que pueda tolerar posibles latencias más altas. Por el contrario, si se acepta una consistencia más débil, la aplicación puede beneficiarse de una mayor capacidad de rendimiento y disponibilidad.

Conclusión

Elegir el nivel de consistencia adecuado depende únicamente de las necesidades de la aplicación y, aunque puede haber un impacto en la disponibilidad de una mayor consistencia, la disponibilidad general de una aplicación no se verá afectada al elegir los niveles de consistencia más altos.

Conmutación por error

Conmutación por error manual

Los desarrolladores o asociados pueden iniciar sesión en el portal y conmutar manualmente a la siguiente región disponible durante una interrupción en la región a la que está conectada actualmente la aplicación. Aunque esta opción proporciona disponibilidad en cierta medida, requiere una intervención manual para la conmutación por error, lo que puede afectar las métricas generales de disponibilidad del sitio.

Conmutación por error gestionada por el servicio

Permitir el conmutador gestionado por el servicio permite a Cosmos cambiar automáticamente a la siguiente región disponible según la prioridad configurada en el portal. Esta opción elimina la necesidad de realizar cambios en la aplicación durante el proceso de conmutación.

Conclusión

Aunque ambos proporcionan una mayor disponibilidad, el rendimiento de conmutación gestionado por el servicio brinda la flexibilidad de cambiar a la siguiente región disponible sin preocuparse por la implementación de la aplicación.

Clave de partición e índices

  • Definir una clave de partición en Azure Cosmos DB es crucial antes de ejecutar cualquier aplicación en ella. Cosmos DB es altamente eficiente para aplicaciones intensivas en lectura, por lo que es esencial considerar los criterios de búsqueda y definir las consultas para leer registros de la base de datos antes de integrar Cosmos DB en su aplicación.
  • Por defecto, todos los elementos en un contenedor de Cosmos DB se indexan automáticamente. Sin embargo, excluir ciertos elementos o campos de la indexación puede ayudar a reducir el consumo de unidades de solicitud (RU). Es tan importante agregar campos para la indexación como eliminar índices en campos que no requieren ser indexados.
  • Evite almacenar elementos excesivamente grandes en Azure Cosmos DB.
  • Minimice las consultas entre particiones siempre que sea posible.
  • Asegúrese de que las consultas incluyan filtros para mejorar la eficiencia.
  • Evite consultar repetidamente la misma clave de partición; en su lugar, implemente una capa de almacenamiento en caché en dichos casos de uso.

Escalado automático del rendimiento

Azure Cosmos DB admite tanto el rendimiento estándar (manual) como el escalado automático a nivel de contenedor.

Rendimiento manual

La aplicación decide los RU/s permitidos, y si se alcanza el límite de los RU/s, las solicitudes serán limitadas durante el tiempo configurado. Requiere intervención manual para aumentar el rendimiento.

Escalado automático del rendimiento

La aplicación puede configurar el rendimiento máximo que admite, y Cosmos se autoescala según el tráfico recibido. Al superar el rendimiento de escalado automático, las solicitudes serán limitadas durante el tiempo configurado.

Conclusión

Aunque ambos proporcionan una mayor disponibilidad, el rendimiento de escalado automático brinda la flexibilidad de manejar el tráfico variable sin limitaciones ni impacto en la disponibilidad.

Copia de seguridad y restauración

Azure Cosmos DB habilita copias de seguridad periódicas de forma predeterminada para todas las cuentas

Copia de seguridad periódica

Las copias de seguridad se realizan periódicamente para cada minuto configurado con un valor mínimo de 1 hora y un máximo de 24 horas. También proporciona opciones para mantener la redundancia de almacenamiento de copias de seguridad a nivel Geo, Zona o Local. El equipo de aplicación debe comunicarse con el soporte para recuperar la copia de seguridad.

Copia de seguridad continua

La opción de copia de seguridad continua mantiene el almacenamiento de copias de seguridad en la base de datos de Cosmos de la región configurada, y permite la retención de datos de los últimos 7 días o de los últimos 30 días. También proporciona restauración en un momento específico.

Conclusión

Optar por la copia de seguridad continua garantiza una restauración más rápida de la base de datos. Esto elimina la necesidad de interacciones constantes con el soporte para restaurar la base de datos y permite a las aplicaciones restaurarla en cualquier región (donde existan copias de seguridad) en un momento específico.

En conclusión, si bien las métricas de disponibilidad son cruciales para cualquier aplicación, tienen un costo. Las opciones que ofrecen mayor disponibilidad que la configuración estándar incurren en gastos adicionales. Además, las opciones mencionadas anteriormente pueden no ser necesarias o adecuadas para todas las aplicaciones que utilizan Cosmos. Sin embargo, es fundamental adoptar e implementar las mejores prácticas en Azure Cosmos para optimizar la disponibilidad de manera efectiva.

Source:
https://dzone.com/articles/how-to-maximize-the-azure-cosmos-db-availability