Philly .NET-Code-Camp

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

Das heutige Thema ist die Optimierung des ASP.NET core Leistung. Ich ziehe es vor, interaktivere Diskussionen zu führen, also heben Sie bitte Ihre Hand, wenn Sie Fragen haben, während ich spreche, damit wir sie bekommen können. Ich bin sicher, Sie sind hier, weil die ASP.NET core ist heute die beliebte Technologie für die Entwicklung neuer .NET-Anwendungen oder .NET-Webanwendungen, da sie über eine saubere und leichte Architektur verfügt. Wahrscheinlich sind Sie bereits auf MVC von ASP.NET. Also, wenn das der Fall ist, dann wechseln Sie zu einem ASP.NET core wird ziemlich einfach. ASP.NET core ist leicht. Es ist plattformübergreifend, es ist Open Source und es gibt eine riesige alte ASP.NET-Benutzerbasis, die es sehr wahrscheinlich macht, dass die meisten von Ihnen zu ASP wechseln werden.NET Core.

Also ASP.NET core In Zukunft wird die Wahl, die Technologiewahl für .NET sein, um Webanwendungen mit hohem Datenverkehr oder Serveranwendungen mit hohem Datenverkehr und Webanwendungen zu entwickeln. Das bedeutet ASP.NET core braucht Skalierbarkeit und ich bin sicher, das ist der Grund, warum Sie hier sind. Lassen Sie uns nur die Definitionen verstehen, bevor wir in die Tiefe gehen.

Was ist Skalierbarkeit?

Was ist Skalierbarkeit? Skalierbarkeit bedeutet im Wesentlichen, dass Sie bei einer Anwendung mit fünf Benutzern, die eine superschnelle und gute Reaktionszeit bietet, dieselbe Reaktionszeit und dieselbe Leistung mit fünftausend oder fünfzigtausend oder fünfhunderttausend Benutzern und gleichzeitigen Benutzern wie Ihre Anwendung aufrechterhalten können ist skalierbar. Wenn Ihre Anwendung mit fünf Benutzern nicht gut funktioniert, dann ist dies nicht das Richtige für Sie, dann müssen Sie wahrscheinlich nachsehen, wie Sie auf Ihre Datenbank zugreifen und wie Sie Ihre gesamte Programmierung durchführen. Dies setzt voraus, dass Sie gute Arbeit geleistet haben, indem Sie Anwendungen für mindestens wenige Benutzer entwickelt haben, und dann müssen Sie wissen, wie Sie sie skalieren.

Was ist lineare Skalierbarkeit?

Lineare Skalierbarkeit bedeutet, dass Sie in der Produktion weitere Server hinzufügen können, und wenn Sie weitere Server hinzufügen, können Sie die Transaktionskapazität linear hinzufügen.

lineare Skalierbarkeit

Jetzt werde ich ins Detail gehen, aber was passiert ist, sagen wir, Sie beginnen mit zwei Server-Webfarmen mit Lastenausgleich. Nach einer bestimmten Anzahl von Benutzern werden diese beiden Server ausgereizt und Ihre Leistung wird langsamer und dann fügen Sie den dritten Server hinzu und plötzlich sollte die Kapazität um mindestens ein Drittel oder wie auch immer die neue Formel lautet und dann steigen Wenn Sie gehen, wenn Sie drei Server maximal ausschöpfen, fügen Sie sicher wieder inkrementelle hinzu. Wenn Sie das können, haben Sie eine linear skalierbare Anwendungsarchitektur. Wenn Sie das nicht können, dann haben Sie eine nichtlineare.

Was ist nichtlineare Skalierbarkeit?

Nicht linear bedeutet im Grunde, dass das Hinzufügen weiterer Server nach ein paar Servern keinen Unterschied macht, da es einen Engpass in Ihrer Anwendung gibt, der die Skalierung verhindert. Ihre Leistung wird also tatsächlich sinken, wenn Sie mehr Last hinzufügen und so weit sprechen, dass Ihre Anwendung sogar abstürzen kann. Sie möchten also definitiv keine nichtlineare Skalierbarkeit, was im Grunde bedeutet, dass ab einem bestimmten Punkt keine Skalierbarkeit mehr besteht.

nichtlineare Skalierbarkeit

Welche Apps Skalierbarkeit benötigen

Welche Art von Anwendungen benötigen also Skalierbarkeit? Dies sind alles Serveranwendungen. Dies sind Ihre Webanwendungen, die über den ASP verfügen.NET core Webdienste, wieder ASP.NET core. Wenn Sie in Microservices entwickeln, werden Microservices jetzt zu einem großen Schlagwort, und aufgrund der Tatsache, dass Sie sie in Containern und in einer containerisierten Umgebung ausführen können, können Sie sogar ASP ausführen.NET core in containerisierten Umgebungen, aber Microservices sind ein weiterer sehr guter Anwendungsfall für Skalierbarkeit oder jede andere Serveranwendung, bei der Sie viele Transaktionen im Backend verarbeiten.

Wenn Sie also eine dieser Arten von Anwendungen haben, handelt es sich normalerweise um kundenorientierte, ausgabeorientierte Anwendungen oder zumindest um einen Teil der ausgabeorientierten Anwendung. Angenommen, Ihre Webdienstanwendung ist möglicherweise Teil einer gesamten Webanwendung, und es gibt eine Webdienstebene, und das Gleiche gilt für Mikrodienste, aber sie sind im Allgemeinen kundenorientierte oder ausgabeorientierte Anwendungen, aber nicht immer. Wenn Sie ein großes Unternehmen sind, haben Sie vielleicht Zehntausende von internen Benutzern, aber die meiste Zeit sind es externe Dinge.

Das Skalierbarkeitsproblem und seine Lösung

Es gibt also ein Skalierbarkeitsproblem, und deshalb führen wir heute dieses Gespräch, und das Skalierbarkeitsproblem liegt nicht in Ihrer Anwendungsebene. Wenn Sie also über eine Umgebung mit Lastenausgleich verfügen, skaliert Ihre Anwendungsebene sehr linear. Sie können weitere Server hinzufügen, kein Problem. Es ist die Datenbank oder der Datenspeicher. Jede Art von Daten, die gespeichert werden, das könnten Ihre Anwendungsdaten sein, das könnten Ihre Sitzungen sein, das könnten andere Daten sein, die Sie speichern oder abrufen, die zu einem Engpass werden, und das ist einer der Gründe dafür NoSQL databases an Popularität gewonnen.

NoSQL Database

Das Problem mit NoSQL databases ist, dass Sie sich von relationalen Datenbanken entfernen müssen. Was wir für viele Situationen gesehen haben, lassen Sie mich sagen, die Mehrheit der Fälle, die Sie verwenden können NoSQL databases für einige Daten, aber viele Daten müssen sich immer noch in relationalen Datenbanken befinden. Sie werden also weiterhin SQL Server oder eine SQL-Datenbank in Azure verwenden. Sie müssen dieses Skalierbarkeitsproblem also mit relationalen Datenbanken lösen. NoSQL databases sind nicht immer die Antwort, weil Sie sie nicht verwenden können, Sie können eine relationale Datenbank nicht durch a ersetzen NoSQL database stets. Und wenn Sie es nicht ersetzen können, können Sie nicht davon profitieren, wenn Sie es nicht verwenden können. Auch wenn Sie a gebrauchen könnten NoSQL database, bieten sie immer noch nicht die Leistung, die der verteilte Cache im Arbeitsspeicher bietet. Sie würden also noch viele der Dinge brauchen, von denen ich spreche.

