ASP.NET Core devient populaire pour le développement d'applications Web en raison de son architecture plus propre et plus légère et de sa prise en charge multiplateforme. Un tel ASP.NET Core les applications génèrent un trafic élevé et s'exécutent dans un déploiement multiserveur à charge équilibrée. En fait, il est courant de voir 10 à 20 fermes Web de serveurs et quelques-unes encore plus grandes que cela.
Le fait d'avoir un déploiement à charge équilibrée sur plusieurs serveurs rend votre niveau d'application très évolutif, car vous pouvez ajouter plus de serveurs à mesure que votre charge de transaction augmente. Cela permet à votre ASP.NET Core application pour gérer facilement de lourdes charges de transactions. Il existe toujours un goulot d'étranglement de performances qui ralentit votre ASP.NET Core .
Et cet ASP.NET Core le goulot d'étranglement des performances se trouve dans votre base de données et votre stockage de données qui ne peuvent pas gérer de lourdes charges comme votre ASP.NET Core le niveau d'application peut. Bien que vous puissiez ajouter d'autres serveurs à la batterie de serveurs Web de niveau application, vous ne pouvez pas faire de même avec votre niveau de base de données. Vous trouverez ci-dessous les deux types de stockage de données qui deviennent un goulot d'étranglement des performances pour ASP.NET Core applications.
- Serveur de base de données (SQL Server)
- ASP.NET Core Sessions
NCache Détails NCache Docs NCache API cliente
La solution : le cache distribué
Pour supprimer ces stockages de données goulets d'étranglement de performance, votre meilleur pari est d'utiliser un cache distribué comme NCache. NCache est un cache distribué en mémoire open source .NET qui est beaucoup plus rapide que la base de données. Contrairement à votre base de données, NCache is linéairement évolutif car il vous permet de créer un cluster de serveurs de cache et d'ajouter d'autres serveurs au cluster à mesure que vos charges de transaction augmentent.
NCache vous permet de mettre en cache les données d'application afin de réduire de près de 80 % ces déplacements coûteux dans la base de données. Cela réduit la charge sur la base de données, ce qui lui permet d'effectuer à la fois des lectures et des écritures beaucoup plus rapidement et de ne plus devenir un goulot d'étranglement des performances.
NCache est également un magasin distribué évolutif pour votre ASP.NET Core brainstorming. En outre, NCache réplique ASP.NET Core sessions sur plusieurs serveurs pour éviter la perte de données en cas de panne d'un serveur de cache. Pour ASP.NET Core sessions, ceci est très important car vous ne pouvez pas vous permettre de perdre des sessions au moment de l'exécution. Ci-dessous un diagramme montrant comment un cache distribué comme NCache s'intègre dans le déploiement de votre application.
NCache Détails NCache Docs NCache API cliente
Mise en cache des données d'application via ASP.NET Core IDistributedCache
Avant ASP.NET Core, l'ancien ASP.NET fournissait une solution autonome Cache ASP.NET qui ne répondait pas aux besoins des environnements multi-serveurs. Maintenant, ASP.NET Core a introduit le IDistributedCache interface comme une API standard de mise en cache distribuée assez basique qui vous permet de programmer dessus, puis de brancher des caches distribués tiers de manière transparente.
Voici un exemple d'utilisation IDistributedCache
interface:
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 a également mis en place un fournisseur pour IDistributedCache
que vous pouvez connecter à votre ASP.NET Core applications. De cette façon, vous n'avez pas à modifier le code spécifique à NCache.
Voici ce que le IDistributedCache
ressemble à l'interface (veuillez noter que chacune de ces méthodes a également une surcharge Async).
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); } } |
Configuration NCache en tant que fournisseur IDistributedCache
Voici comment configurer NCache comme votre IDistributedCache
fournisseur dans votre ASP.NET Core Startup
classe.
1 2 3 4 5 6 7 8 9 10 11 |
public class Startup { ... public void ConfigureServices (IServiceCollection services) { ... services.AddNCacheDistributedCache(); ... } ... } |
NCache Détails ASP.NET Core Cache haute performance ASP.NET Core Fournisseur de sessions
Pourquoi choisir NCache API sur IDistributedCache ?
Si vos besoins en matière de mise en cache sont assez basiques et que vous souhaitez avoir la possibilité de changer de fournisseur de mise en cache distribuée de manière transparente, vous devez continuer et utiliser le IDistributedCache interface. Il vous permet de changer de fournisseur de cache de manière transparente. Mais pesez cela par rapport au coût de ne pas avoir beaucoup de fonctionnalités de mise en cache avancées.
Une autre option est d'utiliser NCache API directement depuis votre ASP.NET Core . NCache L'API est très similaire à l'ancienne API ASP.NET Cache. Il contient des tonnes de fonctionnalités gratuites qui vous permettent de tirer pleinement parti d'un cache distribué de niveau entreprise.
N'oubliez pas que plus vous pouvez mettre en cache de données, plus les performances et l'évolutivité de votre application sont avantageuses. Et, sans les fonctionnalités de mise en cache avancées, vous êtes souvent limité à la mise en cache de données en lecture seule ou simples. En savoir plus sur tous les différents NCache fonctionnalités de mise en cache que vous manquez en utilisant le IDistributedCache
fournisseur.
Stockage ASP.NET Core Sessions dans le cache distribué
Avant ASP.NET Core, l'ancien ASP.NET fournissait une infrastructure de fournisseur d'état de session ASP.NET qui permettait aux fournisseurs de stockage de session tiers de se connecter. ASPIC.NET Core sessions fournit un mécanisme similaire pour brancher des fournisseurs de stockage tiers. Voici les deux façons d'utiliser NCache en tant qu'ASP.NET Core stockage des sessions :
Utilisez NCache pour ASP.NET Core Sessions via IDistributedCache
Dès que vous configurez NCache as IDistributedCache
fournisseur pour ASP.NET Core, NCache devient automatiquement l'option de stockage par défaut pour ASP.NET Core séances et vous n'avez rien d'autre à faire. Mais veuillez noter que cette implémentation est limitée en fonctionnalités par rapport à l'ancienne (avant ASP.NET Core) État de la session ASP.NET.
Voici quelques-unes des choses que l'ASP par défaut.NET Core La mise en œuvre des sessions manque :
- Verrouillage de session: ASP.NET Core ne fournit pas de verrouillage de session. C'est quelque chose que l'état de session ASP.NET encore plus ancien avait fourni.
byte[]
tableau pour les objets personnalisés : ASP.NET Core vous oblige à convertir tous vos objets personnalisés en tableau d'octets avant de pouvoir les stocker dans la session. Même les anciens états de session ASP.NET prennent en charge les objets personnalisés.
Utilisez NCache en tant qu'ASP.NET Core Fournisseur de séances
Pour contourner l'ASP par défaut.NET Core Mise en œuvre des sessions à travers IDistributedCache
fournisseur, NCache a mis en place son propre ASP.NET Core Prestataire de séances. Cette implémentation a beaucoup plus de fonctionnalités que celle par défaut.
Voici comment vous le configurez dans votre Startup
classe.
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(); ... } ... } |
Vous pouvez spécifier ASP.NET Core Configurations de session pour ce qui précède dans appsettings.json
fichier comme suit :
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 Détails NCache Docs Configurer NCache Fournisseur IDistributedCache
Conclusion
Microsoft propose deux options comme IDistributedCache
fournisseurs. L'un est SQL Server et le second est Redis. NCache est mieux que les deux options. Par rapport à SQL Server, NCache est beaucoup plus rapide et plus évolutif. Aussi, NCache est aussi mieux que Redis Pour les raisons suivantes:
- .NET natif : NCache est 100% natif .NET et s'intègre donc très bien dans votre pile d'applications .NET. D'autre part, Redis provient d'un arrière-plan Linux et n'est pas un cache .NET natif.
- Plus rapide que Redis: NCache est en fait plus vite que Redis as NCache La fonctionnalité de cache client donne NCache une amélioration significative des performances.
- Plus de fonctionnalités: NCache offre un certain nombre de fonctionnalités de cache distribué très importantes qui Redis ne fait pas. Voir plus de détails dans ce Redis vs NCache.