Boston Code Camp 31

ASP optimieren.NET Core Leistung mit verteiltem Cache

Von Iqbal Khan
Präsident & Technologie-Evangelist

ASP.NET Core wird immer beliebter für die Entwicklung von stark frequentierten Webanwendungen. Erfahren Sie, wie Sie ASP optimieren.NET Core Leistung für die Verarbeitung extremer Transaktionslasten ohne Verlangsamung durch Verwendung eines verteilten Open Source .NET-Cache. Dieser Vortrag umfasst:

  • Schneller Überblick über ASP.NET Core Leistungsengpässe
  • Überblick über das verteilte Caching und wie es Leistungsprobleme löst
  • Wo können Sie verteiltes Caching in Ihren Anwendungen verwenden?
  • Einige wichtige verteilte Cache-Funktionen
  • Praktische Beispiele mit Open Source NCache als verteilter Cache

Okay, danke, alle zusammen. Kann mich jeder gut hören? Okay, ich habe vergessen, die Folie beizufügen, um allen Sponsoren zu danken. Ich gehe einfach auf die Website und zeige Ihnen die Logos aller Sponsoren. Wir sind übrigens einer von ihnen, also werde ich das auch am Ende zeigen. Das haben uns die Organisatoren mitgeteilt. Deshalb werde ich dieses Thema noch einmal durchgehen und möchte dieses Gespräch nach Möglichkeit interaktiver gestalten. Wenn Sie also Fragen haben, können Sie mich gerne unterbrechen. Lassen Sie mich nur sicherstellen, dass alles aufgezeichnet wird.

Das heutige Thema ist also, wie Sie ASP optimieren.NET core Anwendungsleistung mit verteiltem Caching? Ich werde ein Open-Source-Produkt namens verwenden NCache. Wie viele hier haben davon gehört? NCache Vor? Das ist eine gute Zahl. Okay, ich werde es verwenden NCache als Beispiel. In diesem Gespräch geht es nicht darum NCache, es geht um ASP.NET Core Leistung und wie können Sie Caching nutzen? Ich bin mir also sicher, dass Sie wegen der ASP hier waren.NET core ist populär geworden, es wird immer beliebter, es ist die neue, saubere, leichtgewichtige Architektur, es ist die plattformübergreifende Technologie, die Neuarchitektur von .NET ist Open Source, es gibt viele ASP.NET-Legacy-Anwendungen, die ebenfalls auf ASP umsteigen.NET core. ASP.NET core wird die Haupttechnologie sein, mit der Sie Webanwendungen in .NET entwickeln würden.

Daher entwickeln immer mehr Menschen Anwendungen, die Skalierbarkeit erfordern. Also, ASP.NET core Natürlich braucht es auch Skalierbarkeit. Lassen Sie mich kurz definieren, was Skalierbarkeit ist. Ich bin mir sicher, dass die meisten von Ihnen das bereits wissen, aber der Vollständigkeit halber werde ich es definieren.

Was ist Skalierbarkeit?

Skalierbarkeit bedeutet, dass Ihre Anwendung skalierbar ist, wenn Sie über eine Anwendung verfügen, die eine wirklich gute Reaktionszeit hat und mit fünf Benutzern eine wirklich gute Leistung erbringt. Wenn Sie die gleiche Leistung auch mit fünftausend, fünfzigtausend, fünfhunderttausend Benutzern aufrechterhalten können, ist Ihre Anwendung skalierbar. Wenn Ihre Anwendung bei fünf Benutzern nicht gut funktioniert, liegen andere Probleme vor, auf die wir hier nicht näher eingehen. Ich werde also darüber sprechen, wie Sie diese gute Leistung von fünf Benutzern auf fünfzigtausend oder fünfhunderttausend Benutzer aufrechterhalten können.

Lineare Skalierbarkeit

Lineare Skalierbarkeit bedeutet, dass Ihre Anwendung so konzipiert ist, dass Sie einfach weitere Server in der Produktion hinzufügen können, wenn Ihre Auslastung zunimmt, und wenn Sie weitere Server hinzufügen, wächst Ihre Transaktionskapazität, und das ist es, was Ihnen diese gute Leistung bietet, wenn Sie in der Lage sind, die lineare Skalierbarkeit aufrechtzuerhalten. Wenn Sie nicht in der Lage sind, die lineare Skalierbarkeit aufrechtzuerhalten, gibt es eine Art Engpass, mit dem Ihre Anwendung ziemlich bald konfrontiert wird, wenn Sie weitere Server hinzufügen. Schon bald wird es keine Rolle mehr spielen, ob Sie weitere Server hinzufügen oder nicht, und Sie werden einfach auf einen Engpass stoßen, den gibt es, und ich werde über den Engpass sprechen.

Folgende Anwendungen benötigen Skalierbarkeit

Welche Anwendungen benötigen also Skalierbarkeit? Im Allgemeinen handelt es sich bei Serveranwendungen um Webanwendungen, ASP.NET core, Webdienste, die von anderen Webanwendungen verwendet werden. Webdienste können unabhängige Anwendungen sein, die von externen Anwendungen verwendet werden, oder sie können Teil von Webanwendungen sein, die Sie entwickeln. Wenn sie eine hohe Transaktionsfrequenz aufweisen, benötigen sie in jedem Fall auch Skalierbarkeit.

Microservices werden derzeit zu einem heißen neuen Schlagwort. So möchten Sie Ihre Anwendung neu gestalten. Microservices werden auch ihre serverseitige Technologie nutzen, sie werden in Anwendungen mit hohem Transaktionsvolumen eingesetzt und benötigen Skalierbarkeit. Für alle anderen Serveranwendungen verfügen viele große Organisationen über eine Stapelverarbeitung im Backend und müssen den Workflow im Backend durchführen. Eine Reihe von Backend-Serveranwendungen, die lediglich versuchen müssen, viele Transaktionen abzuwickeln, benötigen außerdem Skalierbarkeit. Wenn Ihr Unternehmen oder Sie sich also mit einer dieser Arten von Anwendungen befassen und Sie eine gute Leistung erzielen möchten, ist dies das richtige Gespräch für Sie.

Das Skalierbarkeitsproblem

Nachdem wir nun festgestellt haben, dass diese Anwendungen Skalierbarkeit benötigen, gibt es ein Skalierbarkeitsproblem? Ja, das gibt es, aber nicht auf der Anwendungsebene, dem ASP.NET core Bei einer Anwendung können Sie ganz einfach weitere Server hinzufügen, wenn die Transaktionslast zunimmt. Normalerweise haben Sie vor der Anwendungsschicht einen Lastausgleicher, der den Datenverkehr gleichmäßig auf alle Server leitet. Wenn Sie mehr und mehr Benutzer haben, fügen Sie diese einfach hinzu Mehr Kartons, kein Problem. Das Problem ist natürlich die Datenspeicherung bzw. die Datenbanken. Das sind Ihre relationalen Datenbanken, Ihr Mainframe und das ist einer der Gründe dafür NoSQL databaseEs hat begonnen, an Bedeutung zu gewinnen, aber es zeigt sich, dass man in den meisten Situationen immer noch relationale Datenbanken verwenden muss, sowohl aus technischen als auch nichttechnischen Gründen. Wenn Sie sich also die meisten Anwendungen ansehen, die Sie erstellt haben oder ausführen, werden Sie am Ende relationale Datenbanken verwenden. Im Fall von .NET ist die beliebteste natürlich ein SQL-Server. Wenn Sie also nicht in der Lage sind, a zu verwenden NoSQL databaseWelchen Nutzen hat es für die Skalierbarkeit? Und der Grund ist, dass die NoSQL database fordert Sie auf, die relationale Datenbank aufzugeben und die Daten dorthin zu verschieben NoSQL, was bei einigen Daten möglich ist, bei vielen Geschäftsdaten jedoch nicht, alle Ihre Kunden, Ihre Konten, Ihre Aktivitäten – alles, was noch in einer relationalen Datenbank verbleiben muss. Sie müssen also dieses Skalierbarkeitsproblem mit relationalen Datenbanken im Bild lösen, und deshalb sage ich das NoSQL database ist nicht immer die Antwort, weil Sie es nicht verwenden können.