Sehen wir uns also an, was tatsächlich passiert, und lassen Sie mich tatsächlich darauf eingehen. Das Skalierbarkeitsproblem ist etwas, auf das Sie wirklich nicht warten möchten, bis es auftritt. Denn wenn Sie eine Anwendung entwickeln und sagen, was sie heute gut macht und für tausend Benutzer oder was auch immer die Anzahl der Benutzer ist, gut ist und Ihr Unternehmen plötzlich an Popularität gewinnt, kommen viel mehr Kunden auf Sie zu. Sie haben im Marketing oder in Ihrer Geschäftsabteilung gute Arbeit geleistet und plötzlich beginnt Ihre Anwendung langsamer zu werden und es wurde durch Studien dokumentiert, dass jede Sekunde der Verlangsamung eine Webanwendung zu Umsatzeinbußen führt. Da Ihre Kunden in vielen dieser Online-Unternehmen, die Arten von Unternehmen, die online sind, E-Commerce-Unternehmen sind, die Einzelhandelsunternehmen mit Online-Shops, könnten dies Gesundheitswesen, E-Government, soziale Medien, Online-Glücksspiele, Reisebranche sein. Viele Unternehmen gehen online, weil jedes Unternehmen, das mit Verbrauchern zu tun hat, mit ihnen Geschäfte tätigen wird. Das sind Verbraucher oder Zehntausende, sie werden normalerweise mit ihnen online gehen. Und online muss nicht immer eine Webanwendung sein, es könnte auch eine Webdienstanwendung sein, da Sie möglicherweise eine mobile Anwendung haben, die mit einem Back-End kommuniziert.

Es ist also keine gute Idee, zu warten, bis Skalierbarkeitsprobleme auftreten, da dies für Ihr Unternehmen sehr kostspielig wird. Diese Anwendungen werden sich verlangsamen, da Sie diese nichtlineare Kurve zu diesem Zeitpunkt gesehen haben. Das Hinzufügen von mehr Diensten wird nicht helfen. Sie müssen dies also rechtzeitig planen. Stellen Sie sicher, dass Ihre Anwendungsarchitektur korrekt ist und diese Vorteile nutzt. Als bewährte Methode ist es für Sie fast obligatorisch, einen verteilten Cache in Ihre Anwendungsarchitektur zu integrieren.

Verteiltes Caching

Wie hilft also ein verteilter Cache? Ich werde verwenden NCache als Beispiel hier und NCache ist ein verteilter Open-Source-Cache für .NET. Sie finden es auf GitHub und auch auf unserer Website und es gibt auch die Enterprise Edition. Wenn Sie also nicht das Geld oder das Budget haben, entscheiden Sie sich für Open Source. Wenn Sie eine stärker unterstützte Version mit einigen mehr Funktionen als Open Source wünschen, entscheiden Sie sich für Enterprise. Also werde ich verwenden NCache wie das Beispiel, aber ich rede nicht darüber NCache. Ich spreche vom Caching insgesamt. Wie hilft also ein verteilter Cache? Nun, sagen wir mal im Fall von NCache es erstellt einen Cluster aus zwei oder mehr Servern, so dass diese mittlere Ebene, die eine Caching-Ebene ist, zwei Server haben wird, und diese zwei Server und vielleicht mehr als zwei, je nachdem, wie viele Server Sie hier haben? Wie viel Ladung hast du hier?

ncache-Einsatz

Wenn Sie also keinen verteilten Cache haben und die Datenbank nur ein Server ist, können Sie eine relationale Datenbank nicht wirklich verteilen. Ich meine, relationale SQL-Server-Datenbanken versuchen, ihre Leistung zu verbessern. Zum Beispiel haben sie jetzt Tabellen im Speicher. SQL hat auch schreibgeschützte Repliken der Datenbank. Das heißt, dass die Lesevorgänge repliziert werden können, aber das Problem mit Replikaten ist, dass jede Aktualisierung so viel langsamer ist, weil jedes Mal, wenn Sie aktualisieren, fünf Stellen oder vier Stellen aktualisiert werden. Es ist also nicht der ideale Weg, dies zu lösen. Es gibt einen besseren Weg, nämlich den verteilten Cache, und der Grund, warum ein verteilter Cache skalierbar ist, ist das Wort verteilt, und der Grund, warum er verteilt werden kann, ist, dass er ein Schlüsselwertspeicher ist. Alles wird anhand eines Schlüssels gespeichert. Der Schlüssel kann einfach in mehrere Partitionen hash-zugeordnet werden, und jede Partition ist ein Server, und so erreichen Sie die Verteilung.

Sie haben also mindestens zwei Cache-Server, eine typische Konfiguration, die wir sehen, ist etwa 16 bis 32 GB pro Server als Arbeitsspeicher, weil es sich wiederum um einen In-Memory-Speicher handelt, also müssen Sie viel Arbeitsspeicher haben. Und es bildet einen Cluster, es ist ein TCP-basierter Cluster, der diesen Speicher und diese CPU als Ressource des Clusters zieht. Nehmen wir also an, Sie haben mit einer klaren Webanwendung mit 4 oder 6 Webservern begonnen, also haben Sie 2 Cache-Server und Ihre, sagen wir, 16 bis 32 GB Arbeitsspeicher, und jetzt fangen Sie an, immer mehr und 80 % zu erreichen. 20 % der Zeit, in der Sie in den Cache gehen, werden Sie für die Aktualisierungen in die Datenbank gehen. Es kann sogar weniger als 20 % betragen, je nachdem, wie viele Updates Sie durchführen. Für einige Daten sind die Aktualisierungen mehr als für andere, aber sagen wir noch einmal, Sie werden der Anwendungsschicht hier weitere Server hinzufügen, und es wird wieder das tun, was es mit der Datenbank gemacht hat. Es wird die Caching-Tier maximieren. Sie haben also nur 2 Server. Nehmen wir an, Sie haben etwa 8 Server in der Webfarm hier oben erreicht. Denn wie gesagt, je mehr Benutzer Sie haben, desto mehr Anwendungsdienste haben Sie. Das geht also auf die Spitze. Sobald es ausgereizt ist, haben wir einen dritten Server hinzugefügt. Und das sind keine sehr High-End-Server. Dies sind Low-Cost-Server.

Normalerweise hat ein typischer Server etwa 8 Kerne. Wenn Sie mehr als 30 GB RAM haben, sollten Sie 16 Kerne wählen, da Sie mit mehr RAM mehr Garbage Collection durchführen müssen, da es sich nicht um verwaltete Speicher handelt, und Sie dann mehr Verarbeitungsleistung benötigen. Aber wir empfehlen den meisten unserer Kunden, und diese Empfehlungen gelten auch für Open Source, wir empfehlen unseren Kunden, zwischen 16 und 32 GB RAM pro Server zu verwenden. Fügen Sie einfach mehr Server hinzu, anstatt wirklich High-End-Dienste zu erhalten, fügen Sie mehr Server hinzu. Wenn also zwei Server ausgelastet sind, fügen Sie einfach einen dritten hinzu, und das Gleiche gilt, Sie können einen vierten oder fünften hinzufügen, und Sie werden wahrscheinlich nie das Maximum ausschöpfen, denn welche Transaktionskapazität Sie auch immer benötigen, sagen wir, wenn Sie 20,000 bis 30,000 gleichzeitige Benutzer haben Ziemlich am oberen Ende der meisten Webanwendungen, ich meine, es kann einige geben, die mehr sind, vielleicht gibt es mehr als hunderttausend gleichzeitige Benutzer, aber wenn Sie 20,000 gleichzeitige Benutzer haben, bedeutet dies, dass wahrscheinlich jeden Tag Millionen von Menschen auf die Website kommen . Also, ich meine, wir reden von dieser Größenordnung.

