Como desarrollador, debe haber tenido problemas para acelerar la comunicación entre el cliente y el servidor en algún momento. Los gastos generales, los retrasos y la latencia de la red siempre han sido una de las principales preocupaciones y todo se reduce a una sola pregunta: ¿Cómo podemos acelerar las solicitudes? Se encuentran toneladas de soluciones a lo largo del tiempo, pero la respuesta en la que nos estamos centrando aquí es la compresión y la serialización compacta. Suerte para ti, NCache proporciona compresión eficiente y técnicas dinámicas de serialización compacta (FYI, ambas son cosas diferentes). En este blog, veremos la necesidad de ambos y cómo se pueden utilizar.
Serialización compacta dinámica
NCache proporciona soporte para el formato de serialización .NET nativo, sin embargo, también proporciona su propio marco de serialización llamado serialización compacta. La serialización compacta también es serialización binaria pero NCache proporciona mucha más flexibilidad con este marco de serialización. La serialización compacta no reduce el tamaño de todos los datos, sino que solo reduce el tamaño de los datos que viajan por la red. Le ayuda a lograr una mejor funcionalidad ya que los viajes de la red son más rápidos y el costo se reduce.
Ahora veamos los beneficios de la serialización compacta dinámica y cómo es más flexible que la serialización .NET nativa:
Tamaño de datos compacto
In NCache, los datos serializados binarios tienen un tamaño compacto. Cuando se serializan, estos objetos a veces se vuelven diez veces más pequeños que sus tamaños de datos reales. Cuanto más pequeño sea el tamaño, más rápido viajarán los datos a través de la red, por lo tanto, se amplificará el rendimiento. Además, cuando los datos son más compactos, ocupan menos espacio en el servidor de caché, lo que también hace que la memoria sea eficiente.
No requiere cambio de código
Para hacer que sus datos sean compactos y serializados, no se requiere ningún cambio en el código. Todo lo que tiene que hacer es seleccionar los datos serializables utilizando herramientas de gestión (NCache administrador web o NCache herramientas PowerShell). NCache maneja internamente toda la serialización de los datos, por lo tanto, no se requiere ningún cambio en el código.
Serialización selectiva
La serialización selectiva significa que el usuario tiene todo el control sobre qué datos deben serializarse y qué datos deben marcarse como no serializados. Dentro de una clase, puede seleccionar atributos para ser serializados, por ejemplo, supongamos que desea mantener los objetos de conexión de base de datos como no serializados. Simplemente puede serializar otros atributos y mantener los datos deseados sin serializar.
Para obtener un control detallado sobre qué datos serializar, se implementa la interfaz ICompactSerializable. Esto le da un mayor control sobre los datos y la serialización selectiva. La clase personalizada necesita los métodos de serialización/deserialización que llama NCache para serializar/deserializar los objetos. Mire el ejemplo de código a continuación para ver cómo se implementa la interfaz 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 también permite registrar clases genéricas para serialización compacta. Hay dos formas de registrar clases genéricas, es decir, a través del NCache Web Manager o a través de la interfaz IGenericTypeProvider.
Paso 1: A través de esta formación, el personal docente y administrativo de escuelas y universidades estará preparado para manejar los recursos disponibles que derivan de la diversidad cultural de sus estudiantes. Además, un mejor y mayor entendimiento sobre estas diferencias y similitudes culturales permitirá alcanzar los objetivos de inclusión previstos. NCache Web Manager
Puede registrar clases genéricas usando NCache Administrador web como se muestra a continuación:
Paso 2: A través de IGenericTypeProvider
Para implementar esto, el usuario debe implementar el método GetGenericTypes y devolver los tipos genéricos deseados como una matriz.
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 } } |
Después de esto, implemente este ensamblado de clase para NCache Administrador web. NCache Web Manager registrará todos los tipos poblados en la matriz Tipo.
Documentos de serialización compactos Registrar Clases Genéricas Registrar clases no genéricas
Compresión
Otra técnica eficaz proporcionada por NCache is compresión de datos donde los datos en forma comprimida se agregan en el caché. La mayor ventaja es que los datos comprimidos ocupan menos espacio que los datos sin comprimir y le ahorran mucha memoria. Reduce el costo de red de sus operaciones de lectura/escritura. Entonces, lo que ahorra es costo de red, tiempo y memoria de manera eficiente simplemente usando compresión.
NCache utiliza la compresión GZip para comprimir los datos. Usted decide un cierto valor de umbral y para la compresión habilitada, todos los elementos que exceden el umbral se comprimen. Comparamos los datos comprimidos y sin comprimir y el uso de memoria de cada uno. Puedes ver los resultados en el siguiente gráfico. La línea azul muestra el consumo de memoria con datos comprimidos y la naranja muestra el tamaño del caché con datos sin comprimir:
La compresión generalmente ocurre en el lado del cliente así como en el lado del servidor dado que la compresión está habilitada en ambas el servidor y el lado del cliente.
- Compresión del lado del cliente se aplica sobre todos los elementos que son solicitados por el cliente desde el servidor. El servidor comprime los datos y los envía al cliente y el cliente los descomprime al recibir los datos comprimidos. De manera similar, para los elementos que cruzan el umbral, enviados por el cliente al servidor remoto, los datos se envían en forma comprimida.
- Compresión del lado del servidor se produce para todos los elementos que superan el umbral y se cargan desde el origen de datos mediante funciones del lado del servidor, como el cargador de inicio de caché. Luego, estos elementos se comprimen en NCache servidores después de recibirlos de la fuente de datos.
Compresión en NCache Docs Activar/desactivar compresión
Para usar la compresión, todo lo que tiene que hacer es habilitar la compresión y hay dos formas efectivas de hacerlo.
Método 1: usar el administrador web de NCahe
El gif a continuación le muestra cómo habilitar la compresión usando NCache Administrador web:
Método 2: Usar la configuración
Un archivo de configuración instalado en NCache directorio de instalación, llamado config.ncconf contiene una etiqueta que habilita y deshabilita la compresión para usted. Déjame enseñarte como:
1 |
<compression enabled="true" threshold="500kb"/> |
La etiqueta habilitada se establece en verdadero para habilitar la compresión y en falso en caso de que desee deshabilitar la compresión. También le proporciona la etiqueta de umbral y los datos por encima del valor proporcionado solo se comprimen.
Conclusión
En conclusión, la compresión y la serialización compacta son técnicas muy efectivas para mejorar el rendimiento de su aplicación. También es muy fácil habilitar estas características usando NCache herramientas administrativas. NCache le ayuda a lograr todo esto simplemente sin cambiar el código. Por favor refiérase a NCache documentación para ver otros interesantes NCache características.