Die Lösung (verteiltes Caching)

Die Lösung dieses Problems besteht natürlich darin, einen verteilten Cache zu verwenden, und auf diese Weise wird ein verteilter Cache in Ihrer Umgebung bereitgestellt.

Verteilter Cache

Dies ist also die Anwendungsebene. In einigen Fällen befindet sich hier möglicherweise ein Load Balancer, der den Datenverkehr an alle Anwendungsserver weiterleitet. In einigen Fällen gibt es möglicherweise keinen Lastenausgleich, es gibt möglicherweise eine andere Möglichkeit, die Last zu verteilen, da es sich um einige Backend-Anwendungen handelt, Sie haben aber trotzdem mehrere Server, auf denen Ihre Anwendungen ausgeführt werden. Dies ist also sehr skalierbar, aber Sie können nicht immer mehr Datenbanken hinzufügen. Jetzt, da relationale Datenbankunternehmen versuchen, so viel wie möglich zu tun, um auf ihrer Seite zu skalieren, verfügen sie beispielsweise über In-Memory-Tabellen, die viel schneller sind. Ich denke, SQL Server hat dieses Konzept von schreibgeschützten Replikaten dort, wo es diese gibt, auch nicht eingeführt. Wenn Sie also In-Memory-Tabellen mit schreibgeschützten Replikaten kombinieren, erhalten Sie eine Leistungssteigerung, aber wie Sie sehen werden, werde ich darauf eingehen Das. Je mehr Replikate Sie erstellen, desto mehr Kopfschmerzen haben Sie, denn jedes Mal, wenn Sie etwas aktualisieren, müssen alle Replikate aktualisiert werden. Um die beste Leistung und Skalierbarkeit zu erzielen, müssen Sie sicherstellen, dass Sie nicht mehr als ein Replikat haben. Es gibt also eine Masterkopie und ein Replikat aller Daten, und gleichzeitig müssen Sie skalierbar sein. Der Grund dafür, dass sie dies nicht tun können, ist, dass eine relationale Datenbank nicht auf die gleiche Weise partitioniert werden kann wie ein verteilender Cache oder a NoSQL database kann daran liegen, dass sowohl verteilter Cache als auch NoSQL sind Schlüssel-Wert-Paare, was ein ganz anderes Design als eine relationale Datenbank darstellt, aber letztendlich müssen Sie einen verteilten Cache als Caching-Ebene zwischen der Anwendungsebene und Ihrer Datenbank einfügen.

Wie sieht das also im Hinblick auf die Konfiguration aus? Normalerweise handelt es sich also nicht um sehr teure Boxen. Dies sind in der Regel Boxen mit 8 bis 16 Kernen, viel Speicher (16 bis 32 GB) und Netzwerkkarten mit 1 bis 10 Gigabit. Manchmal hat man zwei Netzwerkkarten, eine für das Clustering und eine für die Tools der Clients, aber das ist es auch schon, das ist etwas ganz anderes als die Anschaffung eines High-End-Datenbankservers mit viel Rechenleistung, der seine Arbeit erledigt Es gibt nur einen oder nur sehr wenige davon. Es gibt also keine andere Möglichkeit, dies zu umgehen. Wir sagen unseren Kunden, dass sie nicht mehr als 64 GB RAM pro Box erhalten sollten, denn wenn Sie mehr als 64 GB RAM in einer .NET-Umgebung haben, muss dieser Speicher durch Garbage Collection gesammelt werden, und zwar mit zunehmender Speicherkapazität als Sie mehr Rechenleistung benötigen. Dann stehen Sie vor dem gleichen Problem und beginnen, sich wirklich teure Kartons zu besorgen. Es ist besser, 32-, 16- bis 32-Bit- oder 16- bis 32-GB-Speicher zu kaufen, aber mehr Boxen machen es billiger.

Wie funktioniert ein verteilter Cache?

Was macht also ein verteilter Cache? Es bildet sich tatsächlich ein Cluster, und ich spreche wieder von einem NCache Perspektive, es gibt auch andere wie Redis die ähnliche Dinge tun, aber auf eine andere Art und Weise. Der verteilte Cache bildet also einen Cluster, es ist ein TCP-basierter Cluster, und das Wichtigste an einem Cluster ist, dass Sie nicht möchten, dass die Datenbank ausfällt und in der Produktion auch der Cache nicht ausfällt geh auch runter. Daher muss dieser Cluster hochverfügbar sein. Der beste Weg, es für Kunden hochverfügbar zu machen, besteht also darin, sicherzustellen, dass es über eine Peer-to-Peer-Architektur verfügt, bei der jeder Knoten ein gleichberechtigter Bürger ist und jeder Knoten ausfallen kann oder Sie weitere Boxen hinzufügen können, es gibt keinen Master- Slave, da dies zu Komplikationen und Problemen mit der Hochverfügbarkeit führt. Daher wurden die Ressourcen Speicher, CPU und Netzwerkkarte als Ressourcen zusammengefasst. Wenn Sie also mehr hinzufügen, nehmen wir an, Sie haben immer mehr Verkehr oder mehr Transaktionen, fügen Sie anschließend weitere Server im Verhältnis 4 zu 1, 5 zu 1 hinzu, normalerweise würden Sie weitere Boxen hinzufügen. Mindestens zwei Cache-Server, und dann fügst du immer mehr hinzu, also fängst du mit zwei an, die Auslastung steigt und plötzlich wird alles langsamer und du fügst eine dritte Box hinzu, alles wird besser, wenn du weitere hinzufügst Laden Sie weitere Boxen und fügen Sie sie hinzu. Hier beginnen die Dinge bis zu einem bestimmten Punkt langsamer zu werden. Sie fügen ein viertes Kästchen hinzu und das Bild ist fertig.