Aus diesem Grund ist nun plötzlich die Datenbank nicht mehr der Flaschenhals. Ihre Caching-Anwendungsdaten ... Es ist also ein gewöhnlicher Cache. Es ist ein gemeinsam genutzter Cache. Wenn Sie also diesen Cache hier ablegen, weil es sich um einen In-Memory-Cache handelt, bedeutet In-Memory, dass Sie Daten verlieren, wenn ein Cache-Server ausfällt. Das bedeutet also, dass der Cache für eine intelligente Replikation sorgen muss NCache tut, um sicherzustellen, dass, wenn ein Server ausfällt, ein anderer Server eine Kopie dieser Daten hat, aber wenn Sie zu viele Kopien machen, verlangsamt das auch die ganze Sache. So, NCache erstellt nur eine Kopie der Daten und partitioniert sie. Jede Partition hat ein Backup auf einem anderen Server, und sobald ein Server ausfällt, erstellen die Partitionen eine weitere Kopie. Und durch einen gemeinsam genutzten Cache werden diese Boxen jetzt zustandslos. Zustandslos bedeutet, dass keine Daten auf der Anwendungsebene gespeichert werden.

Was Sie also tun sollten, ist, wenn Sie dieses Ziel erreichen können, dass Ihre Anwendungsebene zustandslos ist, was bedeutet, dass Sie jeden Anwendungsserver herunterfahren können, ohne Störungen zu verursachen. Angenommen, Sie müssen einen Patch, einen Betriebssystem-Patch oder ein Anwendungs-Upgrade oder etwas anderes anwenden, das Sie einfach hier anwenden können, da sich alle Daten entweder in der Datenbank oder auf dieser Ebene befinden, sodass diese leicht mit Fehlern versehen werden können.

Anwendungsfälle für verteilten Cache

Nun, da wir festgestellt haben, warum Sie Caching verwenden sollten, was ist der Vorteil? Welches Problem löst es und wie löst es dieses Problem? Die erste Frage ist, wofür verwenden Sie es? Was sind die Anwendungsfälle? Wo in der Anwendung verwenden Sie einen verteilten Cache?

App-Daten-Caching

Nummer eins ist das Zwischenspeichern von Anwendungsdaten. Das ist der Anwendungsfall, über den ich bereits gesprochen habe, nämlich dass Sie eine Datenbank haben, die die Anwendungsdaten enthält. Sie speichern diese Daten im Cache, sodass Sie nicht zur Datenbank wechseln müssen. Nun, es gibt eine Sache, die Sie beachten müssen, und ich werde darauf zurückkommen, dass die Daten beim Zwischenspeichern von Anwendungsdaten zwei Kopien haben, eine im Master, der die Datenbank ist, und eine im Cache. Wann immer Sie diese Situation haben, in der sich die Daten an zwei Orten befinden, was könnte schief gehen? Ja, die beiden Kopien könnten inkonsistent oder nicht synchron werden, was bedeutet, dass der Cache veraltet sein könnte. Jeder Cache, der still wird, zwingt Sie also, nur statische Daten, schreibgeschützte Daten, zwischenzuspeichern. Und schreibgeschützte Daten machen nur 20 % Ihrer gesamten Daten aus. 80 % sind das, was wir als Transaktionsdaten bezeichnen. Wenn Sie keine Transaktionsdaten zwischenspeichern können, wird dieser Cache Sie einschränken, und hier ist der Punkt NCache hat einige wirklich leistungsstarke Funktionen und wieder alles Open Source, alles wirklich leistungsstarke Funktionen, mit denen Sie sicherstellen können, dass der Cache immer frisch bleibt. Es ist gut und ich werde in diesen Moment gehen.

ASP.NET Core Spezifisches Caching

Anwendungsfall Nummer 2 ist, dass das Zwischenspeichern von App-Daten wiederum für ASP vorgesehen ist.NET core und auch andere Anwendungen, aber für ASP.NET core, gibt es mindestens zwei weitere Verwendungszwecke, eine davon sind die Sitzungen, mit denen Sie Ihre Sitzung in einem verteilten Cache wie wiederherstellen können NCache und dafür ist keine Programmierung erforderlich, also geht das wirklich sehr schnell. Wenn Sie den schnellsten Leistungsvorteil für Ihre Anwendung erzielen möchten und sagen wir, Ihre Anwendung ist bereits live oder fertig, beginnen Sie einfach damit, Ihre Sitzungen im verteilten Cache anzuzeigen NCache. Und da es keine Programmierung gibt, müssen Sie nur sehr wenige Tests durchführen, wenn nötig, natürlich einige grundlegende Plausibilitätstests, um sicherzustellen, dass alles in Ihrer Umgebung funktioniert, aber es ist kein Entwicklungsaufwand erforderlich. Aus diesem Grund sind keine Entwicklungspläne und keine Veröffentlichungspläne daran beteiligt. Also sehr sehr schnell.

Der zweite ASP.NET core spezifisches Caching ist die Antwort-Caching was in ASP.NET ist, wurde es früher Ausgabecache genannt, in ASP.NET core Sie haben es tatsächlich mehr standardbasiert gemacht. Jetzt verwendet es die HTTP-basierten Caching-Direktiven, die von Edge-Caching-Lösungen von Drittanbietern verstanden werden können, aber im Wesentlichen speichern Sie die Ausgabe einer Seite, sodass beim nächsten Aufruf dieser Seite, wenn die Ausgabe dieselbe sein wird, Warum die Seite ausführen? Warum nicht einfach die Ausgabe liefern? Das ist gut in Situationen, in denen sich die Ausgabe nicht sehr häufig ändert, was sehr häufig vorkommt, aber wenn Sie eine sehr dynamische Anwendung haben, werden Sie wahrscheinlich nicht so viel statischen Kontakt haben, aber selbst wenn Sie kann es für einen kurzen Zeitraum haben, der Sie immer noch rettet. Also ASP.NET core Response Caching hat ein Middleware-Konzept und Sie können einen verteilten Cache wie z NCache als Middleware, die im Grunde auf der gleichen Ebene wie der ASP lebt.NET core oder es ist dasselbe, aber der Middleware-Cache könnte hier sein und hier ist der eigentliche ASP.NET core Anwendung. Das ist also der zweitgrößte häufige Anwendungsfall für verteiltes Caching, und ich werde darauf etwas detaillierter eingehen, aber ich gebe Ihnen nur einen Überblick.

Pub/Sub-Nachrichten und -Ereignisse

Der dritte Anwendungsfall ist etwas, von dem viele Leute nicht wissen, was Sie tun können Pub/Sub-Messaging und Ereignisse mit einem verteilten Cache. Pub/Sub-Messaging ermöglicht es mehreren Anwendungen oder mehreren Instanzen Ihrer Anwendung, die Arbeit miteinander zu koordinieren, indem Dateninformationen auf asynchrone, ereignisgesteuerte Weise geteilt werden. Welche Beispiele könnten wir hier verlinken? Microservices wiederum, Microservices sind unabhängige, entkoppelte Dienste, aber sie müssen koordiniert werden. Ich meine, ein Microservice könnte etwas produzieren, das von anderen Microservices verwendet wird, so wird der Arbeitsablauf durchgeführt, aber sie wollen nicht direkt voneinander abhängig sein, sonst bricht das gesamte Modell zusammen. Also, was Sie dann tun, ist, dass Sie dies tatsächlich nicht länger als Cache für Ihre Datenbank betrachten, sondern darüber nachdenken, und ich werde tatsächlich ... geben Sie mir eine Sekunde, ich werde es nur für ein Bild drehen, denken Sie an der verteilte Cache jetzt als Messaging-Plattform.

