ASP.NET Core se está volviendo popular para desarrollar aplicaciones web debido a su arquitectura más limpia y liviana y su soporte multiplataforma. Tal ASP.NET Core las aplicaciones tienen mucho tráfico y se ejecutan en una implementación de varios servidores con equilibrio de carga. De hecho, es común ver granjas web de 10 a 20 servidores y algunas incluso más grandes que esta.
Tener una implementación con equilibrio de carga de varios servidores hace que su nivel de aplicación sea muy escalable porque puede agregar más servidores a medida que aumenta la carga de transacciones. Esto permite que su ASP.NET Core aplicación para manejar grandes cargas de transacciones con facilidad. Todavía existe un cuello de botella de rendimiento que ralentiza su ASP.NET Core .
Y este ASP.NET Core cuello de botella de rendimiento está en su base de datos y almacenamiento de datos que no puede manejar cargas pesadas de la forma en que su ASP.NET Core el nivel de aplicación puede. Aunque puede agregar más servidores a la granja web de nivel de aplicación, no puede hacer lo mismo con su nivel de base de datos. A continuación se muestran los dos tipos de almacenamiento de datos que se convierten en un cuello de botella de rendimiento para ASP.NET Core aplicaciones.
- Servidor de base de datos (servidor SQL)
- ASP.NET Core Talleres
NCache Detalles NCache Docs NCache API de cliente
La solución: caché distribuida
Para eliminar estos almacenamientos de datos cuellos de botella de rendimiento, su mejor apuesta es usar un caché distribuido como NCache. NCache es una caché distribuida en memoria de código abierto de .NET que es mucho más rápida que la base de datos. A diferencia de su base de datos, NCache is linealmente escalable porque le permite crear un grupo de servidores de caché y agregar más servidores al grupo a medida que aumenta la carga de sus transacciones.
NCache le permite almacenar en caché los datos de la aplicación para que pueda reducir esos costosos viajes a la base de datos en casi un 80 %. Esto reduce la carga en la base de datos, lo que le permite realizar lecturas y escrituras mucho más rápido y no convertirse en un cuello de botella en el rendimiento.
NCache es también una tienda distribuida escalable para su ASP.NET Core sesiones. Además, NCache replica ASP.NET Core sesiones a varios servidores para evitar la pérdida de datos en caso de que algún servidor de caché se caiga. Para ASP.NET Core sesiones, esto es muy importante porque no puede darse el lujo de perder ninguna sesión en tiempo de ejecución. A continuación se muestra un diagrama que muestra cómo un caché distribuido como NCache encaja en la implementación de su aplicación.
NCache Detalles NCache Docs NCache API de cliente
Almacenamiento en caché de datos de aplicaciones a través de ASP.NET Core IDistributedCacheIDistributedCache
Antes de ASP.NET Core, el antiguo ASP.NET proporcionaba una versión independiente Caché ASP.NET que no cumplía con las necesidades de los entornos de varios servidores. Ahora, ASP.NET Core ha introducido el IDistributedCacheIDistributedCache interfaz como una API estándar de caché distribuida bastante básica que le permite programar contra ella y luego conectar cachés distribuidos de terceros sin problemas.
Aquí hay un ejemplo de cómo usar IDistributedCache
interfaz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
IDistributedCache _cache; ... private byte[] LoadCustomer(string custId) { string key = "Customers:CustomerID:" + custId; // is the customer in the cache? byte[] customer = _cache.Get(key); if (customer == null) { // the cache doesn't have it. so load from DB customer = LoadFromDB(key); // And, cache it for next time _cache.Set(key, customer); } return customer; } |
NCache también ha implementado un proveedor para IDistributedCache
que puede conectar a su ASP.NET Core aplicaciones De esta manera, no tiene que cambiar ningún código específico para NCache.
Aquí es lo que el IDistributedCache
se ve la interfaz (tenga en cuenta que cada uno de estos métodos también tiene una sobrecarga asíncrona).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
namespace Microsoft.Extensions.Caching.Distributed { public interface IDistributedCache { // Each of these methods also has an “Async” overload byte[] Get(string key); void Refresh(string key); void Remove(string key); // Specify absolute & sliding expiration through options void Set(string key, byte[] value, DistributedCacheEntryOptions options); } } |
Configurando NCache como proveedor de IDistributedCache
Así es como se configura NCache como tu IDistributedCache
proveedor en su ASP.NET Core Startup
clase.
1 2 3 4 5 6 7 8 9 10 11 |
public class Startup { ... public void ConfigureServices (IServiceCollection services) { ... services.AddNCacheDistributedCache(); ... } ... } |
NCache Detalles ASP.NET Core Almacenamiento en caché ASP.NET Core Proveedor de sesión
Por qué elegir NCache ¿API sobre IDistributedCache?
Si sus necesidades de almacenamiento en caché son bastante básicas y desea la flexibilidad de cambiar el proveedor de almacenamiento en caché distribuido sin inconvenientes, debe seguir adelante y utilizar el IDistributedCacheIDistributedCache interfaz. Le permite cambiar su proveedor de almacenamiento en caché sin problemas. Pero compare eso con el costo de no tener muchas funciones avanzadas de almacenamiento en caché.
Otra opción es usar NCache API directamente desde su ASP.NET Core . NCache La API es muy similar a la API de caché de ASP.NET heredada. Contiene toneladas de funciones sin costo que le permiten aprovechar al máximo un caché distribuido de nivel empresarial.
Recuerde, cuantos más datos pueda almacenar en caché, mayor será el beneficio de rendimiento y escalabilidad para su aplicación. Y, sin las funciones avanzadas de almacenamiento en caché, a menudo está restringido a almacenar en caché datos simples o de solo lectura. Lea más sobre todos los diferentes NCache características de almacenamiento en caché que echas de menos usando el IDistributedCache
proveedor.
Almacenamiento de ASP.NET Core Sesiones en caché distribuida
Antes de ASP.NET Core, el antiguo ASP.NET proporcionaba un marco de proveedor de estado de sesión de ASP.NET que permitía la conexión de proveedores de almacenamiento de sesión de terceros. ÁSPID.NET Core Las sesiones proporcionan un mecanismo similar para conectar proveedores de almacenamiento de terceros. A continuación se muestran las dos formas de usar NCache como ASP.NET Core almacenamiento de sesiones:
Uso NCache para ASP.NET Core Sesiones a través de IDistributedCache
Tan pronto como configure NCache as IDistributedCache
proveedor de ASP.NET Core, NCache se convierte automáticamente en la opción de almacenamiento predeterminada para ASP.NET Core sesiones y no tienes que hacer nada más. Pero tenga en cuenta que esta implementación tiene características limitadas en comparación con la anterior (antes de ASP.NET Core) Estado de sesión de ASP.NET.
Estas son algunas de las cosas que el ASP predeterminado.NET Core La implementación de las sesiones carece de:
- Bloqueo de sesión: ASP.NET Core no proporciona bloqueo de sesión. Esto es algo que incluso el Estado de sesión de ASP.NET más antiguo había proporcionado.
byte[]
matriz para objetos personalizados: ASP.NET Core lo obliga a convertir todos sus objetos personalizados en una matriz de bytes antes de que pueda almacenarlos en la sesión. Incluso el estado de sesión de ASP.NET más antiguo admite objetos personalizados.
Uso NCache como ASP.NET Core Proveedor de sesiones
Para evitar la ASP predeterminada.NET Core Implementación de sesiones a través de IDistributedCache
proveedor, NCache ha implementado su propio ASP.NET Core Proveedor de sesiones. Esta implementación tiene muchas más funciones que la predeterminada.
Así es como lo configura en su Startup
clase.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Startup { ... public void Configure(IApplicationBuilder app, IHostingEnvironment env) { ... app.UseNCacheSession(); ... } ... } |
Puede especificar ASP.NET Core Configuraciones de sesión para lo anterior en appsettings.json
archivo de la siguiente manera:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ ... "NCacheSessions": { ... "CacheName": "demoCache", "EnableLogs": "True", "RequestTimeout": "90", "EnableDetailLogs": "False", "ExceptionsEnabled": "True", "WriteExceptionsToEventLog": "False" } ... } |
NCache Detalles NCache Docs Configurar NCache Proveedor IDistributedCache
Conclusión
Microsoft ofrece dos opciones como IDistributedCache
proveedores Uno es SQL Server y el segundo es Redis. NCache es mejor que ambas opciones. En comparación con SQL Server, NCache es mucho más rápido y más escalable. También, NCache también es mejor que Redis por las siguientes razones:
- .NET nativo: NCache es .NET 100% nativo y, por lo tanto, encaja muy bien en su pila de aplicaciones .NET. Por otro lado, Redis proviene de un fondo de Linux y no es un caché nativo de .NET.
- Más rápido que Redis: NCache es más rápido que Redis as NCache La función Caché de cliente ofrece NCache un aumento significativo del rendimiento.
- Más características: NCache ofrece una serie de funciones de caché distribuida muy importantes que Redis no es. Ver más detalles en este Redis vs NCache.