Auf diese Weise skaliert es also linear. Theoretisch ist nichts unbegrenzt, aber es skaliert für mehr Situationen, es skaliert auf unbegrenzte Weise, wo es keinen Engpass gibt. So vermeiden Sie, dass Ihre Datenbank zu einem Engpass wird. Dies ist also so ziemlich eine wesentliche Best Practice Ihrer Anwendungsarchitektur geworden. Wenn Sie Anwendungen mit hohem Transaktionsvolumen ausführen, müssen Sie verteiltes Caching integrieren. Und da dies die einzige Möglichkeit ist, können Sie Leistung erzielen, da alles im Arbeitsspeicher erfolgt und alles, was die Festplatte berührt, niemals so schnell sein kann wie im Speicher -Speicher und Skalierbarkeit, da es verteilt ist. Noch Fragen dazu, bevor ich gehe? Eigentlich im Fall von NCache Sie können. NCache unterstützt .NET und Java, aber wenn Sie andere Anwendungen wie Python oder andere haben, können Sie diese nicht verwenden NCache, müssen Sie dann andere Caching-Lösungen verwenden, aber die Anwendung muss sich in einer skalierbaren Umgebung befinden. Grundsätzlich spielt es keine Rolle, welche Sprache Sie verwenden, die Funktionalität bleibt gleich. Wenn Sie eine .NET-Anwendung verwenden, gibt es einige Vorteile NCache bietet Ihnen viele .NET-spezifische Vorteile, da es sich um einen vollständigen .NET-Stack, seinen .NET-Kursstack, handelt und sich daher sehr gut einfügt. Es gibt auch ähnliche Produkte auf der Java-Seite, die als In-Memory-Datengrids bezeichnet werden und daher sehr gut zum Java-Stack passen. Ich werde zum Beispiel nur ein paar Informationen weitergeben. So, NCache hat eine Java-API, aber die einzigen Leute, die die Java-API verwenden, sind diejenigen, die kaufen NCache oder benutzen NCache aus einer .NET-Perspektive. Also, sie haben es NCache intern und sie sagten, sie könnten es genauso gut für Java verwenden und ein Java-Shop würde nach einem Java-basierten In-Memory-Datengrid suchen, nach dem ein .NET-Shop suchen würde NCache. Auf diese Weise wird der Markt aufgrund der gesamten Fachkompetenz segmentiert. Wenn Sie ein .NET-Shop sind, verfügen Sie über die gesamte .NET-Fachkompetenz im Vergleich zu Java. Warum also das Bild verkomplizieren? Für Datenbanken, also Nicht-SQL-Datenbanken, kann jede Datenbank verwendet werden? Jeder, jeder, denn der Zugriff auf die Datenbank erfolgt über Ihren eigenen benutzerdefinierten Code, der auf der Caching-Ebene gespeichert ist.

Das ist also eine weitere Funktion, die ich durchgehen werde: Eine der wesentlichen Funktionen, um sicherzustellen, dass der Cache mit der Datenbank synchronisiert bleibt, besteht darin, dass Ihr benutzerdefinierter Code auf dem Cache-Server leben muss. Wenn Sie den Cache zu einer Blackbox machen, in der sich nichts außer Daten im Cache befindet, ist das so, als hätten Sie eine relationale Datenbank ohne Trigger und gespeicherte Prozeduren oder andere Dinge. Das schränkt Ihre Nutzung des Caches ein. Caches waren also ursprünglich nur eine Blackbox. Memcached war ein beliebter Cache, er tat nichts, war nur ein Speicher, und im Laufe der Zeit entwickelten sie sich zu einer richtigen intelligenten Einheit, in der sie auch Ihren Code ausführen konnten. Beliebig NoSQL, jede relationale Datenbank kann damit verwendet werden. Und noch einmal: Alle diese Funktionen, über die ich spreche, sind sowohl Open Source als auch Enterprise. Deshalb erwähne ich es, weil es Open Source ist. Weitere Fragen? Beim Umgang mit NCache Handelt es sich hauptsächlich um automatisches Caching oder verwenden Sie eine API zum Cachen? Ich gehe also näher darauf ein, aber es hängt davon ab, was Sie zwischenspeichern? Bestimmte Arten der Cache-Nutzung erfolgen automatisch. Wenn Sie beispielsweise ASP einsetzen.NET core Sitzungen, dann handelt es sich um ein steckbares Modul, das einfach eingesteckt wird und beginnt, die Sitzungen im Cache zu speichern. Sie müssen also nichts tun, aber wenn Sie die Anwendungsdaten zwischenspeichern wollen, liegt dort der größte Vorteil , also gibt es eine API, die Sie aufrufen müssen, um zu bestimmen, was Sie zwischenspeichern möchten? Wie lange möchten Sie es zwischenspeichern? Wie möchten Sie es mit der Datenbank synchronisieren? Es gibt noch viele andere Dinge, die Sie beachten müssen. Deshalb werde ich alle Funktionen durchgehen, wie Sie verteilten Cache verwenden sollten NCache Um sicherzustellen, dass Sie alle Arten von Daten zwischenspeichern können, gibt es eine API. Ja.

Verwenden des verteilten Caches

Okay. Nachdem wir nun festgestellt haben, dass ein verteilter Cache wichtig ist. Es bietet Ihnen Leistung und Skalierbarkeit. Sehen wir uns an, wie Sie einen verteilten Cache verwenden und es gibt drei mögliche Möglichkeiten, ihn zu verwenden. Die drei großen technischen Anwendungsfälle.

App-Daten-Caching

Und die Nummer eins ist das Caching von Anwendungsdaten, worüber ich bisher gesprochen habe, und darauf werde ich bald näher eingehen. Beim Zwischenspeichern von Anwendungsdaten müssen Sie eines beachten: Die Daten sind in der Datenbank und im Cache vorhanden. Es gibt also zwei Orte, an denen die Daten vorhanden sind. Wenn die Daten an zwei Orten vorhanden sind, was kann dann am häufigsten schief gehen? Sie könnten nicht mehr synchron sein, so dass ein Kunde diese Millionen Dollar zweimal von der Bank abheben könnte, einmal aus dem Cache, einmal aus der Datenbank, und so möchte man diese Situation nie haben. Diese Situation war in der Vergangenheit so schlimm, dass die meisten Menschen beim Wort „Cache“ dachten: „Ich werde nur schreibgeschützte Daten zwischenspeichern.“ Die Daten ändern sich nie, denn wenn ich etwas zwischenspeichere, das sich ändert, könnte ich möglicherweise keine Probleme bekommen. Ich werde also darauf eingehen, wie Sie sicherstellen können, dass das nicht passiert, aber das ist das Wichtigste, was Sie beim Zwischenspeichern von Anwendungsdaten beachten sollten.

ASP.NET Core Spezifisches Caching

Der zweite Anwendungsfall ist ASP.NET core-spezifisches Caching und es gibt zwei Dinge, die Sie vom ASP aus zwischenspeichern können.NET core. Eine davon sind die Sitzungen, die so ziemlich jeder ASP sind.NET core Die Anwendung verwendet Sitzungen und Sie haben in der vorherigen ASP.NET-Umgebung drei Speicheroptionen bereitgestellt: InProc, State Server und SQL, und die vierte war die benutzerdefinierte. Die ersten drei funktionierten praktisch nicht, aber der vierte ermöglichte das Einbinden eines Caches, allerdings in ASP.NET core Sie haben tatsächlich das Richtige getan, nämlich den Git-Code so zu gestalten, dass er auf einer IDistributedCache-Schnittstelle basiert. Es ermöglicht Ihnen also, einen Drittanbieter-Shop anzuschließen und so etwas wie anzuschließen NCache und es beginnt automatisch mit der Speicherung Ihrer Sitzungen und ich zeige Ihnen, wie das geht.

