En tant que développeur, vous avez dû avoir du mal à accélérer la communication entre le client et le serveur à un moment donné. Les frais généraux, les retards et la latence du réseau ont toujours été des préoccupations majeures et tout se résume à une seule question - Comment pouvons-nous accélérer les demandes ? Des tonnes de solutions sont trouvées au fil du temps, mais la réponse sur laquelle nous nous concentrons ici est la compression et la sérialisation compacte. Heureusement pour toi, NCache fournit des techniques de compression efficace et de sérialisation compacte dynamique (pour votre information, ce sont deux choses différentes). Dans ce blog, nous verrons le besoin des deux et comment ils peuvent être utilisés.
Sérialisation compacte dynamique
NCache prend en charge le format de sérialisation .NET natif, cependant, il fournit également son propre cadre de sérialisation appelé sérialisation compacte. La sérialisation compacte est également une sérialisation binaire mais NCache offre beaucoup plus de flexibilité avec ce cadre de sérialisation. La sérialisation compacte ne réduit pas la taille de l'ensemble des données, elle réduit uniquement la taille des données qui transitent sur le réseau. Il vous aide à obtenir une meilleure fonctionnalité car les trajets sur le réseau sont plus rapides et le coût est réduit.
Examinons maintenant les avantages de la sérialisation compacte dynamique et en quoi elle est plus flexible que la sérialisation .NET native :
Taille de données compacte
In NCache, les données sérialisées binaires sont de taille compacte. Lorsqu'ils sont sérialisés, ces objets deviennent parfois dix fois plus petits que leurs tailles de données réelles. Plus la taille est petite, plus les données voyagent rapidement sur le réseau, d'où des performances amplifiées. De plus, lorsque les données sont plus compactes, elles occupent moins d'espace sur le serveur de cache, ce qui en fait également une mémoire efficace.
Ne nécessite aucun changement de code
Pour rendre vos données sérialisées compactes, aucun changement de code n'est requis. Il suffit de sélectionner les données sérialisables à l'aide des outils de gestion (NCache Gestionnaire Web ou NCache outils PowerShell). NCache gère en interne toute la sérialisation des données, aucune modification du code n'est donc nécessaire.
Sérialisation sélective
La sérialisation sélective signifie que l'utilisateur a tout le contrôle sur les données qui doivent être sérialisées et sur celles qui doivent être marquées comme non sérialisées. Au sein d'une classe, vous pouvez sélectionner des attributs à sérialiser, par exemple, supposons que vous souhaitiez conserver les objets de connexion à la base de données comme non sérialisés. Vous pouvez simplement sérialiser d'autres attributs et conserver les données souhaitées non sérialisées.
Afin d'obtenir un contrôle précis sur les données à sérialiser, l'interface ICompactSerializable est implémentée. Cela vous donne un contrôle majeur sur les données et une sérialisation sélective. La classe personnalisée a besoin des méthodes serialize/deserialize qui sont appelées par NCache pour sérialiser/désérialiser les objets. Regardez l'exemple de code ci-dessous pour voir comment l'interface ICompactSerializable est implémentée :
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 27 28 29 30 |
public class Customers : ICompactSerializable { private string _name; private int _id; private string _company; public Customers() { } public Customers(string customerName, int customerID, string companyName) { _name = customerName; _id = customerID; _company = companyName; } #region ICompactSerializable Members public void Deserialize(CompactReader reader) { _name = reader.ReadObject() as string; _id = reader.ReadInt32(); _company = reader.ReadObject() as string; } public void Serialize(CompactWriter writer){ writer.WriteObject(_name); writer.Write(_id); writer.Write(_company); } #endregion } |
NCache permet également d'enregistrer des classes génériques pour une sérialisation compacte. Il existe deux manières d'enregistrer des classes génériques, c'est-à-dire via le NCache Web Manager ou via l'interface IGenericTypeProvider.
Étape 1: Avec NCache Web Manager
Vous pouvez enregistrer des classes génériques en utilisant NCache Gestionnaire Web comme indiqué ci-dessous :
Étape 2 : via IGenericTypeProvider
Pour implémenter cela, l'utilisateur doit implémenter la méthode GetGenericTypes et renvoyer les types génériques souhaités sous forme de tableau.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class CustomerPurchaseDetails<T, K, V> { // implement logic } public class CustomerPurchaseImpl : IGenericTypeProvider { Type[] types = new Type[6]; Type[] IGenericTypeProvider.GetGenericTypes() { types[0] = typeof(Dictionary<string, Customer>); types[1] = typeof(List); types[2] = typeof(CustomerPurchaseDetails<Order, Product, Customer>); types[3] = typeof(CustomerPurchaseDetails<Order, Product, int>); types[4] = typeof(CustomerPurchaseDetails<Order, string, byte>); types[5] = typeof(CustomerPurchaseDetails<string, Customer, bool>); return types; } public bool CheckIfSerializable(Type type, FieldInfo fieldInfo) { // implement logic } } |
Après cela, déployez cet assembly de classe sur NCache Gestionnaire Web. NCache Web Manager enregistrera tous les types renseignés dans le tableau Type.
Documents de sérialisation compacts Enregistrer des classes génériques Enregistrer des classes non génériques
Compression
Une autre technique efficace fournie par NCache is la compression des données où les données sous forme compressée sont ajoutées dans le cache. Le plus grand avantage est que les données compressées occupent moins d'espace que les données non compressées et vous permettent d'économiser beaucoup de mémoire. Il réduit le coût réseau de vos opérations de lecture/écriture. Ainsi, ce que vous économisez est le coût du réseau, le temps et la mémoire efficacement en utilisant simplement la compression.
NCache utilise la compression GZip pour compresser les données. Vous décidez d'une certaine valeur de seuil et pour la compression activée, tous les éléments dépassant le seuil sont compressés. Nous avons comparé les données compressées et non compressées et l'utilisation de la mémoire par chacune. Vous pouvez voir les résultats dans le graphique ci-dessous. La ligne bleue montre la consommation de mémoire avec des données compressées et la ligne orange montre la taille du cache avec des données non compressées :
La compression se produit généralement du côté client ainsi que du côté serveur étant donné que la compression est activée sur tous les deux côté serveur et côté client.
- Compression côté client est appliqué sur tous les éléments qui sont demandés par le client au serveur. Le serveur compresse les données et les envoie au client et le client les décompresse à la réception des données compressées. De même, pour les éléments franchissant le seuil, envoyés par le client au serveur distant, les données sont envoyées sous forme compressée.
- Compression côté serveur se produit pour tous les éléments dépassant le seuil et sont chargés à partir de la source de données par les fonctionnalités côté serveur telles que le chargeur de démarrage du cache. Ces éléments sont ensuite compressés à NCache serveurs après les avoir reçus de la source de données.
compression dans NCache Docs Activer/désactiver la compression
Pour utiliser la compression, tout ce que vous avez à faire est d'activer la compression et il existe deux façons efficaces de le faire.
Méthode 1 : Utilisation de NCahe Web Manager
Le gif ci-dessous vous montre comment activer la compression en utilisant NCache Gestionnaire Web:
Méthode 2 : Utilisation de la configuration
Un fichier de configuration installé dans NCache répertoire d'installation, nommé config.ncconf contient une balise qui active et désactive la compression pour vous. Laisse moi te montrer comment:
1 |
<compression enabled="true" threshold="500kb"/> |
La balise enabled est définie sur true pour activer la compression et sur false si vous souhaitez désactiver la compression. Il vous fournit également la balise de seuil et les données au-dessus de la valeur fournie sont uniquement compressées.
Conclusion
En conclusion, la compression et la sérialisation compacte sont des techniques très efficaces pour améliorer les performances de votre application. Il est également très facile d'activer ces fonctionnalités en utilisant NCache outils de gestion. NCache vous aide à réaliser tout cela sans aucun changement de code. Prière de se référer à NCache documentation pour vérifier d'autres cool NCache caractéristiques.