Comment maximiser la disponibilité d’Azure Cosmos DB

La plupart des applications de commerce électronique sont tolérantes à zéro temps d’arrêt. Tout impact sur les ressources de l’application peut affecter les métriques de disponibilité globale du site. La base de données Azure Cosmos est l’une des principales bases de données NoSQL utilisées dans l’industrie. Bien qu’Azure Cosmos lui-même fournisse une disponibilité minimale de 99,99 % pour une seule région sans zone de disponibilité, comment pouvons-nous améliorer davantage la disponibilité de la base de données avec les options disponibles dans Azure Cosmos ?

Lecture et écriture multi-régions

Les lectures dans une seule région auront un impact sur la disponibilité et entraîneront également un point de défaillance unique. Ainsi, les applications à forte lecture devraient au moins activer la lecture multi-régions, bien que les écritures multi-régions ne soient pas une option pour une application. Cependant, l’écriture multi-régions offre une plus grande disponibilité pour les applications à la fois en lecture et en écriture.

Avec la capacité d’écriture multi-régions, vous pouvez activer la réplication multi-maîtres, où toutes les régions configurées peuvent servir de points de terminaison en écriture.

Meilleures pratiques

  • Sélectionnez les régions les plus proches de la région où l’application est déployée.
  • Configurez plusieurs régions préférées en fonction des besoins de l’application pour améliorer la disponibilité.
  • Configurez plus d’une région préférée dans l’application pour les lectures et les écritures afin d’améliorer la disponibilité et de réduire la latence.
  • Configurez les régions préférées dans l’ordre des régions actuelles de l’application ou les plus proches en premier dans la liste.

Application déployée dans West US 2

Java

 

//Configurez l'application déployée dans West US 2 comme suit

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();

// 

Application déployée dans East US

Java

 

//Configurer l'application déployée dans l'Est des États-Unis comme ci-dessous
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();

// 

Conclusion

Bien que l’activation de la lecture et de l’écriture multi-régions puisse offrir une plus grande disponibilité, configurer les lectures et écritures de l’application plus près de la région où elle est déployée et fournir plus d’une région préférée aide l’application à revenir immédiatement à la région disponible sans aucune intervention manuelle.

Niveaux de cohérence

Sélectionnez les niveaux de cohérence en fonction des exigences de l’application. Des attentes de cohérence plus élevées entraînent généralement une disponibilité réduite. Si l’application exige une forte cohérence des données, assurez-vous qu’elle peut tolérer des latences potentiellement plus élevées. En revanche, si une cohérence plus faible est acceptable, l’application peut bénéficier d’un meilleur débit et d’une meilleure disponibilité.

Conclusion

Choisir le bon niveau de cohérence dépend uniquement des besoins de l’application, et bien qu’il puisse y avoir un impact sur la disponibilité d’une cohérence plus forte, la disponibilité globale d’une application ne sera pas impactée par le choix de niveaux de cohérence plus forts.

Basculement

Basculement manuel

Les développeurs ou les associés peuvent se connecter au portail et basculer manuellement vers la région disponible suivante pendant une panne dans la région à laquelle l’application est actuellement connectée. Bien que cette option offre une certaine disponibilité, elle nécessite une intervention manuelle pour basculer, ce qui peut impacter les métriques de disponibilité globales du site.

Basculement géré par le service

L’activation du basculement géré par le service permet à Cosmos de passer automatiquement à la région suivante disponible en fonction de la priorité configurée dans le portail. Cette option élimine le besoin de tout changement d’application pendant le processus de basculement.

Conclusion

Bien que les deux offrent une disponibilité accrue, le débit du basculement géré par le service offre la flexibilité de basculer vers la région suivante disponible sans se soucier du déploiement de l’application.

Clé de partition et Index

  • La définition d’une clé de partition dans Azure Cosmos DB est cruciale avant d’exécuter une application dessus. Cosmos DB est très efficace pour les applications à forte intensité de lecture, il est donc essentiel de prendre en compte les critères de recherche et de définir les requêtes pour lire des enregistrements de la base de données avant d’intégrer Cosmos DB dans votre application.
  • Par défaut, chaque élément dans un conteneur Cosmos DB est automatiquement indexé. Cependant, exclure certains éléments ou champs de l’indexation peut aider à réduire la consommation d’unités de requête (RUs). Il est tout aussi important d’ajouter des champs pour l’indexation que de supprimer les index sur des champs qui ne doivent pas être indexés.
  • Évitez de stocker des éléments excessivement volumineux dans Azure Cosmos DB.  
  • Minimisez les requêtes inter-partitions autant que possible.  
  • Assurez-vous que les requêtes incluent des filtres pour améliorer l’efficacité.  
  • Évitez de interroger la même clé de partition de manière répétée; plutôt, mettez en œuvre une couche de mise en cache sur de tels cas d’utilisation.

Auto-évolutivité du débit

Azure Cosmos DB prend en charge à la fois le débit standard (manuel) et l’auto-évolutivité au niveau du conteneur.

Débit manuel

L’application décide des RU/s autorisées, et le fait de maximiser les demandes RU/s entraînera un ralentissement pour le temps configuré. Nécessite une intervention manuelle pour augmenter le débit.

Auto-évolutivité du débit

L’application peut configurer le débit maximal qu’elle prend en charge, et Cosmos s’auto-évolue en fonction du trafic reçu. En cas de dépassement du débit en auto-évolutivité, les demandes seront ralenties pour le temps configuré.

Conclusion

Bien que les deux offrent une disponibilité accrue, l’auto-évolutivité du débit offre la flexibilité de gérer un trafic variable sans ralentissement ni impact sur la disponibilité.

Sauvegarde et restauration

Azure Cosmos DB permet des sauvegardes périodiques par défaut pour tous les comptes

Sauvegarde périodique

Les sauvegardes sont effectuées périodiquement pour chaque minute configurée avec une valeur minimale de 1 heure et maximale de 24 heures. Il offre également des options pour garder la redondance de stockage de sauvegarde au niveau Géo, Zone ou Local. L’équipe d’application doit contacter le support pour récupérer la sauvegarde.

Sauvegarde continue

L’option de sauvegarde continue garde le stockage de sauvegarde sur la base de données Cosmos de la région configurée, et permet la conservation des données des 7 derniers jours ou des 30 derniers jours. Il offre également une restauration à un instant donné.

Conclusion

Opter pour une sauvegarde continue assure une restauration plus rapide de la base de données. Cela élimine le besoin d’interactions répétées avec le support pour restaurer la base de données et permet aux applications de la restaurer dans n’importe quelle région (où les sauvegardes existent) à un instant précis.

En conclusion, bien que les métriques de disponibilité soient cruciales pour toute application, elles ont un coût. Les options offrant une disponibilité plus élevée que la configuration standard entraînent des dépenses supplémentaires. De plus, les options mentionnées ci-dessus peuvent ne pas être nécessaires ou adaptées à toutes les applications utilisant Cosmos. Cependant, il est essentiel d’adopter et de mettre en œuvre les meilleures pratiques dans Azure Cosmos pour optimiser efficacement la disponibilité.

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