Das Zweite in ASP.NET Core ist das Antwort-Caching, also die Seitenausgabe, die Sie zwischenspeichern können. Wenn diese Seite das nächste Mal aufgerufen wird, sollte die Seite also nicht einmal ausgeführt werden, sondern nur die Ausgabe zurückgeben, wenn sie sich nicht geändert hat. Wenn dieselbe Ausgabe erneut reproduziert werden soll, warum wird die Seite dann erneut ausgeführt oder ausgeführt? Warum nicht einfach die Ausgabe bereitstellen? So wurde Ausgabe-Caching in ASP.NET genannt, jetzt heißt es Antwort-Caching. Es basiert jetzt auf mehr HTTP-Standards. Sie können also das Inhalts-Caching von Drittanbietern am Edge anschließen, was nicht möglich war, aber ich werde auch darauf eingehen. Der zu beachtende Unterschied zwischen Anwendungsdaten-Caching und ASP.NET core Caching besteht darin, dass im Gegensatz zum Caching von Anwendungsdaten, bei dem es zwei Orte gab, an denen Daten vorhanden waren, die Daten jetzt nur im Cache vorhanden sind und da der Cache im Arbeitsspeicher liegt, gehen diese Daten verloren, wenn ein Cache-Server ausfällt, es sei denn, es findet eine Replikation statt . Das ist also ein sehr wichtiger Punkt, den Sie im Hinterkopf behalten sollten: Jeder Cache, der keine gute Replikation ermöglicht, ist nicht zum Caching von Sitzungen oder anderen Datentrends geeignet.

Es gibt einen dritten ASP.NET core-spezifische Sache namens SignalR, auf die ich nicht näher eingehen werde. Wenn Sie Live-Web-Apps haben, die Live-Feedback geben können, müssen Aktienkurse beispielsweise ständig aktualisiert werden. Das kann also auch einen verteilten Cache als Rückwandplatine verwenden, aber ich hätte es nicht erwähnt.

Sicherheit

Wenn Sie Fragen zu den ersten beiden Fragen haben, werde ich bei Bedarf detaillierter darauf eingehen. Zunächst einmal befindet sich der Cache hinter Ihrer Anwendung. Es lebt zwischen der Anwendung und der Datenbank. Im Allgemeinen in einer ziemlich sicheren Umgebung. Wir haben Kunden, die den Cache entweder näher bei sich halten. Wenn sich ihre Anwendung in der DMZ befindet, behalten sie den Cache möglicherweise nicht in der DMZ, sondern hinter der Firewall. Manchmal bewahren sie es in der DMZ auf, aber meistens befindet es sich in einer sicheren Situation, aber viele unserer Finanzdienstleistungskunden wie Großbanken und andere sind damit nicht zufrieden und wünschen sich daher weitere Sicherheiten. Hier ist also die Enterprise Edition von NCache verfügt über Funktionen, mit denen eine Verschlüsselung durchgeführt werden kann. Alle Daten, die Sie in den Cache legen, werden also automatisch mit 3DES- oder AES256-Verschlüsselung verschlüsselt. Außerdem gibt es noch die Sicherheit, dass alle Verbindungen zum Cache über Active Directory authentifiziert werden und dass es Autorisierungsfunktionen gibt. Daher sind alle Sicherheitsfunktionen in die Enterprise Edition integriert.

Ein durchschnittlicher Kunde verwendet keine Verschlüsselung, es sei denn, seine Daten sind vertraulich. Wenn also Finanzdaten aufbewahrt werden, gibt es einige Compliance-Probleme oder HIPAA. Wenn Sie also in Compliance-Probleme geraten, müssen Sie, selbst wenn Ihre Umgebung sicher ist, einen Schritt weiter gehen und dort die Verschlüsselung durchführen . So, NCache Enterpriseübernimmt beispielsweise die TLS-Verbindung zwischen dem Client und der Caching-Ebene. Diese Verbindung selbst ist also vollständig gesichert und Sie verfügen über eine integrierte Verschlüsselung, sodass alle im Speicher gespeicherten Daten auch in verschlüsselter Form gespeichert werden. Und das ist ziemlich zufriedenstellend, ich meine, wir haben viele Finanzdienstleistungskunden und sie sind damit vollkommen zufrieden.

NCache kann bereitgestellt werden und die meisten unserer Kunden verwenden es immer noch vor Ort. Sie verfügen also über ein eigenes Rechenzentrum, in dem ihre Anwendung bereitgestellt wird, also stellen sie bereit NCache im Rahmen ihrer Bewerbung. Wenn Sie sich in der Cloud befinden, NCache ist sowohl in Azure als auch in AWS verfügbar und entweder als VM verfügbar oder wir sind gerade dabei, den verwalteten Cache-Dienst zu starten. In jedem Fall stellen wir dies sicher NCache lebt in Ihrem virtuellen Netzwerk in der Cloud. In einer lokalen Umgebung ist das also kein Problem, da Sie immer in Ihrer eigenen Umgebung nur eine Reihe von VMs erhalten, oder wenn Sie über ein eigenes Rechenzentrum verfügen, erhalten Sie Ihre eigenen Server und stellen diese mit der Anwendung bereit. Sie installieren NCache als Software und für Installationen im Inneren, Sie können auch Docker verwenden und Sie haben all die Dinge gesehen, die Sie von modernen Anwendungen erwarten würden, NCache Wird besorgt. Und dann können Sie in der Cloud entweder die VMs oder den verwalteten Cache abrufen, aber in der Cloud werden wir ihn im Falle von AWS immer innerhalb Ihrer VPC und im Falle von Azure im VNET bereitstellen. Es befindet sich in Ihrem virtuellen Netzwerk. Es liegt also in der Nähe Ihrer Anwendung, denn wenn nicht, müssen Sie über mehrere Hops wachsen, und wenn es sich beispielsweise um einen gehosteten Cache handelt, was für kleine Anwendungen, aber für alles Ernsthafte wahrscheinlich in Ordnung ist, NCache wird fast immer in geschäftskritischen Anwendungen verwendet, bei denen Sie Ihre Geschäfte über diese Anwendung abwickeln. Das ist es also, wo Sie es verwenden würden NCache.

In solchen Situationen können Sie sich also keine Verlangsamung leisten, und wenn Sie es sich nicht leisten können, langsamer zu werden, möchten Sie die volle Kontrolle haben und den Cache so nah wie möglich an der Anwendung halten. Es hängt davon ab, welchen Anwendungsfall Sie durchführen möchten. Der größte und schnellste Vorteil sind beispielsweise Sitzungen, die Sie sofort und ohne Codeänderung einbinden können. Es ist nur eine Konfigurationsänderung. Im Fall von ASP.NET core, es ist keine Konfigurationsänderung. Es handelt sich um eine Änderung des Startdateicodes, die jedoch nur sehr geringfügig ist. Wenn Sie jedoch Anwendungsdaten zwischenspeichern möchten, ist dies immer noch eine sehr einfache Änderung.

Lassen Sie mich Ihnen kurz zeigen, wie die API aussieht. Schauen Sie sich also diese API an.

Cache-Verbindung
Cache cache = NCache.InitializeCache("myCache");
cache.Dispose();
Abrufen von Daten
Employee employee = (Employee) cache.Get("Employee:1000");
Employee employee = (Employee) cache["Employee:1000"];
bool isPresent = cache.Contains("Employee:1000");
Schreiben von Daten
cache.Add("Employee:1000", employee);
cache.AddAsync("Employee:1000", employee);