pubsub-Messaging-Usecase

Also, der ganze Paradigmenwechsel, der darin besteht, dass Sie jetzt Anwendungen haben. Dies können mehrere VMs oder Container sein, auf denen Ihre Microservices oder andere Anwendungen ausgeführt werden, und sie können auf Pub/Sub-Weise miteinander kommunizieren. Es gibt also Themen und es gibt Herausgeber und Abonnenten, und das vereinfacht Ihre Bewerbung wirklich.

Jetzt sind andere Pub/Sub-Lösungen wie Kaninchen- und MSMQ-Messaging-Warteschlangen erforderlich. Was ist so besonders an einem verteilten Cache wie NCache? Warum sollten Sie dies darüber verwenden? Der Grund für die Verwendung eines verteilten Caches ist, dass dieser sehr, sehr schnell ist. Es ist alles in Erinnerung. Es hat nicht alle Funktionen, die eine Nachrichtenwarteschlange haben wird, da sie auch Persistenz ist und die Nachrichten für lange Zeiträume speichert, aber in vielen Situationen müssen Sie sie nicht so lange aufbewahren, wenn alles innerhalb läuft dasselbe Rechenzentrum und seine wirklich transaktionale Umgebung, aber Sie verwenden dies eher für den Workflow, als dass die Replikation mehr als ausreichend ist. Die Tatsache, dass Sie alle Daten auf mehr als einem Server gespeichert haben, ist mehr als ausreichend, um sicherzustellen, dass Ihre Nachrichten und Veranstaltungen nicht verloren gehen. Im Gegensatz zum Zwischenspeichern von Anwendungsdaten, bei dem es zwei Kopien der Daten gab, sodass das Problem anders war, müssen Sie den Cache aktuell halten. Im zweiten und dritten Fall ist es umgekehrt, es gibt nur eine Kopie der Daten, die der Cache ist. Also muss es jetzt innerhalb des Caches mehr als eine Kopie geben, die für Replikationszwecke konsistent ist, denn wenn Sie dies nicht haben, verliert der Cache im Speicher Ihre Daten. Sie möchten also nicht Ihre Nachrichten, Ihre Sitzungen und Ihre Seitenausgabe verlieren, nur weil der Server einmal ausgefallen ist. Daher ist Pub/Sub-Messaging in Ereignissen normalerweise ein wirklich leistungsstarker Anwendungsfall für einen verteilten Cache, und auch hier ist alles Open Source.

Es gibt also noch ein weiteres Feature NCache Eine fortlaufende Abfrage, die eigentlich kein anderer .NET-Space-Cache hat, einige der Java-Caches haben sie, und eine fortlaufende Abfrage ermöglicht es Ihnen, einen SQL-Typ einer Abfrage für den Cache anzugeben, sodass Sie beispielsweise so etwas wie select sagen könnten Kunden, bei denen Kunde.Stadt New York ist, und Sie sagen, ich interessiere mich für diesen Fall, und Sie fragen den Cache, ob Sie bitte diesen Datensatz überwachen können. So. Benachrichtigen Sie bitte jedes Kundenobjekt mit diesem Attribut, das jemals hinzugefügt, aktualisiert oder aus dem Cache gelöscht wurde. Jetzt müssen Sie also nicht jedes Objekt selbst beobachten, was Sie sowieso nicht können oder überprüfen möchten, der Cache erledigt dies für Sie. Es ist ähnlich wie bei SQL Server in der SQL-Abhängigkeit. Sie können Ihren Server bitten, den Datensatz zu überwachen und Sie zu benachrichtigen, wenn sich dieser Datensatz ändert. Außer, dass es sich um eine oder mehrere Zeilen in einer Tabelle handelt, aber hier handelt es sich um Objekte in einem verteilten Cache. Das sind also die drei häufigsten Anwendungsfälle.

ASP.NET Core – App-Daten-Caching

Ich denke also, der häufigste Anwendungsfall ist das Zwischenspeichern von Anwendungsdaten. Eigentlich ist das Wort verteilter Cache eher ein Microsoft-Ökosystem-Wort. Auf der Java-Seite heißt es Speicherdatenraster. Wir verwenden drei Wörter. Wir verwenden den verteilten Cache, wir verwenden das Speicherdatengrid für den Webvorteil von Java-Leuten, obwohl wir im Microsoft-Ökosystem sind. Wir sind also nicht so viel und dann ist da noch der verteilte In-Memory-Datenspeicher. Anwendungsdaten-Caching ist also der Anwendungsfall für verteiltes Caching.

IDistributedCache-Schnittstelle

Wenn Sie also das Zwischenspeichern von Anwendungsdaten verwenden möchten, gibt es drei Möglichkeiten, dies zu tun. Es gibt eine IDistributedCache-Schnittstelle, die in ASP.NET 4 verfügbar ist und im Grunde so aussieht wie hier.

verteilter Cache

Sehr einfache Schnittstelle. Microsoft hat endlich eine Schnittstelle bereitgestellt, mit der Sie einen beliebigen verteilten Cache darunter anschließen können. Das einzige Problem dabei ist, dass es wirklich sehr einfach ist. Damit kannst du also nicht viel anfangen. Sie können nur wirklich grundlegende Dinge tun. Und das einzige, was es tut, ist, dass es Ihnen Ablaufzeiten gibt. Sie können die Cache-Eintragsoption angeben, die die Ablaufzeiten sind. Also ja! NCache implementiert dies, wenn Sie also über die IDistributedCache-Schnittstelle programmieren, können Sie einfach einstecken NCache ohne jede Codeänderung, jede weitere Codeänderung und Sie haben die Programmierung durchgeführt, aber ich würde nicht empfehlen, dass Sie dies tun sollten, denn wenn Sie wirklich einen verteilten Cache und den Nutzen anzapfen wollen, dann möchten Sie verstehen, was alles andere Merkmale? Warum sollte man sie nicht verwenden? Jetzt werde ich damit gehen.

Entity Framework Core Cache

Eine andere ist, wenn Sie EF-Kern verwenden, wenn Sie den Code, den Sie schreiben möchten, minimieren möchten, NCache Lassen Sie mich Ihnen dies kurz zeigen. Die EF-Core-Erweiterungsmethoden vereinfachen also wirklich die Art und Weise, wie Sie den Cache verwenden würden. Auch hier sind die Funktionen, genau wie bei IDistributedCache, nicht so umfangreich.

ef-Core-Cache

Nehmen wir beispielsweise an, Sie wollten Ihre typische EF Core- oder EF LINQ-basierte Abfrage sehen, wir haben eine Farmcache-Erweiterungsmethode implementiert, und es gibt andere Erweiterungsmethoden, sobald Sie es sagen dass hinter dem Team diese Abfrage zuerst angeschaut und im Cache abgelegt wird. Wenn der Cache es hat, holen Sie es aus dem Cache, andernfalls gehen Sie zur Datenbank, holen es und cachen es, bevor es Ihnen gegeben wird. Vereinfacht also die Programmierung um einiges. Nehmen wir an, Sie haben bereits eine EF-Kernanwendung und möchten diese so schnell wie möglich einbinden. Dies ist der schnellste Weg NCache darin, wie Sie sehen können, ist dies.

NCache API

