Mit der AppFabricAufgrund des Marktrückzugs von .NET bleibt die .NET-Branche im Stich, damit sich ein verteilter In-Memory-Cache als Konkurrent herausstellt. Obwohl einige Alternativen aufgetaucht sind, bietet keine eine so vollständige Lösung wie NCache.
NCache ist ein verteilter Open-Source-In-Memory-Cache, der Benutzern einen äußerst schnellen und linear skalierbaren verteilten Cache bietet, der Anwendungsdaten zwischenspeichert und teure Datenbankreisen reduziert. NCache ist eine bewährte Marktware und älter als App Fabric um etwa fünf Jahre. Und es gibt zahlreiche Vorteile, die Sie am Ende Ihres Migrationsprozesses erwarten, wie wir weiter unten besprechen werden.
NCache Details AppFabric Ende AppFabric Migration
1. Den Cache frisch halten
Die Datenbanksynchronisierung ist ein entscheidendes Merkmal für einen qualitativ hochwertigen verteilten In-Memory-Cache. Da Sie normalerweise verteilte Caches in der mittleren Ebene zwischen Anwendungen und einer Datenbank finden, besteht eine hohe Wahrscheinlichkeit, dass Daten direkt in die Datenbank oder den Cache unabhängig voneinander aktualisiert werden. Dieses Problem erfordert einen Mechanismus, um veraltete Daten zu verhindern.
Daher müssen solche verteilten Caches es Ihnen ermöglichen, eine Beziehung oder Abhängigkeit zwischen dem zwischengespeicherten Element und dem entsprechenden Element in der Datenbank anzugeben. Wann immer sich die Datenbank ändert, werden ihre Änderungen im Cache entweder durch Invalidierung oder Aktualisierungen widergespiegelt.
Zum Beispiel, NCache bietet SQL-Abhängigkeit Unterstützung für SQL-Server. Sie können eine Abhängigkeit eines zwischengespeicherten Elements mit einem auf SQL-Anweisungen basierenden Dataset erstellen. Immer wenn sich dieses spezifische Dataset ändert oder modifiziert wird, sendet der SQL Server ein Ereignis an NCache, und das Cache-Element wird ungültig gemacht. Beispiel: CacheItem item = newCacheItem(myObject);
1 2 3 4 5 6 7 8 9 10 11 |
// Get orders against customerID from DB var order = FetchOrderByCustomerID("ALFKI"); // Generate a unique cache key for the order string key = $"Order:{order.OrderID}"; CacheItem item = new CacheItem(order); // Create SQL query to select the data from the database string query = "SELECT CustomerID, Address, City FROM dbo.Customers WHERE CustomerID = 'ALFKI';"; //Specify the database connection string and the query to create and set SQLCacheDependency. item.Dependency = new SqlCacheDependency(dbConnString, query); // Insert the item into the cache cache.Insert(key, item); |
Der Cache wird also mit der Datenbank synchronisiert. NCache unterstützt dieselbe Funktion auch mit Oracle, OleDB und sogar nicht-relationalen Datenquellen wie FileSystems über unsere Persistenzspeicher.
NCache Details Oracle-Datenbank OleDB
2. SQL-Abfragen
Gegeben NCacheAufgrund der Synchronisierungsfunktion von ist es leicht in Erwägung zu ziehen, alle Ihre Daten im Cache zu behalten. Leider würde dies ein kleines Problem darstellen, da das Durchsuchen Ihrer zwischengespeicherten Daten nur möglich ist, wenn das Abrufen über Schlüssel die einzige Option ist. NCache bietet hierfür eine Lösung durch SQL-Abfragen. Möglich ist dies durch Indizierung ausgewählte .NET-Objektattribute und Durchführen von Suchabfragen.
1 2 3 4 5 6 7 8 9 |
//string query = "SELECT * FROM FQN.Product WHERE UnitsInStock > ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("UnitsInStock",0); ICacheReader reader = cache.ExecuteReader(queryCommand); while (reader.Read()) { string ID = reader.GetValue("ProductID"); string Name = reader.GetValue("ProductName"); } |
Um die Erfahrung der Entwickler zu verbessern, NCache lässt Sie auch zuweisen Gruppen, Tags und benannte Tags zu Ihren zwischengespeicherten Elementen, die Sie später in Ihren SQL-Abfragen verwenden können, um Elemente schnell abzurufen.
3. LINQ-Abfrage
Ebenso NCache bietet Benutzern die Möglichkeit, ihre Daten durch LINQ-Abfragen zu durchlaufen, wie unten gezeigt.
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); var result = from prod in products where prod.ProductID > 1001 select prod; |
Darüber hinaus können Sie diese Abfragen mithilfe der identifizierten weiter anpassen logisch, Anhäufung und Wildcard Operationen.
NCache Details SQL-Abfragen LINQ-Abfragen
4. Serverseitiger Code
Häufig helfen verteilte Caches Anwendungen lediglich dabei, Daten aus der Datenbank abzurufen und in den Cache einzufügen. Bei einem anderen Ansatz delegiert Ihre Anwendung diese Verantwortung jedoch an den verteilten Cache. Wenn Ihre Anwendung ein Element aus dem Cache anfordert, bestimmt sie im Wesentlichen, ob das betreffende Element im Cache vorhanden ist oder nicht, und lädt die entsprechenden Daten aus der Datenbank. Diese Funktion wird aufgerufen durchlesen. NCache bietet ein ähnliches an durchschreiben Option, die Schreibvorgänge direkt auf der Datenquelle über den Cache ermöglicht.
Und NCache serverseitige Funktionalität geht noch viel weiter mit dem Cache Loader & Refresher. Diese Funktion überwand erfolgreich die anfängliche Leistungslücke, mit der alle Caches beim Start konfrontiert sind, da sie zunächst leer sind. Sie können den Loader verwenden, um die benötigten Daten zu identifizieren und vorab zu laden. Die Auffrischung dient lediglich dazu, sicherzustellen, dass diese Daten nicht veraltet sind.
NCahttps://www.alachisoft.com/resources/docs/ncache/prog-guide/server-side-api-programming.htmlche bietet außerdem ein vollständiges MapReduce-Framework, mit dem Sie Ihre zwischengespeicherten Daten analysieren und umsetzbare Erkenntnisse in Echtzeit gewinnen können. MapReduce-Code ist in .NET geschrieben und läuft daher innerhalb der NCache verarbeiten.
NCache Details Karte verkleinern NCache Lader & Refresher
5. Client-Cache (nahe dem Cache)
A Client-Cache, ist lokal für Ihren Webserver oder Ihre Anwendung und ermöglicht es Ihnen, häufig verwendete Daten innerhalb desselben Prozesses oder Servercomputers zwischenzuspeichern. Ein Client-Cache ist also ein Affinitäts-Cache, der Ihrer Anwendung einen weiteren Leistungsschub verleiht, indem er die Kosten für die Netzwerkbandbreite senkt, ohne die Datenintegrität zu beeinträchtigen. Ein Client-Cache funktioniert mit allen NCache gruppiert Caching-Topologien (Gespiegelter, partitionierter und Partitionsreplikat-Cache).
Dies geschieht, indem es mit dem Cache-Cluster verbunden bleibt und synchronisiert, indem es die Änderungen im Haupt-Cache-Cluster repliziert. Der Unterschied zwischen AppFabric lokaler Cache und die NCache Client-Cache ist das AppFabric Der lokale Cache ist eigenständig und stellt keine Verbindung mit dem Hauptcluster her.
6. Multi-Datacenter-Unterstützung
Die WAN-Replikation ist eine weitere wichtige Funktion für hochkarätige verteilte In-Memory-Caches, die AppFabric fehlt. Es ist am nützlichsten bei geografisch verteilten Rechenzentren – für die Notfallwiederherstellung oder den Lastausgleich für lokalisierten Datenverkehr.
NCache bietet Bridge-Topologien zur Bewältigung von WAN-Latenzen. Das NCache Bridge repliziert und behält die Konsistenz über verschiedene Caches auf der ganzen Welt bei. Sie haben entweder die Möglichkeit, Ihren Cache-Cluster passiv zu halten, um ein Cluster-Replikat für die Notfallwiederherstellung nachzuahmen, oder zwei separate Caches in verschiedenen Rechenzentren zu synchronisieren. Daten werden asynchron über sichere Internetverbindungen repliziert.
NCache Details Client-Cache WAN-Replikation
7. Dynamischer Cluster
Wie alle AppFabric Kunden wissen wahrscheinlich, dass ihr Cluster nicht vollständig dynamisch ist. Die Abhängigkeit von Microsoft von seiner Lead-Hosts-Majority-Rule bedeutet einen sehr fehlbaren Cluster, der ziemlich leicht ausfällt, wenn auch nur einer der Lead-Hosts ausfällt. Diese Lead-Host-Knoten ähneln auch der Master-and-Slave-Architektur und sind auch nicht vollständig Peer-to-Peer.
Alternativ NCache is hochdynamisch und ermöglicht das Hinzufügen oder Entfernen von Cache-Servern zur Laufzeit ohne Unterbrechung. Daten werden automatisch neu ausgeglichen (bzw staatlich übertragen) zur Laufzeit ohne Leistungseinbußen. NCache Clients halten automatisch den Kommunikationskanal mit den Cache-Servern aufrecht, unabhängig vom Serverstatus. Darüber hinaus stellen seine Cache-Cluster die Ausführung von Client-Operationen sicher, selbst wenn der Datenausgleich (Zustandsübertragung) im Gange ist.
Das bedeutet, dass im Cluster keine Master- oder Slave-Knoten vorhanden sind. Es gibt einen primären Koordinatorknoten, der der Senior-Knoten ist. Und wenn es ausfällt, wird der nächsthöhere Knoten automatisch zum primären Koordinator. All dies geschieht ohne Unterbrechung des Betriebs des Kunden.
8. Integrationen von Drittanbietern
Um das Ganze abzurunden, NCache unterstützt offiziell Anbieter für verschiedene wichtige Bibliotheken von Drittanbietern, wie zum Beispiel:
- Entity Framework Core Cache
- Entity Framework-Cache
- NHibernate-Cache der 2. Ebene
- ASP-Sitzungsstatus und View-Status-Caching
Zusammenfassung
Zusamenfassend, NCache stellt eine breite Palette von Funktionen vor, die Unternehmen in ihren .NET-Anwendungen verwenden und benötigen. Besonders diejenigen, die AppFabric kamen zu keinem Zeitpunkt ihres Lebenszyklus dazu, sie einzuführen. Wenn Sie also Ihr Bestes geben und in ein verteiltes Caching-System investieren möchten, das wirklich auf Ihre Bedürfnisse zugeschnitten ist, laden Sie es herunter NCache für eine schmerzlose Migration.
NCache Details Herunterladen NCache Editionsvergleich