cache.Insert("Employee:1000", employee);
cache.InsertAsync("Employee:1000", employee);
cache["Employee:1000"] = employee;

Employee employee = (Employee) cache.Remove("Employee:1000");
cache.RemoveAsync("Employee:1000");

Es ist nur ein sehr kleiner Cache.Get, Cache.Add, Einfügen, Entfernen. Sie haben also einen Schlüssel und einen Wert als Objekt. Die Integration ist also sehr einfach, aber Sie müssen sie erstellen. Wenn Sie also Daten aus der Datenbank erhalten, überprüfen Sie zuerst den Cache. Wenn der Cache Daten enthält, nehmen Sie sie aus dem Cache oder gehen Sie zur Datenbank Holen Sie es sich und legen Sie es in den Cache, das ist das Modell. Exakt. Ich werde Gas geben, sonst schaffe ich es nicht. Ich werde Ihnen zeigen NCache ein bisschen später.

Pub/Sub-Nachrichten und -Ereignisse

Pub/Sub-Messaging ist also auch eine sehr leistungsstarke Funktion. Viele Anwendungen müssen heute den Aufwand koordinieren. Ich habe heute mit jemandem gesprochen, der sagte, dass er viel ereignisbasierte Programmierung machen muss. Pub/Sub-Messaging bietet Ihnen also ein sehr leistungsstarkes ereignisgesteuertes Programmiermodell, da Sie über eine Infrastruktur verfügen, bei der es sich nun um eine skalierbare In-Memory-Plattform in Ihrer Anwendung handelt, die Sie sich wie einen Messaging-Bus vorstellen können. Es ist nicht für verteilte Umgebungen geeignet. Es handelt sich um eine Situation für das gleiche Rechenzentrum und einen Standorttyp, aber es ist superschnell, da alles im Arbeitsspeicher erfolgt und skalierbar ist. Das ist also der dritte Anwendungsfall, den Sie für die Verwendung eines verteilten Caches haben werden NCache. Ja, das tut es, und die Open-Source-Software unterstützt es auch. Alle diese Funktionen sind also sowohl Open Source als auch für Unternehmen verfügbar, und zwar alle NCache Die API ist zwischen Open Source und Enterprise weitgehend gleich.

Was wir bei Pub/Sub gesehen haben: Wenn Sie eine Anwendung mit hohem Datenverkehr und vielen Transaktionen haben, muss die Pub/Sub-Engine wirklich superschnell sein, und das ist der Punkt NCache scheint wirklich.

ASP.NET Core App-Daten-Caching

Okay. Also Anwendungsdaten-Caching. Wie machst du das? Das ist also auch dort zu beantworten, es gibt also drei Möglichkeiten, wie Sie das tun können.

IDistributedCache

Sie können die IDistributedCache-Schnittstelle von ASP verwenden.NET core wird mitgeliefert und wenn Sie dagegen programmiert haben, können Sie es einfach anschließen NCache als Anbieter. Es gibt also keine weiteren Codeänderungen, sobald Sie die IDistributedCache-API-Programmierung vorgenommen haben. Der Vorteil besteht also darin, dass Sie nur einmal programmieren müssen und nicht an einen Caching-Anbieter gebunden sind. Der Nachteil ist, dass es sich um den kleinsten gemeinsamen Nenner handelt. Ich zeige dir, wie es aussieht, das ist alles. Es gibt Get und Put, das war's. Sie kennen Get, Remove und Set, obwohl Sie noch viel mehr tun müssen, um den Cache vollständig nutzen zu können, nämlich dass wir über die Tatsache gesprochen haben, dass der Cache mit der Datenbank synchronisiert werden soll. Es gibt also Vor- und Nachteile.

Entity Framework Core Cache

Zweitens: Wenn Sie eine EF-Core-Anwendung haben, haben Sie eine EF-Core-Anwendung und es ist eine einfachere Möglichkeit, sie einzubinden NCache und ich zeige es dir. Wir haben also tatsächlich Erweiterungsmethoden für EF Core implementiert, und auch hier handelt es sich sowohl um Open Source als auch um Enterprise. Es gibt das EF Core-Beispiel. Okay. Wenn Sie also eine EF Core-Anwendung hätten, würden Sie normalerweise eine EF Core-Abfrage wie diese haben, Sie würden etwas mithilfe einer Abfrage im LINQ-Stil abrufen. Also haben wir eine Erweiterungsmethode implementiert, sagen wir FromCache, es handelt sich also um eine Reihe von Methoden, dies ist eine davon, also heißt es: Gehe in den Cache, wenn diese Abfrage zuletzt im Cache gespeichert wurde, hol sie aus dem Zwischenspeicher. Wenn es sich nicht im Cache befindet, gehen Sie zur Datenbank, führen Sie diese reguläre EF-Kernabfrage aus, rufen Sie sie ab und legen Sie sie im Cache ab. Es ist also nur diese eine Zeile oder nur dieser eine Methodenaufruf, der automatisch mit dem Zwischenspeichern aller Daten beginnt, die aus der Datenbank kommen. Das vereinfacht Ihre Arbeit und Sie wissen genau, wo Sie Plug-Ins installieren müssen. Sie müssen nicht viele zusätzliche API-Aufrufe ausführen.

Für EF-Kernanwendungen gibt es also wiederum Codeänderungen, aber so wenig wie möglich, was Sie tun und mit dem Zwischenspeichern von Daten beginnen können. Für EF Core handelt es sich also tatsächlich um eine Reihe von Methoden, das ist FromCache, das meiste davon ist von, es gibt nur etwa vier oder fünf Methoden, die Sie verwenden können, FromCache, dann LoadIntoCache, FromCacheOnly. Wenn Sie also Änderungen speichern, aktualisiert EF Core auch den Cache, bevor oder nachdem die Datenbank aktualisiert wird, auch den Cache. Der Cache verfügt also über die aktualisierte Version der Daten. Die Integrität des Caches wird zuallererst dadurch gewahrt, dass sichergestellt wird, dass es sich bei den Daten, die Sie im Cache behalten, um einen Cache-Server handelt. Nehmen wir an, Sie haben zwei Server und sagen wir, Sie haben drei Server. Der gesamte Cache ist in Partitionen unterteilt. Jede Partition verfügt über einen eigenen Satz von Buckets, sodass sich Ihre Daten nur in einer der Partitionen befinden. Dann werden diese Daten auf einen anderen Server repliziert, der als Replikate bezeichnet wird, im Fall jedoch als Replikate NCache Ist es nicht aktiv, ist es passiv. Ihre Anwendung kommuniziert nicht mit den Replikaten. Ihre Anwendung kommuniziert nur mit der Partition. Da die Daten also nur an einem Ort gespeichert werden, gibt es kein Synchronisierungsproblem. Jeder geht zum gleichen Server, aber da er partitioniert ist, geht nicht jeder zum gleichen Server. Einige Schlüssel werden hier gespeichert, einige werden hier gespeichert, einige werden hier gespeichert.

Partitionsreplik