Die dritte Option ist zu verwenden NCache API, die auch eine ziemlich einfache API ist. NCache Die API sieht fast identisch mit dem ASP.NETcache-Objekt aus, aber mehr als das haben wir versucht, aber wir sind vor langer Zeit herausgekommen. ASP.NET Core ist die einzige Schnittstelle für Objekte, die es gab, also haben wir versucht, sie so nah wie möglich daran zu halten.

ncache-api-app-data-caching

Es ist also ein einfaches Konzept, Sie stellen eine Verbindung zum Cache her, Sie erhalten ein Cache-Handle, Sie führen ein cache.get durch, es gibt einen Index oder Vergessen, Sie können enthält, Sie führen Hinzufügen, Einfügen, Entfernen aus und es handelt sich um asynchrone Versionen davon, damit Sie nicht warten müssen, bis der Cache aktualisiert wird. Es gibt offensichtlich mehr als das. Das gibt Ihnen also einen Eindruck davon, wie einfach es ist, einen Cache zu verwenden.

App-Daten-Caching-Funktionen – Halten Sie den Cache aktuell

Nun, die Hauptsache, zu der ich kommen wollte, war diese Seite. Ja, ich schätze, ich habe dir gesagt, dass es zwei Kopien des Caches gibt. Wenn Ihr Cache nicht in der Lage ist, sich selbst frisch zu halten, werden Sie die Verwendung wirklich einschränken. Das ist sehr wichtig zu verstehen. Was machen Caches?

Verfall (absolut + gleitend)

Die meisten Caches bieten Ihnen Expirations. Expiration wird auch TTL, Time to Live, genannt. Wir nennen es absolutes Expiration, weil ASP.NET-Cache-Objekte diesen Begriff dort verwenden, also sind wir einfach dabei geblieben. Was tut es? Sie fügen dem Cache ein Objekt hinzu, Sie sagen, dass Sie dieses in fünf oder zehn Minuten ablaufen lassen, weil ich denke, dass es sicher ist, es so lange zwischenzuspeichern. Sie machen eine fundierte Vermutung, die in einigen Referenzdatenfällen in Ordnung ist. Sie haben beispielsweise einen Produktkatalog. Es wird sich wahrscheinlich nicht alle 10 Minuten ändern. Die Preisgestaltung wird sich dort nicht ändern. Es sind also vorhersehbarere Änderungen für einige der Situationen. Es ist also in Ordnung, dort Ausdrücke zu verwenden. Aber wenn Sie einen Kunden oder eine Aktivität zwischenspeichern, wissen Sie nicht, wann sich das ändern wird, weil die Kunden anrufen und einige Änderungen vornehmen werden, sodass Sie möglicherweise nicht nur von Ablaufzeiten leben können. Hier brauchen Sie also andere Features im Cache, und hier sind all diese Features in Cache in NCache als Open-Source.

Cache mit Datenbank synchronisieren

Eines der Merkmale ist die NCache kann sich mit der Datenbank synchronisieren. Jetzt kann die Datenbank SQL Server sein, es könnte Oracle sein oder es könnte OLEdb im Fall von Polling sein, aber Synchronisation bedeutet das NCache Client wird, wird der Cache-Server Client der Datenbank. Es wird jetzt die SQL-Abhängigkeit verwenden, über die ich gesprochen habe. Dasselbe wie eine kontinuierliche Abfrage, aber für SQL Server. Es wird eine SQL-Abhängigkeit verwenden und ich werde Ihnen zeigen, wie das funktioniert.

Datenbank synchronisieren

Nehmen wir also an... Nehmen wir an, Sie fügen beim Hinzufügen dieses Produktobjekt zum Cache hinzu, sodass Sie einen Schlüssel und das Cache-Element haben, das das Produkt enthält. Was Sie tun möchten, ist, dass Sie eine SQL-Anweisung angeben möchten, die ein bestimmtes Produkt in der Produkttabelle identifiziert, und diese SQL-Anweisung ist wiederum für den SQL-Server bestimmt. Sie übergeben den Ereigniscache, NCache Wir übergeben es an den SQL-Server. NCache, wenn es dieses Produkt zwischenspeichert, benachrichtigt es jetzt ein Register mit SQL Server über eine SQL-Abhängigkeit und behält die Zuordnung bei. Wenn also der SQL-Server ein Ereignis an sendet NCache sagen, dass dieses Produkt jetzt in der Datenbank aktualisiert wurde NCache weiß, dass es noch im Cache ist. Es wird also eines von zwei Dingen tun. Sie müssen es nur aus dem Cache entfernen. Ich meine, Ihre Anwendung muss nichts tun, es wird alles vom Cache erledigt, oder wenn Sie diese Funktion namens Durchlesen implementiert haben, wird das Element automatisch neu geladen. Also, ich komme gleich zur Datenbank. Die Datenbanksynchronisierung ist also eine sehr, sehr mächtige Funktion. Es gibt Ihnen die Gewissheit und speichert alle Daten. Ohne dies, wenn Sie nur Ihre Erkundungen durchführen, sind Sie eingeschränkt, und es ist so schlimm, dass Sie, wenn Sie mit einer typischen Person sprechen, die sich mit Caching auf grundlegende Weise auskennt, auf das Caching reagieren: „Oh, das ist für schreibgeschützte Daten“. Caching ist nur für statische Daten. Jeder hat Angst, die Transaktionsdaten anzufassen, und das liegt an diesen Dingen, denn Ablaufzeiten sind nichts weiter als eine fundierte Vermutung, die für vorhersehbarere Fälle wie Produktkataloge und andere gültig sein kann, aber nicht für Transaktionsdaten.

Cache mit nicht relational synchronisieren

Also das gleiche Problem, wenn Sie einen nicht relationalen Datenspeicher haben. Es könnte etwas in der Cloud sein, es könnten Legacy-Datenbanken sein, es könnte ein Mainframe sein. Sie können das gleiche Ziel wie bei der SQL-Abhängigkeit erreichen, außer dass Sie in diesem Fall nicht in dieser Benachrichtigung sind. Eine benutzerdefinierte Abhängigkeit ist etwas, das Sie implementieren. Es ist Ihr Code, dass dies serverseitiger Code ist NCache hat dieses Konzept des serverseitigen Codes. Code, den Sie schreiben, der auf dem Cache-Server lebt.

Durchlesen und Durchschreiben

Benutzerdefinierte Abhängigkeit ist eine, Read-Through-Write-Through ist eine andere. Ich habe gerade über das Durchlesen gesprochen, dass Sie das Ding neu laden können, wenn Sie sich in einer Datenbanksynchronisierung befinden, wenn Sie das Element entfernen NCache kann gehen und neu laden. Wie kann es neu geladen werden? Obwohl Ihr Durchlesecode. Was ist Durchlesen? Sieht aus, als würde ich hin und her springen, aber ich wollte diese .s verbinden, deshalb. Wie können Sie… Schreiben und Durchlesen ist nur eine einfache Schnittstelle, also haben Sie hier eine Durchleseschnittstelle. Ja, drei Methoden, es gibt ein Init, mit dem Sie eine Verbindung zur Datenquelle herstellen können. Dispose ist die Trennung und sie sind zu überladen von LoadFromSource. LoadFromSource ist also ein Schlüssel, und Sie geben ein Cache-Element zurück, und LoadFromSource hat eine Überladung, bei der Sie ein Wörterbuch zurückgeben können. Also, LoadFromSource ist etwas, das NCache ruft Ihren Read-Through-Handler auf.

