Verteilter Cache-Client
Die Verwendung von NCache deckt eine Vielzahl von Anwendungsfällen ab, angefangen von einem einfachen Schlüsselwertspeicher bis hin zu fortgeschrittenen SQL-Suche und Pub / Sub. Zu den Clientanwendungen zählen unter anderem Konsolenanwendungen, Windows-Dienste, Webanwendungen und Webdienste. Zu den Clientbibliotheken (SDK) gehören .NET, Java und NodeJS. Darüber hinaus wird auch Unterstützung für Python und Scala bereitgestellt. Mithilfe des entsprechenden SDK können Clientanwendungen eine Verbindung zu einem oder mehreren Caches herstellen.
Note
Diese Funktion ist auch in verfügbar NCache Professional.
Kommunikationsmethoden für den verteilten Cache-Client
Google Protobuf als Datenaustauschformat: Der Client kommuniziert mit dem verteilten Cache über einen persistenten TCP-Socket. NCache Client verwendet Google-Protokollpuffer (Protobuf) als Protokoll zur Kommunikation mit dem Cache-Server. Die Verwendung von Protobuf bietet Flexibilität gegenüber älteren Client-Versionen von NCache, um mit neuen Cache-Server-Versionen zu kommunizieren.
Request-Response-basierte parallele Anforderungsausführung: NCache Der Client unterstützt Multithreading. Diese Anwendungen können parallele Anfragen an den Cache stellen. NCache folgt dem RequestId-basierten Request-Response-Protokoll in der Client-Server-Kommunikation, bei dem jeder Anfrage eine eindeutige RequestId zugewiesen wird. Obwohl zwischen dem Cache-Client und einem Cache-Server eine einzige TCP-Verbindung besteht, kann der Client mehrere Anfragen mit seinen eindeutigen RequestIds an den Cache-Server senden, ohne auf die Antwort bereits gesendeter Anfragen warten zu müssen. Jede Anfrage ist also wirklich unabhängig. NCache Der Server unterstützt auch die parallele Anforderungsausführung. Diese Architektur ermöglicht es Anwendungen, mehrere parallele Vorgänge vom Client bis zum Cache-Server auszuführen, ohne dass Vorgänge aufeinander warten, und bietet so maximale Leistung und Skalierbarkeit.
Pipeline anfordern: Pipelining bezieht sich auf das Kombinieren und Senden mehrerer Anforderungen in einem einzigen Socket-Vorgang (I/O). Immer wenn Anwendungen E/A-Vorgänge ausführen, erfolgt ein Wechsel vom Benutzer- zum Kernel-Modus, was ein kostspieliger Vorgang ist. Pipelining vermeidet diese Kosten, indem dieselbe Aufgabe mit einer geringeren Anzahl von E/A-Vorgängen ausgeführt wird. Pipelining steigert die Anwendungsleistung um ein Vielfaches. NCache unterstützt Pipelining sowohl auf der Client- als auch auf der Serverseite.
Cache-Topologie-Bewusstsein: NCache Der Client erkennt die Cache-Topologie. Wenn ein Cache-Client eine Verbindung zum ersten Cache-Server herstellt, ruft er die Cache-Metadaten einschließlich seiner Topologie ab. Wie ein Client eine Verbindung mit Cache-Servern herstellen und wie Client-Vorgänge ausgeführt werden sollen, hängt von der zugrunde liegenden Topologie des Caches ab. Beispielsweise werden Daten auf verschiedene Cache-Server verteilt Partitioniert und Partitionsreplikat Topologien. Daher stellt der Client eine TCP-Verbindung mit jedem Server im Cache-Cluster her und ruft die neuesten Datenverteilungskarten ab. Der Client führt direkt Lese- und Schreibvorgänge für die Partition aus, die die betreffenden Daten enthält. Ebenso ist jeder Server im Repliziert Die Topologie enthält denselben Datensatz. Somit verbindet sich der Client nur mit einem einzigen Cache-Server.
Nahtloser Umgang mit Verbindungsfehlern: Das NCache Der Client unterhält eine dauerhafte Verbindung mit dem/den Cache-Server(n). Wenn diese Verbindung aufgrund von Netzwerkstörungen unterbrochen wird, wird die NCache Der Client ist mit einem Mechanismus zur Wiederherstellung der Hintergrundverbindung ausgestattet. Dieser Mechanismus stellt automatisch eine Verbindung mit dem ausgefallenen Server her, sobald die Netzwerkverbindung zwischen Client und Server wiederhergestellt wird. Und das alles geschieht nahtlos, ohne Eingreifen der Client-Anwendung.
Datenserialisierung: Anwendungsdaten durchlaufen den Serialisierungsprozess, bevor sie zum Cache-Server gelangen. NCache unterstützt beide Binär- und JSON-Serialisierung. Sie können zum Zeitpunkt der Konfiguration des Caches eines der Serialisierungsformate auswählen. Der Cache-Client ruft das Serialisierungsformat vom Cache-Server ab, wenn er eine Verbindung zum Cache herstellt. Anschließend werden die Anwendungsdaten entsprechend dem Serialisierungsformat serialisiert.
Datenverschlüsselung: Die Verschlüsselung von Anwendungsdaten ist eine optionale Funktion, die Sie aktivieren können. Wenn Verschlüsselung konfiguriert ist, verschlüsselt der Client die Anwendungsdaten, nachdem sie serialisiert wurden. Der Client ruft die verschlüsselungsbezogene Konfiguration vom Cache-Server ab, wenn er eine Verbindung zum Cache herstellt.
Datenkompression: Kompression der Anwendungsdaten kann dazu beitragen, die Cache-Größe zu reduzieren, wenn die Daten sehr groß sind. Die Daten werden zunächst serialisiert, dann verschlüsselt (sofern die Verschlüsselung aktiviert ist) und schließlich vom Cache-Client komprimiert, bevor sie an den Cache gesendet werden. Der Cache-Client ruft die komprimierungsbezogene Konfiguration vom Cache-Server ab, wenn er eine Verbindung zum Cache herstellt.
Mit dem Cache verbinden
Der Cache-Client benötigt die Serverinformationen, um eine Verbindung zum Cache herzustellen. Serverinformationen können entweder über die Client-Konfigurationsdatei bereitgestellt werden (client.ncconf ) oder durch CacheConnectionOptions. Der Client durchläuft die bereitgestellte Cache-Serverliste und versucht, eine Verbindung mit dem auf dem Server ausgeführten Cache herzustellen. Wenn die Cache-Instanz nicht auf einem bestimmten Server ausgeführt wird, wird sie auf den nächsten in der Liste angegebenen Server verschoben. Die Clientverbindung durchläuft normalerweise die folgenden Schritte:
Der Client baut zunächst eine TCP-Verbindung mit auf NCache Dienst vorbei port 9800
Der Client fordert dann die vollständige Liste der konfigurierten Cache-Server an. Auf diese Weise verfügt es über eine aktualisierte Liste der Cache-Server.
Anschließend sendet der Client dem Cache eine Initialisierungsanforderung an den Server, die gegebenenfalls den Cache-Namen und Sicherheitsanmeldeinformationen enthält Cache-Sicherheit ist aktiviert. Jeder Cache wird in einem separaten Prozess ausgeführt. Wenn Sie haben .NET Framework basierte Installation von NCache Auf der Serverseite übergibt der Dienst dann nahtlos die Clientverbindung an den Cache-Prozess und der Client stellt erfolgreich eine Verbindung mit dem Cache her. In .NET Core oder .NET 6 und höhere Installationen teilt der Dienst die Portinformationen mit dem Client, auf dem der Cache auf Verbindungen lauscht. Anschließend stellt der Client eine direkte Verbindung zum Cache-Prozess her und sendet eine Initialisierungsanforderung.
Note
NCache konfiguriert die Firewall automatisch so, dass alle erforderlichen Ports unter Windows geöffnet werden. Sie müssen jedoch öffnen NCache Ports unter Linux von Firewall konfigurieren.
Wenn der Client eine Verbindung mit einem herstellt Replizierter Cache und der Client-Lastausgleich aktiviert ist, fragt der Client nach einem Server, mit dem die geringste Anzahl an Clients verbunden ist. Es verbindet sich dann mit dem am wenigsten ausgelasteten Server.
Wenn der Client eine Verbindung mit einem herstellt Partitioniert oder eine Partitionsreplikat Cache, dann fordert es die Verteilungskarten für die Server an. Nach Erhalt der Karte(n) stellt es Verbindungen zu den in der Verteilungskarte vorhandenen Cache-Servern her.
Der Client fordert auch verschiedene Cache-Konfigurationen an, z
- Komprimierungsschwelle und Cache-Serialisierungsformat
- Verschlüsselungsschlüssel werden zwischen dem Client und dem Cache-Server gemeinsam genutzt
- Konfigurierte Abfrageindizes und registrierte Kompakttypen usw.
Siehe auch
Cache-Topologien
Cache-Cluster
Lokaler Cache
Client-Cache
Bridge für die WAN-Replikation