So sieht also ein verteilter Cache aus NCache ist in der Lage, das zu tun, was SQL Server nicht kann, weil es in der Natur der relationalen Datenbank liegt, dass man sie nicht partitionieren kann, aber in der Natur des verteilten Caches ist das so, und wenn man hier eine Partitionierung durchführt, sind das drei Server, die möglicherweise von zehn Anwendungsservern gemeinsam genutzt werden und jeder Anwendungsserver kann vier oder fünf oder sechs oder acht Arbeitsprozesse haben. Da viele verschiedene Client-Prozesse mit dem Cache kommunizieren, gibt es kein Synchronisierungsproblem, da die eigentlichen Daten nur an einem Ort gespeichert werden. Jetzt gibt es andere Topologien NCache die repliziert werden, wobei dieselben Daten aktiv-aktiv und mehrfach vorhanden sind und in diesem Fall NCache muss die Änderungen synchronisieren. Es ist tokenbasiert, es ist ein sequenzbasierter Aktualisierungsalgorithmus, es ist nicht sehr skalierbar. Daher empfehlen wir es nicht für eine Umgebung mit hohem Transaktionsaufkommen.

Partitionierter Cache mit Replikation ist die bessere Strategie oder wir nennen es eine besser zu verwendende Caching-Topologie. So ist es also NCache stellt sicher, dass die Daten im Cache immer korrekt sind. Hat das Ihre Frage beantwortet? Gibt es also für den Port, den Sie gezeigt haben, eine Konfiguration oder Einstellung im Code, die besagt, aus welchem ​​Cache er ihn abrufen muss? Ja. Wenn Sie beispielsweise in die app.config gehen, werden Sie sehen, dass dort steht, dass Sie „mycacheId“ verwenden, und ich zeige Ihnen, was der Cache ist. Wenn Sie also einen Cache erstellen NCache. Jeder Cache erhält einen Namen und dieser Name weiß hinter den Kulissen, wo sich der Cache befindet. Sie müssen also nur den Namen hier angeben, und dann weiß er, wohin er gehen und den Cache holen muss. Und ich zeige Ihnen, wie der Cache tatsächlich aussieht. Auf allen diesen Servern gibt es einen Cache-Namen, und innerhalb derselben Server können Sie mehrere Cache-Namen haben. Auf demselben Server können Sie mehrere Caches haben, und ein Cache kann auf mehreren Caches vorhanden sein. Da es sich um einen verteilten Cache handelt, muss ein Cache-Name vorhanden sein auf mehreren Servern ist es so verteilt, aber dieselben Server können auch für andere Cache-Namen verwendet werden, und jeder Cache-Name gibt seine Isolation an. Gute Frage.

Hochverfügbarkeit

An dieser Stelle habe ich gesagt, dass Hochverfügbarkeit wirklich sehr wichtig ist. Wenn Sie zur Laufzeit keine Server ohne Unterbrechung hinzufügen oder entfernen können, ist Ihre Anwendung tatsächlich nicht hochverfügbar. Wir haben Kunden, die gelaufen sind NCache über Monate und Jahre ohne Unterbrechung. Angenommen, Sie haben eine Konfiguration mit zwei Servern und haben gerade einen dritten Server hinzugefügt, weil Ihre Auslastung gestiegen ist. Sie müssen also einen dritten Server hinzufügen. Alles, was Sie tun müssen, ist, einen dritten Server hinzuzufügen, und ich zeige es Ihnen einfach über das Tool, fügen Sie einfach einen hinzu und NCache Hinter den Kulissen wird neu aufgeteilt. Diese beiden Partitionen werden nun in drei Partitionen umgewandelt. Einige der Buckets von hier und hier werden der dritten Partition automatisch zugewiesen, während eine Anwendung ausgeführt wird. Ihre Anwendung bemerkt dies nicht einmal. Hinter den Kulissen gibt es nun eine dritte Partition, die vorhanden ist, und jetzt wird neben der Replik auch eine dritte Replik erstellt. Nehmen wir also an, Replik 2 muss hierher verschoben werden und Replik 3 wird hier erstellt.

partion-replica2

NCache behauptet es, dahinter NCache Verwendet Schlüssel für die Hash-Zuordnung, aber alles geschieht dynamisch, also wie eine Verteilungskarte, die wie eine Bucket-Map ist, die neu partitioniert und neu zugewiesen wird. Daten werden also zur Laufzeit tatsächlich automatisch von einem Server auf den anderen verschoben.

Standortaffinität

In einigen Fällen möchten Sie möglicherweise einige Daten auf derselben Partition zusammenhalten. NCache verfügt über eine Standortaffinitätsfunktion, die Sie angeben und dann angeben können. Sie werden sagen, diese beiden Daten hängen zusammen, ich möchte, dass sie auf demselben Server liegen und dann NCache hält es über einen zusätzlichen Schlüssel, den es darüber erstellt, auf demselben Server. Wie ich bereits sagte, handelt es sich hierbei um erweiterte Funktionen, die Sie nicht erhalten, wenn Sie nur auf den kleinsten gemeinsamen Nenner setzen, und indem Sie diese Funktionen verwenden, können Sie Anpassungen vornehmen NCache auf Ihre Umgebung und Ihre Bedürfnisse abgestimmt.

App-Daten-Caching-Funktionen

Das erste, was ich behandeln wollte, waren diese Themen, die sehr wichtig sind. Beim Zwischenspeichern von Anwendungsdaten ist es am wichtigsten, dass der Cache immer aktuell ist. Das heißt, frisch bedeutet, dass er korrekte Daten enthält. Wenn sich die Daten in der Datenbank ändern, verfügt der Cache über die neuesten Daten.

Zeitbasierte Abläufe

Der Ablauf ist also die häufigste Art und Weise, wie Caches dies tun. Fast alle Caches verfügen über ein Ablaufdatum als Funktion. NCache hat es auch. Es gibt einen absoluten Ablauf und dann einen gleitenden Ablauf. Absoluter Ablauf ist, sagen wir, Sie fügen Daten zum Cache hinzu. Nach fünf Minuten können Sie „OK“ sagen, denn ich denke nicht, dass es für Sie sicher ist, sie länger als fünf Minuten im Cache zu behalten. Sie gehen also davon aus, dass es sicher ist, die Daten fünf Minuten lang im Cache zu behalten, und dass dies für einige Daten ausreichend ist, für andere jedoch möglicherweise nicht.

Der gleitende Ablauf ist eher dann sinnvoll, wenn Sie Sitzungen speichern und sagen: „Okay“, nachdem niemand sie verwendet hat. Wenn alle mit der Verwendung dieser Sitzung fertig sind, entfernen Sie sie einfach. Es handelt sich also eher um einen Ablauf der Aufräumarbeiten. Beim absoluten Ablauf handelt es sich um eine Synchronisierung, bei der die Konsistenz mit der Datenbank beibehalten werden soll. Beim Gleiten handelt es sich um eine Bereinigung, aber beim Ablauf handelt es sich um eine fundierte Vermutung, unabhängig davon, ob diese Vermutung falsch ist

Datenbankabhängigkeiten