Nehmen wir also an, Ihre Anwendung führt Cache.Get aus und dieses Element befindet sich nicht im Cache, und Sie sagen es NCache Wenn es nicht im Cache ist, gehen Sie bitte und fragen Sie den Read-Through-Handler. NCache ruft den Read-Through-Handler auf, da der Read-Through-Handler Ihr Code ist, der sich im Cache-Cluster befindet. NCache wird diese Methode aufrufen. Diese Methode ist Ihr Code, geht zu Ihrer Datenbank, Ihrer Datenquelle, die alles sein kann, könnte ein SQL oder ein sogenannter Mainframe sein und die Daten abrufen und sie dann speichern. Nun das NCache hat die Fähigkeit, zu Ihrer Datenbank zu gehen, was bedeutet, dass es automatisch neu laden kann. Das ist also der Bequemlichkeitsteil. Sie können es also mit der relationalen Datenbank und der nicht relationalen Datenbank synchronisieren.

Zwischenspeichern relationaler Daten

Das Letzte ist das Zwischenspeichern relationaler Daten. Sie müssen mit der Datenanwendung Buch führen und die einen Daten und die Beziehung zu anderen verfolgen. Ich werde nur ein Beispiel eines Kunden geben, der mehrere Bestellungen hat. Obwohl Sie normalerweise keinen Kunden löschen, aber sagen wir einfach, wenn Sie es getan haben und der Cache es nicht kennt, also sagen wir, wenn Sie ein Kundenobjekt aus dem Cache gelöscht haben und es zehn Bestellungen im Cache hatte, sind diese Bestellungen nein nicht länger gültig, sollten sie nicht im Cache gehalten werden. Wenn Sie also eine Eins-zu-Viele haben, hängt normalerweise die Zahl von der Eins ab. Wenn Sie also eine aus dem Cache löschen, sollten Sie auch viele aus dem Cache löschen. Jetzt müssten Sie jedes Mal, wenn Sie einen löschen, nachverfolgen, dass Sie viele löschen müssen. Was Sie also stattdessen tun können, ist, dass das ASP.NET-Cacheobjekt ein Abhängigkeitskonzept angehängt hatte. NCache implementiert, damit Sie diese beiden in Beziehung setzen können, und wenn das Kundenobjekt jemals aktualisiert oder verschoben wird, werden alle Bestellungen automatisch entfernt .

Sie können die Cache-Abhängigkeit für eins zu viele, für eins zu eins und auch dann verwenden, wenn Sie Sammlungen zwischenspeichern und dann auch einzelne Objekte separat speichern wollten. Das ist also in Ihrer Kundensammlung als ein Objekt zwischengespeichert, und einige der Kunden wurden auch einzeln zwischengespeichert. Denn im Cache können Sie mehrere Kopien aufbewahren. Es wird alles von Ihrer Anwendung gespeichert. Im Gegensatz zu Ihrer Datenbank, die eine Normalisierung und Datenintegrität aufweisen muss, kann der Cache auf diese Weise mehrere Kopien haben, da es nur um die Leistung geht. Wenn Sie mehrere Kopien haben und in der Lage sein müssen, aufzuräumen, wenn eine Kopie aktualisiert wird, und genau das ermöglicht Ihnen diese Cache-Abhängigkeit. Das sind also die vier verschiedenen Möglichkeiten, wie Sie Ihren Cache frisch halten. Sie sind alle als Teil von verfügbar NCache open source.

App-Daten-Caching-Funktionen – Read-Thru & Write-Thru

Ich bin wieder durch Read-Through Write-Through, Write-Through ist dasselbe wie Read-Through, außer, wenn Sie den Cache aktualisieren, bitten Sie den Cache, die Datenbank zu aktualisieren.

Durchlesen und Durchschreiben

Read-Through ist also, wenn Sie den Cache lesen, bitten Sie den Cache, aus der Datenbank zu lesen, falls er die Daten nicht hat. Read-Through und Write-Through ermöglichen es Ihnen jetzt, Ihren Persistenzcode in einer Caching-Ebene zu konsolidieren. Und lassen Sie den Cache Ihre Datenbank besser kennen und die Anwendung wird einfacher und einfacher.

Hinterschreiben

Durchschreiben hat auch einen zusätzlichen Vorteil, der als Schreiben bezeichnet wird, da jedes Mal, wenn Sie die Datenbank aktualisieren, der langsamste Vorgang in Ihrer Anwendung das Aktualisieren der Datenbank ist. Es ist sogar noch langsamer als das Abrufen von Daten aus der Datenbank, und wenn Sie einen Cache zum Abrufen von Daten verwenden, müssen Sie nicht so oft zur Datenbank gehen. Warum nicht den Cache für aktualisierte Daten verwenden, wenn die Daten nicht so sensibel sind. Dies bedeutet, dass Sie es für die asynchrone Aktualisierung in die Warteschlange stellen können. Wenn die Daten sehr sensibel sind, möchten Sie sie natürlich nicht für die asynchrone Aktualisierung in die Warteschlange stellen, aber viele der Daten können Sie für die asynchrone Aktualisierung in die Warteschlange stellen. Wenn Sie es in die Warteschlange stellen und im Grunde eine Write-Behind-Funktion ausführen, fragen Sie NCache um es asynchron in die Datenbank zu schreiben, wenn eine Warteschlange erstellt wird oder mehrere Aktualisierungsanforderungen gestellt werden, wird diese Warteschlange auf mehrere Server repliziert, falls ein Server ausfällt, sind Sie nicht verloren. Und Ihre Anwendung wird dort sicherlich schneller, da sie nicht mehr darauf wartet, dass die Datenbank aktualisiert wird. Das Durchschreiben hat also den Leistungsvorteil. Und schreiben Sie dahinter.. Durchlesen hat alle Vorteile.

Elemente automatisch neu laden

Sie können sogar mit Ablaufdatum automatisch neu laden. Wenn Sie also ablaufen, können Sie diesen Artikel automatisch neu laden. Nehmen wir an, der Ablauf ändert sich im Grunde genommen wahrscheinlich auf dem Datenbankserver. Es ist im Cache nicht mehr gültig, also wird es nicht entfernt, warum laden wir es nicht, weil Sie es sowieso brauchen werden. Dann handelt es sich wahrscheinlich um eine Art Suchdaten, die automatisch durchgelesen werden. Auch hier übernimmt der Cache mehr und mehr dieser Arbeit von Ihrer Anwendung.

App-Daten-Caching-Funktionen – Datengruppierung

Sobald Sie in der Lage sind, den Cache aktuell zu halten, und Sie zuversichtlich sind, beginnen Sie jetzt, viele Daten zwischenzuspeichern. Wenn Sie anfangen, viele Daten zwischenzuspeichern, ist es wirklich schön, wenn Sie Daten über dieses Schlüsselwertpaar hinaus suchen können. Ich habe gerade gestern Abend mit jemandem gesprochen und sie mussten sich wirklich Techniken einfallen lassen, wie man die Schlüssel formatiert, um verschiedene Arten von Daten zu finden. Dies ist etwas, was Sie nicht tun müssen NCache. Sie können diesen Meta-Tags sogenannte Gruppen und Untergruppen sowie Tags und benannte Tags zuweisen. Dies sind Metadaten, die Sie Ihren Objekten zuweisen können, anstatt die Schlüssel umzubenennen. Das könnten bessere Daten sein und darauf aufbauend kannst du sagen, gib mir alles, was dieses Tag oder diese zwei Tags oder diese drei Tags hat, oder gib mir alles, was zu dieser Gruppe gehört. Das ist eins.

