Come sviluppatore, a un certo punto devi aver lottato per accelerare la comunicazione tra il client e il server. I costi generali, i ritardi e la latenza della rete sono sempre stati una delle principali preoccupazioni e tutto si riduce a un'unica domanda: Come possiamo velocizzare le richieste? Nel tempo vengono trovate tonnellate di soluzioni, ma la risposta su cui ci stiamo concentrando qui è la compressione e la serializzazione compatta. Buon per te, NCache fornisce tecniche di compressione efficiente e serializzazione compatta dinamica (per tua informazione, sono entrambe cose diverse). In questo blog vedremo la necessità di entrambi e come possono essere utilizzati.
Serializzazione compatta dinamica
NCache fornisce supporto per il formato di serializzazione .NET nativo, tuttavia fornisce anche il proprio framework di serializzazione chiamato serializzazione compatta. La serializzazione compatta è anche serializzazione binaria ma NCache offre molta più flessibilità con questo framework di serializzazione. La serializzazione compatta non riduce la dimensione dell'intero dato, ma riduce solo la dimensione dei dati che viaggiano sulla rete. Ti aiuta a ottenere una migliore funzionalità poiché i viaggi di rete sono più veloci e il costo è ridotto.
Ora esaminiamo i vantaggi della serializzazione compatta dinamica e come è più flessibile rispetto alla serializzazione nativa di .NET:
Dimensioni compatte dei dati
In NCache, i dati serializzati binari sono di dimensioni compatte. Quando serializzati, questi oggetti a volte diventano dieci volte più piccoli delle dimensioni effettive dei dati. Più piccole sono le dimensioni, più velocemente i dati viaggiano sulla rete, quindi prestazioni amplificate. Inoltre, quando i dati sono più compatti, occupano meno spazio sul server cache, rendendolo anche efficiente in termini di memoria.
Non richiede alcuna modifica del codice
Per rendere i tuoi dati serializzati compatti, non è richiesta alcuna modifica al codice. Tutto quello che devi fare è selezionare i dati serializzabili utilizzando gli strumenti di gestione (NCache Web Manager o NCache strumenti PowerShell). NCache gestisce internamente tutta la serializzazione dei dati, quindi non è richiesta alcuna modifica al codice.
Serializzazione selettiva
La serializzazione selettiva significa che l'utente ha tutto il controllo su quali dati devono essere serializzati e quali dati devono essere contrassegnati come non serializzati. All'interno di una classe è possibile selezionare gli attributi da serializzare, ad esempio supponiamo di voler mantenere gli oggetti di connessione al database come non serializzati. Puoi semplicemente serializzare altri attributi e mantenere i dati desiderati non serializzati.
Per ottenere un controllo dettagliato sui dati da serializzare, viene implementata l'interfaccia ICompactSerializable. Questo ti dà un maggiore controllo sui dati e sulla serializzazione selettiva. La classe custom necessita dei metodi serialize/deserialize chiamati da NCache serializzare/deserializzare gli oggetti. Guarda l'esempio di codice seguente per vedere come viene implementata l'interfaccia ICompactSerializable:
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 consente inoltre di registrare classi generiche per la serializzazione compatta. Ci sono due modi per registrare classi generiche, ad es. tramite il NCache Web Manager o tramite l'interfaccia IGenericTypeProvider.
Passo 1: Attraverso NCache Web Manager
Puoi registrare classi generiche usando NCache Web Manager come mostrato di seguito:
Passaggio 2: tramite IGenericTypeProvider
Per implementare ciò, l'utente deve implementare il metodo GetGenericTypes e restituire i tipi generici desiderati come matrice.
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 } } |
Dopodiché, distribuire questo assembly di classe in NCache Gestore web. NCache Web Manager registrerà tutti i tipi popolati nell'array Type.
Documenti di serializzazione compatta Registra classi generiche Registra classi non generiche
Compressione
Un'altra tecnica efficace fornita da NCache is compressione dei dati dove i dati in forma compressa vengono aggiunti nella cache. Il più grande vantaggio è che i dati compressi occupano meno spazio rispetto ai dati non compressi e consentono di risparmiare molta memoria. Riduce il costo di rete delle operazioni di lettura/scrittura. Quindi, ciò che risparmi è il costo della rete, il tempo e la memoria in modo efficiente semplicemente utilizzando la compressione.
NCache usa la compressione GZip per comprimere i dati. Decidi un determinato valore di soglia e per la compressione abilitata, tutti gli elementi che superano la soglia vengono compressi. Abbiamo confrontato i dati compressi e non compressi e l'utilizzo della memoria da parte di ciascuno. Potete vedere i risultati nel grafico sottostante. La linea blu mostra il consumo di memoria con dati compressi e quella arancione mostra la dimensione della cache con dati non compressi:
La compressione di solito si verifica sia sul lato client che sul lato server, dato che la compressione è abilitata entrambi il server e il lato client.
- Compressione lato client viene applicato su tutti gli elementi che vengono richiesti dal client al server. Il server comprime i dati e li invia al client e il client li decomprime alla ricezione dei dati compressi. Allo stesso modo, per gli elementi che superano la soglia, inviati dal client al server remoto, i dati vengono inviati in forma compressa.
- Compressione lato server si verifica per tutti gli elementi che superano la soglia e vengono caricati dall'origine dati dalle funzionalità lato server come il caricatore di avvio della cache. Questi elementi vengono quindi compressi in NCache server dopo averli ricevuti dall'origine dati.
Compressione in NCache Docs Abilita/Disabilita la compressione
Per utilizzare la compressione, tutto ciò che devi fare è abilitare la compressione e ci sono due modi efficaci per farlo.
Metodo 1: utilizzo di NCahe Web Manager
La gif seguente mostra come abilitare la compressione utilizzando NCache Gestore Web:
Metodo 2: utilizzo della configurazione
Un file di configurazione installato in NCache directory di installazione, denominata config.ncconf contiene un tag che abilita e disabilita la compressione per te. Lascia che ti mostri come:
1 |
<compression enabled="true" threshold="500kb"/> |
Il tag abilitato è impostato su true per abilitare la compressione e false nel caso in cui desideri disabilitare la compressione. Fornisce inoltre il tag di soglia e i dati al di sopra del valore fornito vengono solo compressi.
Conclusione
In conclusione, la compressione e la serializzazione compatta sono tecniche molto efficaci per migliorare le prestazioni dell'applicazione. È anche molto facile abilitare queste funzionalità utilizzando NCache strumenti di gestione. NCache ti aiuta a ottenere tutto questo senza alcuna modifica del codice. Per favore riferisci a NCache documentazione per controllare altri fantastici NCache caratteristiche.