In einigen Fällen können Sie es sich leisten, dass die Daten inkonsistent sind, in anderen Fällen ist dies nicht möglich. Wenn dies nicht möglich ist, müssen Sie über andere Funktionen verfügen. Hier finden Sie diese NCache Besonders hervorzuheben ist, dass man zum Beispiel den Cache mit der Datenbank synchronisieren kann. So, NCache verwendet die in SQL Server integrierte SQL-Abhängigkeit, um SQL Server zu überwachen. Sie können also für jedes Element, das Sie zwischenspeichern, „OK“ sagen und es dieser entsprechenden Zeile in der SQL-Datenbanktabelle zuordnen. NCache überwacht es, wenn sich diese Zeile ändert, NCache Anschließend wird das Element entweder aus dem Cache entfernt oder erneut geladen. Jetzt haben Sie also plötzlich einen intelligenten Cache, der sicherstellen kann, dass alles, was Sie zwischenspeichern, immer konsistent ist, und das ist etwas, was Sie nicht bekommen, wenn der Cache eine Blackbox ist.

Sie müssen also in der Lage sein, über diese Art von Intelligenz mit dem Cache zu verfügen, und SQL-Abhängigkeiten sind eine .NET-Funktion, also ist das der Fall NCache .NET zu sein hilft, wenn Ihre Datenbank SQL ist. Jetzt sind wir auch eine Oracle-Abhängigkeit, die ebenfalls die Oracle-Datenbankbenachrichtigungen verwendet, und es gibt eine andere Möglichkeit, dies zu tun, nämlich unsere abfragebasierte Benachrichtigung, die effizienter ist, aber nicht so in Echtzeit erfolgt und mit der Sie dann auch den Cache synchronisieren können nicht relationale Datenquellen. Ihre Daten befinden sich möglicherweise in einem NoSQL database, es könnte sich in der Cloud befinden, es könnte sich irgendwo befinden und Sie möchten es überwachen können. Sie können also eine sogenannte benutzerdefinierte Abhängigkeit erstellen, bei der es sich um Ihren Code handelt, der auf dem Cache-Server gespeichert ist. NCache Ruft es in einem bestimmten Intervall auf, überprüft Ihre Datenquelle und benachrichtigt Sie, wenn sich die Daten ändern NCache, ok, die Daten haben sich geändert, bitte entfernen Sie diese oder laden Sie sie neu.

Das ist also ein Bereich, in dem NCache ist wirklich richtig stark. Wenn Sie Ihre Daten aktuell halten möchten, müssen Sie Folgendes tun können, um sicherzustellen, dass der Cache aktuell ist.

Durchlesen und Durchschreiben

Eine weitere Funktion ist das Durchlesen und Durchschreiben. Dies wird nun mit Ablauf und Datenbanksynchronisierung kombiniert. Dadurch kann der Cache Daten aus Ihrer Datenbank laden. Wenn Sie beispielsweise einen Read-Through haben, zeige ich Ihnen, wie ein Read-Through aussieht. Es handelt sich lediglich um eine Schnittstelle, die Sie implementieren, und Ihr Code befindet sich tatsächlich im Cache. Hier ist also eine Schnittstelle, über die Sie diesen Code implementieren. Es gibt also einen Load from Source-Aufruf, der Ihnen einen Schlüssel gibt und dann NCache ruft Ihre Methode auf, der Cache-Server ruft Ihre Methode auf, dieser Code läuft auf den Servern, allen Cache-Servern, NCache ruft diese Methode auf und sagt: Bitte fahren Sie fort und laden Sie diesen Schlüssel, da er sich nicht im Cache befindet. Wenn ich also „cache.Get“ ausführe und denke, dass sich der Schlüssel nicht im Cache befindet, gebe ich entweder eine Null zurück und sage, dass der Schlüssel nicht existiert, oder wenn ich einen Read-Through-Vorgang habe, kann ich einfach zum Cache gehen. Und NCache Sie können zur Datenbank gehen und sie für Sie lesen. So haben Sie es immer. Dies ist in vielen Fällen sehr nützlich, wenn Sie die Daten einfach immer im Cache behalten möchten.

Wenn Sie das Durchlesen also mit Abläufen oder Datenbanksynchronisierung kombinieren, können Sie mit dem Durchlesen feststellen, wann die Daten ablaufen NCache kann es automatisch aktualisieren, warum sollte man es entfernen? Wenn Sie es erneut laden möchten, dann auf jeden Fall das nächste Mal, da diese Daten benötigt werden und Sie sie nur ablaufen lassen, um sie auf dem neuesten Stand zu halten. Warum also nicht einfach haben? NCache Gehen Sie zurück und laden Sie es neu. Wenn Sie Read-Through implementiert haben, NCache macht das automatisch und das Gleiche passiert, wenn sich die Daten in der Datenbank oder Datenquelle ändern und diese Synchronisierungsfunktion erkennt, dass sich die Datenbank geändert hat. Wenn Sie das Durchlesen implementiert haben, wird sie automatisch neu geladen .

Ebenso bietet Ihnen das Durchschreiben einen weiteren Vorteil: Wenn Sie über ein Write-Behind verfügen, können Sie den Cache aktualisieren. Manche Daten sind also nicht so sensibel für Aktualisierungen. Ich meine natürlich, wenn es sich um Bankguthaben in Finanzdatenbanken handelt, möchten Sie kein Write-Behind durchführen, aber in manchen Fällen ist es in Ordnung, wenn Sie die Aktualisierungen einfach in die Warteschlange stellen können. Wenn Sie also den Cache aktualisieren, ist die Aktualisierung des Caches viel schneller als die Aktualisierung der Datenbank, natürlich auch skalierbarer, da sie verteilt ist und Sie den Cache aktualisieren und es mitteilen NCache Bitte aktualisieren Sie diese Datenbank asynchron hinter den Kulissen. Das ist also die Write-Behind-Funktion, die Ihre Anwendung nun plötzlich beschleunigt, denn wo liegt der Engpass? Liest aus der Datenbank und schreibt in die Datenbank. Lesevorgänge können Sie zwischenspeichern, so dass Sie nicht einmal in die Datenbank gehen, sondern die Schreibvorgänge in die Datenbank gehen müssen. Das geht nicht. Ich meine, die Datenbank ist das Master-Recht, also führt kein Weg daran vorbei, aber Write-Behind macht das irgendwie es einfach.

Das ist also eine weitere Funktion, die Sie, wenn Sie sie haben, NCache gibt Ihnen plötzlich weiteren Schwung in Ihre Bewerbung. Frage: Für den Fall, dass es nicht in der Lage ist, in die Datenbank zu schreiben und asynchron zu arbeiten, wird eine Ausnahme ausgelöst? Ja. Es wird eine Ausnahme ausgelöst, Sie können einen Rückruf einrichten, der von aufgerufen wird NCache Und wieder lautet der Code: Dieser Write-Behind-Code läuft auf den Cache-Servern, aber der Rückruf ist hier, sodass er den Client benachrichtigt und Ihr Rückruf aufgerufen wird, sodass Sie dann Korrekturmaßnahmen ergreifen können. Sobald Sie sich mit diesem Cache vertraut gemacht haben, NCache Wenn Sie den Cache mit der Datenbank synchronisieren, werden immer mehr Daten zwischengespeichert. Je mehr Daten Sie zwischenspeichern, desto mehr ähnelt der Cache einer Datenbank, was bedeutet, dass eine Schlüsselwertmethode zum Abrufen von Daten nicht intelligent genug ist. Sie müssen also in der Lage sein, auf SQL basierende Daten zu finden, insbesondere Referenzdaten.

SQL-Suche