Zweitens können Sie SQL-Abfragen durchführen. Lassen Sie mich Ihnen das zeigen. Also sieht der Cache wieder mehr und mehr wie eine Datenbank aus.

Datengruppierung

So können Sie hier beispielsweise sagen, wählen Sie alle Produkte mit diesem Namen aus, sodass Sie jetzt eine Suche basierend auf einem Attribut des Produktobjekts durchführen. Nun, das ist eine Menge NCache code, damit Sie execute.reader genau wie SQL Server ausführen. Es ist sehr ähnlich, man bekommt einen Icache-Reader zurück und sieht sich einfach seine Sachen an. Nun, das ist wieder etwas, das den Cache dort erledigen lässt, wo Sie es tun müssen. Einerseits legen Sie viele Daten in den Cache, andererseits können Sie jetzt Daten aus dem Cache durchsuchen.

ASP.NET Core Sitzungsspeicher

Ich habe über die ASP gesprochen.NET core Sitzungen. Ich denke, die Hauptsache, die man im Hinterkopf behalten sollte, ist, dass es zwei Möglichkeiten gibt, wie man es verwenden kann.

IDistributedCache-Speicher

Einer ist, dass Sie sich anschließen NCache. NCache hat einen IDistributedCache-Anbieter implementiert. Also steckst du ein NCache als IDistributedCache-Anbieter und ASP.NET core beginnt automatisch mit dem Speichern der Sessions in NCache. Schau mal ob ich es hier habe.

distributedcache-session-storage

Hier ist zum Beispiel ein ASP.NET Core Anwendung, gehen Sie zu den Diensten konfigurieren und fügen Sie einfach hinzu NCache als IDistributedCache-Anbieter und jetzt verwenden Sie den regulären ASP.NET core Sitzung, die wissen, dass sie von IDistributedCache abhängen, da sie wissen, dass jetzt ein Anbieter angeschlossen ist. Wenn Sie dies tun, werden also alle Sitzungen gespeichert NCache. Und ich werde Ihnen zeigen, wie Caching aussieht. Ich werde Ihnen nur eine tatsächliche Demo von geben NCache. Das ist also ein Weg.

NCache Sitzungsanbieter

Der zweite Weg ist, dass Sie tatsächlich verwenden NCache als eigener Sitzungsanbieter selbst, also statt zu einem IDistributedCache zu gehen, gehst du in die gleichen Dienste konfigurieren und sagst hinzufügen NCache Sitzungsanbieter.

ncache-Sitzungsanbieter

Jetzt hat dieser Sitzungsanbieter mehr Funktionen als der normale IDistributedCache. Es hat mehr sitzungsspezifische Funktionen. Ich meine, ich würde Ihnen empfehlen, die zu verwenden NCache auf einem eigenen Sitzungsanbieter, der gut zu IDistributedCache passt. Sie können jedoch zu beiden Optionen, ASP, wechseln.NET core bietet Ihnen diese. Wie ich schon sagte, erforderte dies nichts weiter als die Codeänderung. Das ist alles. Alles andere ist automatisch. Wenn Sie also von einem verteilten Cache wie z NCache, fügen Sie dies als Einstiegspunkt in Ihre Anwendung ein. Sie müssen heute davon profitieren, weil der Objekt-Cache für das Zwischenspeichern Ihrer Anwendungsdaten eine Programmierung erfordert, die dann in Ihre Entwicklungspläne passt und einen etwas längeren Prozess als diesen erfordert. Aber das geht sehr sehr schnell und das weiß ich sicher schon hier.

ASP.NET Core Antwort-Caching

Und dies ist eine Konfiguration, also gehe ich noch einmal darauf ein und auf die gleiche Weise verwendet das Response-Caching einen verteilten Cache, und Sie können ihn anschließen NCache dazu und dann funktioniert es automatisch.

Antwort-Caching

Architekturanforderungen für den verteilten Cache

Lassen Sie mich kurz auf einige der Dinge eingehen, die NCache Wird besorgt.

Hochverfügbarkeit

Ein verteilter Cache ist so etwas wie eine Datenbank, er lebt mit Ihrer Anwendung in der Produktion. Sie müssen also sicherstellen, dass die Architektur flexibel und hochverfügbar ist.

Hochverfügbarkeits-Cache-Cluster

Also zum Beispiel NCache hat eine Peer-to-Peer-Architektur, aber andere Arten von Redis habe nicht. Anstatt also einen Master-Slave zu haben, möchten Sie einen Peer-to-Peer haben. Wie gesagt, viele der Java-Caches, die sie im Speicherdatengrid aufrufen, haben eine Peer-to-Peer-Architektur. Das Schöne an Peer-to-Peer ist, dass jeder Peer ist, sodass jeder Knoten ausfallen kann und nichts passiert. Wahrscheinlich ist der Sklave der Herr, der Sklave kann nicht Herr werden. Wenn der Herr stirbt, ist der Sklave immer noch ein Sklave. Damit Sie manuell eingreifen können, um sich wiederherzustellen. Im Fall von Peer-to-Peer wird es automatisch wiederhergestellt. Aufgrund von Peer-to-Peer wird es also zu dem, was wir den selbstheilenden dynamischen Cluster nennen, der sich automatisch anpasst. Das ist also der erste Aspekt.

Lineare Skalierbarkeit m. Reproduzieren

Der zweite Aspekt ist die lineare Skalierbarkeit, die die Partitionierung ist, und wiederum die lineare Skalierbarkeit mit dynamischer Anpassung der Partitionierung.

dynamische-partitionen-1

Die Sachen NCache automatisch tut, sagen wir, wenn Sie eine Konfiguration mit zwei Servern haben und diese zwei Partitionen hinzufügen möchten und jetzt einen dritten Server hinzufügen möchten, wird die dritte Partition hinzugefügt. NCache automatisch, sagen wir, es geht von , sagen wir, Sie haben hier zwei Server mit zwei Partitionen. Jede Partition als Backup auf einem anderen Server und einer anderen Partition ist im Wesentlichen eine Sammlung von Buckets mit Hash-Map-Verteilung.

dynamische-partitionen-2

Nehmen wir also an, Sie haben 1,000 Buckets, 500 gehen in Partition 1, 500 Weltpartition 2, alles funktioniert gut, jetzt möchten Sie einen dritten Server hinzufügen. St einmal, denn noch einmal, durch Hinzufügen eines dritten Servers können Sie jetzt drei Partitionen haben, also NCache wird automatisch hinter den Kulissen ausgeführt, während die Anwendung ausgeführt wird, es wird eine dritte Partition erstellt und wir werden einige der Daten für Partition 1 und 2 in die dritte Partition verschieben. Wieder ein Drittel, ein Drittel ein Drittel. Die Eimer bewegen sich also tatsächlich und das alles geschieht dynamisch. Sobald sich die Buckets bewegen, werden auch die Replikate neu angepasst, aber Replik eins und zwei sind nicht mehr dieselben Repliken wie zuvor, haben schnell weniger Daten und es gibt die neue Replik namens Replik drei. Der Server, der Repliken zwei hatte, nicht mehr Replik 3, er wird drei haben und Replik drei wird auf dem dritten Server erstellt, alles, was automatisch für Sie erledigt wird.

