ASP.NET Core wird aufgrund seiner saubereren und leichteren Architektur und plattformübergreifenden Unterstützung immer beliebter für die Entwicklung von Webanwendungen. Solche ASP.NET Core Anwendungen haben einen hohen Datenverkehr und werden in einer Bereitstellung mit mehreren Servern mit Lastenausgleich ausgeführt. Tatsächlich ist es üblich, Webfarmen mit 10 bis 20 Servern zu sehen, und einige davon sind sogar noch größer.
Eine Multi-Server-Bereitstellung mit Lastenausgleich macht Ihre Anwendungsebene sehr skalierbar, da Sie weitere Server hinzufügen können, wenn Ihre Transaktionslast zunimmt. Dies ermöglicht Ihrem ASP.NET Core Anwendung, um hohe Transaktionslasten problemlos zu bewältigen. Es gibt immer noch einen Leistungsengpass, der Ihren ASP verlangsamt.NET Core Anwendung.
Und dieses ASP.NET Core Der Leistungsengpass liegt in Ihrer Datenbank und Ihrem Datenspeicher, die schwere Lasten nicht so bewältigen können wie Ihr ASP.NET Core Anwendungsebene kann. Obwohl Sie der Webfarm auf Anwendungsebene weitere Server hinzufügen können, können Sie dies nicht mit Ihrer Datenbankebene tun. Im Folgenden sind die beiden Arten der Datenspeicherung aufgeführt, die zu einem Leistungsengpass für ASP werden.NET Core um weitere Anwendungsbeispiele zu finden.
- Datenbankserver (SQL-Server)
- ASP.NET Core Sessions
NCache Details NCache Docs NCache Client-API
Die Lösung: Verteilter Cache
Diese Datenspeicher zu entfernen Leistungsengpässe, verwenden Sie am besten einen verteilten Cache wie NCache. NCache ist ein verteilter .NET-Open-Source-In-Memory-Cache, der viel schneller als die Datenbank ist. Im Gegensatz zu Ihrer Datenbank NCache is linear skalierbar weil Sie damit einen Cluster von Cache-Servern aufbauen und weitere Server zum Cluster hinzufügen können, wenn Ihre Transaktionslasten zunehmen.
NCache können Sie Anwendungsdaten zwischenspeichern, sodass Sie diese teuren Datenbankreisen um fast 80 % reduzieren können. Dadurch wird die Belastung der Datenbank reduziert, wodurch sowohl Lese- als auch Schreibvorgänge viel schneller ausgeführt werden können und nicht mehr zu einem Leistungsengpass werden.
NCache ist auch ein skalierbarer verteilter Speicher für Ihre ASP.NET Core Sessions. Zusätzlich NCache repliziert ASP.NET Core Sitzungen auf mehreren Servern, um Datenverluste zu vermeiden, falls ein Cache-Server ausfällt. Für ASP.NET Core Sitzungen ist dies sehr wichtig, da Sie es sich nicht leisten können, Sitzungen zur Laufzeit zu verlieren. Unten ist ein Diagramm, das zeigt, wie ein verteilter Cache aussieht NCache passt in Ihre Anwendungsbereitstellung.
NCache Details NCache Docs NCache Client-API
App-Daten-Caching über ASP.NET Core IDistributedCache
Vor ASP.NET Core, das ältere ASP.NET stellte eine eigenständige bereit ASP.NET-Cache das nicht den Anforderungen von Umgebungen mit mehreren Servern entsprach. Jetzt ASP.NET Core hat die eingeführt IDistributedCache Schnittstelle als eine ziemlich einfache Standard-API für verteiltes Caching, mit der Sie dagegen programmieren und dann verteilte Caches von Drittanbietern nahtlos einbinden können.
Hier ist ein Anwendungsbeispiel IDistributedCache
Schnittstelle:
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 hat auch einen Anbieter für implementiert IDistributedCache
die Sie an Ihren ASP anschließen können.NET Core Anwendungen. Auf diese Weise müssen Sie keinen spezifischen Code ändern NCache.
Hier ist, was die IDistributedCache
Schnittstelle wie folgt aussieht (bitte beachten Sie, dass jede dieser Methoden auch eine Async-Überladung hat).
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); } } |
Konfigurieren NCache als IDistributedCache-Anbieter
So konfigurieren Sie NCache wie dein IDistributedCache
Anbieter in Ihrem ASP.NET Core Startup
Klasse.
1 2 3 4 5 6 7 8 9 10 11 |
public class Startup { ... public void ConfigureServices (IServiceCollection services) { ... services.AddNCacheDistributedCache(); ... } ... } |
NCache Details ASP.NET Core Caching ASP.NET Core Sitzungsanbieter
Warum NCache API über IDistributedCache?
Wenn Ihre Caching-Anforderungen ziemlich einfach sind und Sie die Flexibilität wünschen, den Anbieter für verteiltes Caching nahtlos zu wechseln, sollten Sie fortfahren und die verwenden IDistributedCache Schnittstelle. Es ermöglicht Ihnen, Ihren Caching-Anbieter nahtlos zu wechseln. Aber wägen Sie das gegen die Kosten ab, die dadurch entstehen, dass Sie nicht viele erweiterte Caching-Funktionen haben.
Eine andere Option ist zu verwenden NCache API direkt von Ihrem ASP.NET Core Anwendung. NCache Die API ist der Legacy-ASP.NET-Cache-API sehr ähnlich. Es enthält unzählige kostenlose Funktionen, mit denen Sie die Vorteile eines verteilten Caches der Enterprise-Klasse voll ausschöpfen können.
Denken Sie daran, je mehr Daten Sie zwischenspeichern können, desto größer sind die Leistungs- und Skalierbarkeitsvorteile für Ihre Anwendung. Und ohne die erweiterten Caching-Funktionen sind Sie oft darauf beschränkt, schreibgeschützte oder einfache Daten zwischenzuspeichern. Lesen Sie mehr über all die verschiedenen NCache Caching-Funktionen die Sie vermissen, indem Sie die verwenden IDistributedCache
Anbieter.
Speichern von ASP.NET Core Sitzungen im verteilten Cache
Vor ASP.NET Core, stellte das ältere ASP.NET ein ASP.NET-Session-State-Provider-Framework bereit, das Sitzungsspeicheranbietern von Drittanbietern das Plug-In ermöglichte. ASP.NET Core Sitzungen bietet einen ähnlichen Mechanismus zum Einbinden von Speicheranbietern von Drittanbietern. Nachfolgend sind die beiden Verwendungsmöglichkeiten aufgeführt NCache als ASP.NET Core Sitzungsspeicherung:
Verwenden Sie die NCache für ASP.NET Core Sitzungen über IDistributedCache
Sobald Sie konfigurieren NCache as IDistributedCache
Anbieter für ASP.NET Core, NCache wird automatisch zur Standardspeicheroption für ASP.NET Core Sitzungen und Sie müssen nichts weiter tun. Beachten Sie jedoch, dass diese Implementierung im Vergleich zur älteren (vor ASP.NET Core) ASP.NET-Sitzungsstatus.
Hier sind einige der Dinge, die das Standard-ASP.NET Core Sitzungsimplementierung fehlt:
- Sitzungssperre: ASP.NET Core bietet keine Sitzungssperre. Dies ist etwas, das sogar der ältere ASP.NET-Sitzungsstatus bereitgestellt hat.
byte[]
Array für benutzerdefinierte Objekte: ASP.NET Core zwingt Sie, alle Ihre benutzerdefinierten Objekte in ein Byte-Array zu konvertieren, bevor Sie sie in der Sitzung speichern können. Auch ältere ASP.NET-Sitzungsstatus unterstützen benutzerdefinierte Objekte.
Verwenden Sie die NCache als ASP.NET Core Sitzungsanbieter
So umgehen Sie das Standard-ASP.NET Core Sessions-Implementierung durch IDistributedCache
Anbieter, NCache hat einen eigenen ASP implementiert.NET Core Sitzungsanbieter. Diese Implementierung hat viel mehr Funktionen als die Standardimplementierung.
So konfigurieren Sie es in Ihrem Startup
Klasse.
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(); ... } ... } |
Sie können ASP angeben.NET Core Sitzungskonfigurationen für die oben genannten in appsettings.json
Datei wie folgt:
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 Details NCache Docs Einrichtung NCache IDistributedCache-Anbieter
Zusammenfassung
Microsoft bietet zwei Optionen als IDistributedCache
Anbieter. Einer ist SQL Server und der zweite ist Redis. NCache ist besser als beide Optionen. Im Vergleich zu SQL Server, NCache ist viel schneller und skalierbarer. Ebenfalls, NCache ist auch besser als Redis aus den folgenden Gründen:
- Natives .NET: NCache ist 100% natives .NET und passt daher sehr gut in Ihren .NET-Anwendungsstack. Auf der anderen Seite, Redis stammt aus einem Linux-Hintergrund und ist kein nativer .NET-Cache.
- Schneller als Redis: NCache ist tatsächlich schneller als Redis as NCache Client-Cache-Funktion gibt NCache eine deutliche Leistungssteigerung.
- Mehr Funktionen: NCache bietet eine Reihe sehr wichtiger verteilter Cache-Funktionen, die Redis nicht. Weitere Einzelheiten finden Sie in diesem Redis vs NCache.