Als wir über die EF Core-Abfrage sprachen, rufen Sie Daten basierend auf Attributen ab, nicht nur auf dem Schlüssel. Wenn Sie also in der Lage sind, die Daten mit SQL- oder LINQ-Abfragen oder mit EF Core zu durchsuchen, wird der Cache viel schneller. Das ist eine andere Möglichkeit NCache Das Besondere daran ist, dass Sie, sobald Sie alle Daten im Cache abgelegt haben, eine Suche durchführen können. Sie können sagen: Geben Sie mir alle meine Kunden mit Sitz in Boston oder New York und Sie erhalten eine Sammlung von Kundenobjekten aus dem Cache. Es sieht also immer mehr wie eine Datenbank aus, und Sie entlasten diese Datenbank, insbesondere bei Referenzdaten. Daher ist die SQL-Suche wirklich sehr wichtig.

Okay. Jetzt möchte ich Ihnen zeigen, was NCache aussieht oder wie ein Cache aussehen würde? Ich bin also bei Azure angemeldet. Ich habe also zwei Cache-Server-VMs. Ich habe also zwei Cache-Server, einen Windows-Client und eine Linux-Leitung, weil es welche gibt .NET Core, Sie könnten die Anwendung entweder unter Windows oder Linux ausführen und NCache Funktioniert möglicherweise tatsächlich, da die Cache-Server auch unter Linux laufen können .NET Core weil NCache lernen muss die .NET Core einheimisch.

azurblau

Erstellen Sie einen Cache

So habe ich zum Beispiel einen Remote-Desktop für den Windows-Client erstellt. Ich werde tatsächlich einen Cache erstellen, also wird mein Cache zwei Server haben und ich werde einen Windows-Client und einen Linux-Client haben, und wenn ich das Wort „Client“ verwende, sind das eigentlich Ihre Anwendungsserver-Boxen. Okay. Also werde ich das verwenden NCache Manager-Tool. Jetzt ist dieses Tool Teil der Enterprise Edition, aber Sie können die gleichen Dinge auch über die Open-Source-Befehlszeilentools oder Konfigurationsdateien tun, aber der Einfachheit halber werde ich jetzt einen Cache erstellen.

erstellen

Ich werde meinen Cache Democache nennen, da alle Caches benannt sind.

Democache

Ich werde eine Topologie auswählen. Ich wähle einen partitionierten Cache mit Replikation.

Partitions-Cache

Ich werde die asynchrone Replikation durchführen, es gibt also eine asynchrone Replikation und eine asynchrone Replikation. Bei der synchronisierten Replikation können Sie sich eine asynchrone Replikation nicht leisten, wenn es sich um sensiblere Daten, Finanzdaten usw. handelt, bei denen diese Replikation als Teil des Updates erfolgen soll, was die Dinge natürlich verlangsamt, aber auch komplizierter macht.

async

Also, hier ist mein Cache-Server eins, hier ist mein Cache-Server zwei, also habe ich gerade einen Zwei-Server-Cluster erstellt. es läuft noch nicht. Ich werde zwei Client-Knoten hinzufügen. Das ist mein Windows, da war ein Server. Also ist 6 mein Windows-Client und 7 mein UNIX-Client. Okay. Ich habe also normalerweise zwei Cache-Server und zwei Clients, wie gesagt, Sie haben mindestens zwei Cache-Server und ein Verhältnis von vier zu eins, fünf zu eins zwischen den Clients und dem Server. Also, ich fange gerade erst mit dem Cache an. Auch hier kann ich all dies von einem Ort aus erledigen, und das Gleiche gilt auch für die nächste Version, die wir gerade auf den Markt bringen. Das Ganze ist webbasiert, sodass Sie es einfach in der Cloud erledigen können. Ich öffne Statistiken und diese sind wie Überwachung, das sind Perfmon-Statistiken.

Statistiken

Stress simulieren und Cache-Statistiken überwachen

Ich werde testen, ob mein Kunde mit dieser Box sprechen kann, jetzt ist diese Box ein Kunde. Also öffne ich die PowerShell-Konsole. Ich habe zwei Teilversionen von Windows und bin hier bei zwei Linux angemeldet, also habe ich hier ein Linux, jetzt das Linux hier. Rechts? Hier muss ich PowerShell starten und hier muss ich auch mein Modul importieren, was ich für Windows nicht tun muss, es ist bereits für mich da und ich muss das Gleiche hier tun. Ich muss PowerShell unter Linux starten und okay, jetzt starte ich einen Client. So, NCache Im Lieferumfang ist dieses Stresstest-Tool enthalten, mit dem Sie ganz einfach Stresstests in Ihrer eigenen Umgebung durchführen können. Damit Sie genau sehen können, wie NCache führt? Man muss seiner Leistung also kein Wort absprechen. Nehmen wir also an, ich verarbeite etwa 500 Anfragen pro Sekunde und Server.

Statistik2

Okay. Ich möchte also die Last erhöhen, also gehe ich zur zweiten Konsole und führe erneut einen Stresstest durch.

cmd

Jetzt werden Sie plötzlich sehen, dass dieser Sprung doppelt so hoch sein wird, richtig, und lassen Sie mich weitermachen und noch mehr Stress hinzufügen. Ich werde zu einem der Linux-Versionen kommen und dasselbe sagen, und plötzlich habe ich eher 1500 pro Anfrage. Also, jetzt habe ich insgesamt etwa 3,000 Anfragen pro Sekunde, also lassen Sie mich noch eine machen, und jetzt erledige ich eher 4,000 Anfragen pro Sekunde. Ich kann also immer mehr hinzufügen, wenn ich mehr VMs habe, ich kann oder ich kann einfach mehr Instanzen haben, und Sie werden sehen, dass ziemlich bald das Maximum dessen erreicht ist, was auch immer dies sein wird und was diese beiden Server auch sein sollten Ich werde in der Lage sein, mindestens 50,000 Anfragen pro Sekunde zu verarbeiten, aber das liegt wiederum an dem kleinen Datensatz. Wenn die Objektgröße zunimmt, wird sie natürlich sinken, aber sobald ich das Maximum erreicht habe, mache ich hier einfach weiter und noch einmal Wenn es richtig läuft, habe ich keine dritte VM, aber alles, was ich tun muss, ist einfach dies zu tun und einfach eine dritte Adresse hinzuzufügen und ich sage „Fertig stellen“, und es wird hier ein drittes Feld hinzugefügt und die gesamte Partitionierung wird durchgeführt oder automatische Neupartitionierung für Sie.

Wenn ich eine der VMs herunterfahren muss, wird dies ebenfalls der Fall sein. Ja, das ist es, das ist das Ende meines Vortrags. Können wir Fragen beantworten? Es ist die einzige native .NET-Lösung, die einzige andere native Lösung AppFabric welches eingestellt wurde. So, Redis ist keine .NET-Lösung, obwohl Microsoft sie für Azure ausgewählt hat, weil sie technologieunabhängig sein wollten, also haben sie sie ausgewählt, aber wir sind natives .NET. Wir waren vom ersten Tag an so und soweit wir wissen, sind wir die erste Wahl für .NET.

Was macht man als nächstes?

 

Melden Sie sich für den monatlichen E-Mail-Newsletter an, um die neuesten Updates zu erhalten.

© Copyright Alachisoft 2002 - Alle Rechte vorbehalten NCache ist eine eingetragene Marke der Diyatech Corp.