Vamos a continuar con el tema de uso de cache pero esta vez lo veremos Distribuido. El caché distribuido puede ayudar no solamente en la performance las aplicaciones sino también en la escalabilidad de nuestras aplicaciones.
Objetivo
El objetivo de esta publicación es tocar las posibles utilizaciones y alcance del manejo de del caché distribuido para mejorar la performance y la escalabilidad en nuestras aplicaciones Asp.Net Core.
Audiencia
Este documento está dirigido a desarrolladores que quieren conocer Asp.Net Core y el uso de cache distribuido o personas que desarrollan tareas de Consultoría de desarrollo o que simplemente están interesados en leer e investigar sobre la tecnología alcanzada por esta publicación.
Desarrollo
¿Qué es el caché distribuido? Significa que podemos usar caché y múltiples servidores. En el caso de Microsoft Azure puede ser alrededor del mundo. El uso de cache distribuido tiene muchas ventajas como, por ejemplo:
- Los datos almacenados en el caché siempre son coherentes entre los servidores. No depende de donde el usuario consulte los datos todos verán la misma información.
- Si es necesario reiniciar un equipo el cache seguirá vivo como también si los servidores necesitan escalar su capacidad. Se pueden agregar o quitar servidores sin necesidad de afectar al cache.
- Las bases de datos o repositorios de datos tendrán menos consultas, un muchos casos a veces hasta ninguna.
Como cualquier caché existente implementar caché distribuido puede aumentar significativamente la capacidad de respuesta de nuestras aplicaciones debido que los datos son recuperados más rápido que desde una base de datos. También pueden reducir el costo de consumo de nuestros repositorios de bases de datos ya son de menor costo.
Vamos a ver 2 configuraciones una como configurar Redis y el Caché distribuido de sql server. Para esto dependemos de la interface IDistributedCache.
En IDistributedCache tenemos disponible tanto método sincrónicos como asincrónicos. Esta nos permite agregar, recuperar o eliminar elementos que tengamos en el caché. Veamos los métodos:
- Get, GetAsync Recupera los datos del caché por medio de una key.
- Set, SetAsync Agrega un tiem al caché por medio de una key.
- Refresh, RefreshAsync Actualiza el caché por medio de un key reiniciando el tiempo de expiración.
- Remove, RemoveAsync Elimina un objeto del caché.
Para poder utilizar la interfaz debemos seguir los siguientes pasos:
- Implementar en nuestra aplicación paquete nuget.
- Configurar en nuestro archivo startup.cs dentro de ConfigureService para que nos lo agregue en nuestro contenedor.
- Por último, agregarlo en los constructores de nuestros controller donde lo vamos a utilizar.
Usando Cache Distribuido Redis
¿Qué es Redis? Redis es un cache distribuido en memoria de origen open-source. Podemos usarlo de forma local o en Azure. Azure provee una implementación llamada Azure Redis Cache.
De la misma forma que antes debemos configurar en nuestro archivo Startup.cs una instancia del RedisDistributedCache para poder tenerla disponibles.
/// <summary> /// Use Redis Cache in Staging /// </summary> /// <param name="services"></param> public void ConfigureStagingServices(IServiceCollection services) { services.AddDistributedRedisCache(options =&amp;gt; { options.Configuration = "localhost"; options.InstanceName = "SampleInstance"; }); }
Usando Cache Distribuido con SQL Server
SqlSeverCache nos permite utilizar cache distribuido con soporte en base de datos de Sql Server. Con la herramienta de sql-cache podremos crear una tabla con estructura necesaria para tener este soporte.
C:\SqlCacheSample\>dotnet sql-cache create «Data Source=(localdb)\v11.0;Initial Catalog=DistCache;Integrated Security=True;» dbo DbSQLCache
Como resultado tendremos esta tabla:
Una vez todo listo debemos agregarlos a nuestros servicios de la siguiente manera:
public void ConfigureProductionServices(IServiceCollection services) { services.AddDistributedSqlServerCache(options => { options.ConnectionString = @"Data Source=(localdb)\v11.0;Initial Catalog=DistCache;Integrated Security=True;"; options.SchemaName = "dbo"; options.TableName = "TestCache"; }); }
Conclusión
Asp.Net Core posee un gran soporte para la utilización de cache en distribuido tanto sea Redis, Azure Cache Redis o SqlCache el cual nosotros podemos aprovechar para aumentar el rendimiento y la escalabilidad de nuestras aplicaciones. Para tener en cuenta Redis mi elección siempre ya que posee