Si votre application s'appuie fortement sur des données et interagit fréquemment avec une base de données, la mise en cache devient cruciale pour atténuer les coûts associés. Les applications en ligne qui utilisent la mise en cache pour accélérer la récupération des données, la mise en œuvre d'une réplication et d'une cohérence solides des données est indispensable.
La réplication des données est essentielle pour créer une sauvegarde des données critiques sur plusieurs serveurs, garantissant ainsi des informations précises et accessibles. De même, de tels mécanismes de cohérence sont essentiels pour synchroniser de manière transparente ces copies distribuées, évitant ainsi toute divergence dans le processus de candidature. Par conséquent, pour garantir que votre application interagit avec des données précises et à jour, vous devez utiliser ces fonctionnalités pour les sauvegardes, la haute disponibilité et la cohérence des données.
Heureusement, NCache fournit un ensemble fiable de mécanismes de réplication et de synchronisation pour de tels systèmes distribués. Ce blog détaille comment NCache remplit ces conditions.
NCache Topologies
Les topologies de mise en cache prises en charge par NCache inclure Topologie en miroir, Topologie répliquée, Topologie de partition et de réplique de partitionet Topologie du cache client.
- Topologie miroir : Pour toutes les opérations de lecture et d'écriture dans la topologie Mirrored Cache, les nœuds clients se connectent uniquement au nœud de serveur actif du cluster. Les applications client établissent immédiatement une connexion avec le nœud précédemment passif si le nœud serveur actif tombe en panne.
- Topologie répliquée : La topologie répliquée garantit que si plusieurs serveurs tombent en panne en même temps, les données ne sont pas perdues puisque chaque serveur possède la même copie de données.
- Topologie des partitions : En connectant toutes les applications client aux serveurs de cache, la topologie de partition offre une haute disponibilité des données en divisant les données en morceaux, connectant ainsi toutes les applications client aux serveurs de cache. De cette manière, l'application obtient les données requises même si le serveur connecté tombe en panne, en sollicitant les autres serveurs.
- Topologie de partition-réplique : La topologie Partition-Replica crée non seulement des partitions dynamiques, mais également des répliques dynamiques de ces partitions sur d'autres nœuds de serveur, qui agissent comme une sauvegarde en cas d'échec de connexion ou de nœud. Dans ces situations, NCache obtient les données du nœud de réplique et les distribue.
- Topologie du cache client: Dans la topologie du cache client, le cache réside très près de votre application et vous permet de mettre rapidement en cache les données du cache distribué.
Apprenez-en plus sur les topologies dans le blog : Mise à l'échelle et maintien : exploration des topologies dans NCache.
Réplication des données dans NCache
L'objectif principal de la réplication des données est de garantir la cohérence, la disponibilité et la tolérance aux pannes des données. En conservant des copies identiques de données dans différents emplacements, les systèmes peuvent améliorer les performances, réduire la latence et se protéger contre d'éventuelles pertes de données ou pannes de serveur.
Il est soit synchrone, soit asynchrone, selon la topologie utilisée. En réplication synchrone, NCache garantit que les données sont écrites simultanément sur le serveur de cache principal et ses répliques. Cependant, cette méthode garantit une forte cohérence des données, mais les performances peuvent en souffrir, car toute opération d'écriture dans le cache doit attendre la confirmation de toutes les répliques.
Alternativement, la réplication asynchrone met à jour les réplicas après avoir écrit les données sur le serveur de cache principal. Étant donné que ces opérations d'écriture dans les caches n'attendent pas la confirmation du réplica, cette stratégie offre des gains de performances plus importants. Bien que cette stratégie puisse entraîner des incohérences temporaires des données entre les réplicas et le serveur de cache principal.
Topologies pour la réplication de données synchrone et asynchrone
Chacune des topologies présentées offre son propre ensemble de caractéristiques, mais toutes ne conviennent pas à la réplication des données. Par exemple, la réplication synchronisée, utilisée dans le Topologie de cache en miroir, garantit la cohérence des données en écrivant simultanément sur les nœuds principal et réplica. D'un autre côté, en écrivant d'abord sur les nœuds principaux et en mettant à jour les réplicas ultérieurement, la réplication asynchrone, utilisée dans le Topologie du cache répliqué, améliore l'efficacité mais peut parfois entraîner des erreurs.
Heureusement, le Topologie de réplication de partition établit un équilibre entre redondance, disponibilité et performances en combinant les avantages des topologies de cache partitionné et répliqué. Les utilisateurs peuvent sélectionner la meilleure technique en fonction de leurs besoins.
Mécanismes de cohérence des données
La cohérence des données fait référence à la fiabilité et à l'exactitude des informations dans un système ou une base de données, garantissant que les données restent exactes et fiables tout au long des diverses opérations. Pour assurer la cohérence des données, NCache fournit un mécanisme de Verrouillage distribué qui vous permet de verrouiller des éléments de cache spécifiques lors de mises à jour simultanées. Plusieurs utilisateurs peuvent travailler simultanément sur différents éléments du cache sans compromettre l'intégrité des données en appliquant des verrous. Par conséquent, les verrous de cache sont utiles pour gérer les ressources partagées dans un environnement distribué.
Pour maintenir la cohérence des données, NCache agit comme un gestionnaire de verrouillage distribué et vous propose deux types de verrouillage : Verrouillage optimiste (versions d'éléments de cache) ainsi que Verrouillage pessimiste (verrouillage exclusif). Utilisations du verrouillage optimiste Gestion des versions des éléments du cache. Dans ce type de verrouillage, la méthode Add ajoute un nouvel élément dans le cache et enregistre la version de l'élément pour la première fois, tandis que la méthode insert écrase la valeur d'un élément existant et met à jour sa version d'élément. L'exemple suivant crée un LockHandle, puis verrouille un élément avec la clé Product:1001 pendant un intervalle de temps de 10 secondes, afin que l'élément soit déverrouillé automatiquement après 10 secondes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Prerequisite: Cache is already connected // Item is already added in the cache // Specify the key of the item string key = $"Product:1001"; // Create a new LockHandle LockHandle lockHandle = null; // Specify time span of 10 seconds for which the item remains locked TimeSpan lockSpan = TimeSpan.FromSeconds(10); // Lock the item for a time span of 10 seconds bool lockAcquired = cache.Lock(key, lockSpan, out lockHandle); // Verify if the item is locked successfully if (lockAcquired == true) { // Item has been successfully locked } else { // Key does not exist // Item is already locked with a different LockHandle } |
Alternativement, le verrouillage pessimiste verrouille l'élément à l'aide du Poignée de verrouillage, empêchant tous les autres utilisateurs d'effectuer toute opération d'écriture sur cet élément du cache. Après avoir réussi à acquérir le verrou lors de la récupération de l'élément, l'application peut désormais effectuer des opérations en toute sécurité, sachant qu'aucune autre application ne peut obtenir ou mettre à jour cet élément tant que vous disposez de ce verrou. L'exemple suivant verrouille un élément dans le cache, puis obtient l'élément à l'aide de lockHandle. L'élément est ensuite mis à jour puis réinséré dans le cache à l'aide de l'API Insert.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Specify the key of the item string key = $"Product:1001"; // Set acquireLock flag as true bool acquireLock = true; // Specify time span of 10 seconds for which the item remains locked TimeSpan lockSpan = new TimeSpan(0, 0, 10); // Initialize the lockHandle LockHandle lockHandle = null; CacheItem item = cache.GetCacheItem(key, acquireLock, lockSpan, ref lockHandle); var product = new Product(); product = item.GetValue(); // Update the unitsinstock for the product product.UnitsInStock = 200; bool releaseLock = true; // Item is already locked with a LockHandle // Update the item and release the lock as well since releaseLock is set true // Make sure that the LockHandle matches with the already added LockHandle cache.Insert(key, item, null, lockHandle, releaseLock); |
- NCache Détails
- NCache Verrouillage pessimiste
- Utiliser le verrouillage avec les données mises en cache Blog
Meilleures pratiques pour la réplication et la cohérence des données
Maintenant que nous avons découvert les mécanismes de réplication et de cohérence des données fournis par NCache, explorons les pratiques recommandées dans ce contexte. La topologie répliquée est le meilleur choix pour une application qui nécessite une haute disponibilité et peut survivre à une panne de (n-1) nœuds sans aucune perte de données. En revanche, la topologie partition-réplique offre à la fois une haute disponibilité et la capacité de satisfaire les besoins croissants en matière de données.
Bien qu'elle ne soit pas aussi hautement disponible que la topologie répliquée, elle peut toujours résister aux pannes de nœuds sans aucune perte de données. Chaque partition dispose d'une sauvegarde ; ainsi, chaque nœud possède essentiellement une partition et une sauvegarde d'une autre partition. D'autre part, la topologie en miroir offre la fiabilité et la disponibilité des données grâce à la réplication asynchrone du nœud actif vers le nœud passif.
NCache prend également en charge les stratégies d'invalidation des données basées sur le temps pour faire expirer les données du cache. Invalidation des données via Expiration signifie que vous pouvez spécifier la durée pendant laquelle les données restent dans le cache, après quoi elles expirent. De cette façon, votre cache disposera des données récentes à la prochaine demande du client, éliminant ainsi les données obsolètes, garantissant ainsi la cohérence des données. Invalidation par Dépendances garantit que les données du cache sont supprimées chaque fois que des modifications se produisent dans la base de données.
Conclusion
La réplication et la cohérence des données sont la base d'une application fiable et performante. Heureusement, avec NCache, vous avez accès à des fonctionnalités robustes qui vous permettent de créer des applications hautement évolutives et tolérantes aux pannes, capables de gérer même les besoins en données les plus complexes.