Dans le passé, les experts ont essayé de supprimer les goulots d'étranglement des performances en utilisant des caches système, mais avec l'augmentation du trafic utilisateur, le besoin d'applications à haut débit est devenu pertinent. Par conséquent, les solutions de mise en cache distribuée en mémoire, linéairement évolutives, telles que NCache devient populaire, améliorant Les performances du système multiple.
Généralement, avec une couche de mise en cache ajoutée dans votre architecture système, les applications sont responsables du maintien de l'intégrité des données à deux sauts - à chaque demande d'écriture, les données doivent être mises à jour à la fois dans le cache et dans la source de données principale. Ainsi, si vous avez plusieurs applications, accédant au même cache et à la même base de données, vous devrez dupliquer votre code de persistance sur chacune d'elles. Cela ajoute de la complexité au code au niveau de l'application.
NCache Détails NCache Documents écrits NCache Guide d'administration d'écriture directe
Qu'est-ce que l'écriture directe ?
L'écriture immédiate est une technique de mise en cache, où lorsque les applications écrivent des données dans le cache et qu'une source de sauvegarde est configurée, elle met également à jour les enregistrements dans la base de données.
NCache fournit un IWriteThru interface que vous pouvez implémenter, en ajoutant toute la logique de code de persistance qui, autrement, aurait existé dans votre application cliente. Vous devez déployer le code sur tous les serveurs de cache via le NCache Responsable Web.
Ainsi, chaque fois qu'une opération d'écriture est effectuée sur le cache, le fournisseur déployé sera appelé et la base de données sera mise à jour selon votre logique.
Pour savoir comment configurer un fournisseur Write-Through, veuillez consulter le officiel NCache Documentation du fournisseur d'écriture immédiate.
Parfois, vos opérations d'écriture directe peuvent échouer. Cela peut se produire pour plusieurs raisons, telles que des problèmes de connexion réseau ou une erreur dans la logique d’implémentation de votre interface. Puisque l'écriture directe est synchrone, NCache lève une exception à l'application. Vous trouverez également l'erreur enregistrée dans les journaux de cache.
De plus, depuis NCache fournit également l'état de fonctionnement - il donne à ses utilisateurs la flexibilité de gérer divers scénarios prédéterminés. Par exemple, si l'opération échoue et que vous souhaitez la réessayer, vous pouvez définir l'option appropriée, et NCache effectuera les retraites pour vous.
Pour plus de détails concernant ces opérations, veuillez consulter NCache Docs.
L'interface du fournisseur d'écriture immédiate
Comme mentionné précédemment, NCache expose un IWriteThru interface que l'utilisateur est censé implémenter puis déployer côté serveur. L'extrait de code ci-dessous montre les méthodes IWriteThuProvider :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public interface IWriteThruProvider { // Perform tasks associated with freeing, releasing, or resetting resources. void Dispose(); // Perform tasks like allocating resources or acquiring connections void Init(IDictionary parameters, string cacheId); //Responsible for write operations on data source. OperationResult WriteToDataSource(WriteOperation operation); ICollection WriteToDataSource(ICollection operations); ICollection WriteToDataSource(ICollection dataTypeWriteOperations); } |
Il y a trois surcharges du Écrire vers la source de données méthode. L'un répond aux demandes de mise à jour de la base de données atomique tandis que l'autre gère les demandes d'écriture en masse de la base de données. NCache expose également une méthode où vous pouvez ajouter une logique de code à mettre à jour NCache-structures de données prises en charge à la source de sauvegarde.
NCache Détails Documents de mise en cache en écriture immédiate Configurer le fournisseur d'écriture immédiate
Réécriture dans l'application
L'application frontale n'a qu'à accéder au cache pour toute opération d'écriture avec l'option de Écrire à travers spécifié afin que le cache applique cette opération sur la base de données via le fournisseur Write-Through.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Pre-Condition: Cache is already connected // Fetch product with the given ProductID Product product = FetchProductByProductID(1001); // Specify the key of the item string key = $"product.ProductID"; product.UnitPrice = 200; // Create a new cacheItem with the product var cacheItem = new CacheItem(product); // Enable write through for the cacheItem created var writeThruOptions = new WriteThruOptions(); writeThruOptions.Mode = WriteMode.WriteThru; // Add the item in the cache with WriteThru enabled CacheItemVersion itemVersion = cache.Insert(key, cacheItem, writeThruOptions); |
Qu'est-ce que le cache en écriture différée ?
Écriture derrière dans un cache distribué est identique à la mise en cache en écriture immédiate, sauf qu'elle met à jour la base de données de manière asynchrone. Cela signifie que l'application n'a jamais à attendre que la source de données soit mise à jour, ce qui augmente les performances de l'application puisque les mises à jour des sources de données principales sont les opérations d'application les plus lentes.
Veuillez garder à l'esprit que même s'il est sûr de supposer que les données seront mises à jour dans la base de données, il est recommandé d'opter pour Write-Through si vous traitez des données très sensibles. De plus, comme il s'agit d'un mécanisme asynchrone, les échecs d'écriture différée sont consignés en tant qu'exceptions et erreurs dans les journaux de cache mais ne sont pas transmis à l'application. NCache fournit des options pour gérer les échecs de la même manière qu'avec Write-Through car il renvoie également les statuts des opérations.
Reportez-vous à NCache docs pour plus de détails sur ces opérations.
Écriture différée dans les applications
L'écriture différée est un moyen plus rapide d'effectuer des opérations d'écriture immédiate car il utilise le même fournisseur d'écriture immédiate mais de manière asynchrone. Le seul changement au niveau de l'application est la différence dans la spécification de l'option Write-Through comme WriteBehind au lieu de WriteThru.
Jetez un œil à l'exemple de code ci-dessous :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Pre-Condition: Cache is already connected // Fetch product with the given ProductID Product product = FetchProductByProductID(1001); // Specify the key of the item string key = $"product.ProductID"; product.UnitPrice = 200; // Create a new cacheItem with the product var cacheItem = new CacheItem(product); // Enable write through for the cacheItem created var writeThruOptions = new WriteThruOptions(); writeThruOptions.Mode = WriteMode.WriteBehind; // Add the item in the cache with WriteThru enabled CacheItemVersion itemVersion = cache.Insert(key, cacheItem, writeThruOptions); |
NCache Détails Documents de mise en cache en écriture immédiate Utilisation de Write-Behind dans le cache
Conclusion
Avec des solutions de mise en cache distribuées comme NCache fournissant désormais des fonctionnalités telles que l'écriture directe et l'écriture différée, les mises à jour de la base de données principale sont plus simples et plus faciles à gérer. Il encapsule toute la logique du code de persistance au sein d’un seul fournisseur. Cela vous permet de maintenir la couche de base de données au niveau du fournisseur et la couche de mise en cache au niveau de l'application. Donc avec NCache, Tu reçois le meilleur des deux mondes. Vous bénéficiez de performances de mise en cache pour les opérations de lecture et de maintenance des données pour les opérations d'écriture. Ainsi, améliorez les performances de votre système à l'aide de solutions d'entreprise telles que NCache. Contactez-nous et laissez nos experts vous aider !