Diese Dynamik macht es also hochverfügbar. Wenn Sie also einen Server hinzufügen, müssen Sie manuell eingreifen, aber das müssen Sie wirklich … Es ist also immer noch sehr praktisch, wenn Sie das einfach tun können. Wörtlich sagen Sie einfach hinzufügen und alles wird für Sie erledigt. Aber es ist noch wichtiger, wenn Sie einen Server löschen, da das Löschen auch aufgrund eines Serverabsturzes passieren kann. Also, wenn Sie sich in einer Konfiguration mit drei Servern befinden, heißt das, dass Server 3 ausfällt, jetzt ist Partition 3 verloren, was NCache tun wird, ist es sofort Replikat 3 aktiv zu machen, weil es eine Kopie von Partition 1 hat. Jetzt haben Sie also Partition 2, Partition 3 und Replikat 3, weil Partition XNUMX, vorübergehend. Es gibt also keine Unterbrechung. Sobald das dann erledigt ist NCache Jetzt erkennen Sie, dass nur zwei Server nur drei Partitionen haben können, es führt Replica 3 in Partition 1 und 2 zusammen, alle auf einmal, und sobald diese Zusammenführung abgeschlossen ist, erstellt es jetzt ein Replica 2 an dieser Stelle hier. Sie können also zu diesem Bild zurückkehren.

Nun, das ist etwas, was Sie mit anderen Moden nicht automatisch tun können. Das bedeutet, dass, wenn dieses Ding passiert ist und die Mitte gestorben ist, einer Ihrer IT-Abteilungsmitarbeiter manuell gehen und neu einstellen muss, und bis das passiert, ein Cache für einen und das, was sie als eingeschränkte Funktionalität bezeichnen NCache macht es automatisch so. Dann müssen Sie also sicherstellen, dass Hochverfügbarkeit wirklich in einem Cache vorhanden ist.

Client-Cache

Ich habe bereits über die InProc-Geschwindigkeit gesprochen.

Client-Cache

Wan-Replikation

Es gibt eine weitere Funktion, und jetzt ist dies eine Funktion für die Enterprise Edition. Wenn Sie mehrere Rechenzentren haben, in die jetzt viele Anwendungen verschoben wurden, ist es aufgrund der Cloud einfacher, Anwendungen in mehreren Regionen bereitzustellen.

WAN-Replikationsdiagramm

Wenn Ihre Anwendung also auf mehrere Daten zentriert ist, muss Ihr Cache möglicherweise auch auf mehrere repliziert werden, und da es eine große Latenz gibt, kann sich der gesamte Cluster nicht wirklich über mehrere Regionen erstrecken. Sie haben also einen Cluster in einem in einem Cluster, und dazwischen befindet sich eine Brücke, die asynchron repliziert. Es handelt sich also um einen bidirektionalen Replikationsfall von Aktiv-Aktiv, und die Brücke führt eine Konfliktlösung durch, da derselbe Schlüssel für beide Orte aktualisiert wird. Jetzt müssen Sie das im Auge behalten.

NCache Demo

Lassen Sie mich Ihnen schnell zeigen, was NCache sieht aus wie. Also, ich habe Azure, also habe ich im Grunde beschafft oder bereitgestellt, wenn ich nur das Portal bekommen kann, da ist es! Also, ich habe … es ist wirklich langsam. Komm schon! Unter vier ja, Okay! Also, wir haben hier vier VMs und ich bin bei einer von ihnen angemeldet, nämlich der … Also, ich habe im Grunde zwei Cache-Server, alles Windows, einen Cache-Client Windows, einen Cache-Client, der Linux ist. Weil es .NET core, ich kann alles. Auch die Cache-Server können aber leben NCache wie gesagt ist .net core Sie können also einfach gehen, wenn Sie auf unsere Website kommen, Just, Sie können tatsächlich entweder die .msi- oder die Tar.gz-Datei herunterladen, je nach Ihren Vorlieben. Sie können entweder Windows oder Linux installieren. Tatsächlich können Sie Open Source auch von hier herunterladen. Unser Unternehmen baut auf unserem Open Source auf, also sind wir Eigentümer von Open Source und ein Unternehmen.

Erstellen Sie einen geclusterten Cache

Also, lassen Sie mich jetzt schnell, Entschuldigung, ich werde einen 2-Knoten-Cache-Cluster erstellen, noch einmal, dieses Tool ist nicht Open Source, aber all diese Dinge, die Sie in Open Source tun können. Es ist einfach nicht so schön. Eigentlich wird dies jetzt ein webbasiertes Tool sein. Also mache ich einfach weiter. Dies ist mein erster Cache-Server. Dies ist mein zweiter Cache-Server. Also werde ich zwei Server-Cache-Cluster erstellen. Ich werde alle anderen Standardwerte so nehmen, wie sie sind. Ich werde fortfahren und zwei Clients hinzufügen, einen bin ich selbst, der der Windows-Client ist, und den zweiten werde ich 10.0.0.7-Client und den Linux-Client hinzufügen. Lassen Sie uns den Cache starten. Ich meine, so schnell können Sie Caches erstellen und konfigurieren.

Stress simulieren und Cache überwachen

Ich werde meine erste Statistik dazu starten. NCache wird mit diesem Programm namens Stresstest-Tool geliefert, mit dem Sie die Belastung simulieren können NCache. Es ist also wie ein Programm. Es bekommt seine eigenen Eingaben. Ich habe PowerShell hier geöffnet, also mache ich Teststress und gebe den Cache-Namen ein, der der Cache-Name ist, den ich gerade hier gegeben habe, schreibe hier, und ich habe gerade diese Box, dies ist die erste. Also gehe ich zur Client-Box, also führe ich das einfach aus und Sie sehen, dass hier plötzlich Aktivitäten beginnen. Also mache ich im Moment ungefähr 500 Operationen pro Sekunde pro Box, okay? Sagen wir also, ich möchte meine Last erhöhen, ich möchte testen, wie NCache wird in meiner Umgebung ausgeführt, also werde ich weitermachen und eine weitere Instanz desselben auf derselben Box starten. Plötzlich sehen Sie, dass sich meine Auslastung fast verdoppelt hat und ich jetzt zwei Linux-Boxen habe, wie Sie sehen können, hier ist Linux, das ist die . Seven-Box, die genau hier ist. Also, ich werde hier zuerst PowerShell starten, ich möchte dieses Modul einfach schnell kopieren und ich werde den gleichen Stresstest-Demo-Cache durchführen, und sobald ich dies mache, werden Sie sehen, dass dies plötzlich in etwa gestiegen ist 60 sein…

ncacheDemo

Jedes Mal, wenn ich das mache, werden also etwa 500 Operationen pro Sekunde und Box hinzugefügt. Ich werde noch eins machen und dann sind wir damit fertig. Ich werde hinzufügen … Sie können also immer mehr Last hinzufügen, bis Sie sehen, dass sie anfangen, ihre maximale Kapazität zu erreichen, und dann fügen Sie einen dritten Server hinzu. Und natürlich müssen Sie auch weitere Clients hinzufügen. All dies ist eine Leistung, die Sie einfach überwachen können, sogar in Tools von Drittanbietern. Das ist so einfach wie es ist. Dies sind zwischengespeicherte Elemente, die Sie hinzufügen.

Sie können auf unserer Website entweder Open Source herunterladen, also Open Source verfügbar ist, es gibt auch einen MSI-Installer, damit Sie Open Source herunterladen können. Sie können also entweder Open Source verwenden oder, wenn Sie wirklich sicher sind, dass Sie es in einer unterstützenden Umgebung verwenden möchten, einfach loslegen und direkt Enterprise herunterladen. Nehmen wir an, wenn ich zu Open Source komme, können Sie den Installer herunterladen, sodass Ihnen der Quellcode nicht in Rechnung gestellt werden muss. Auch hier, obwohl sich der gesamte Quellcode auf GitHub befindet.

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.