Sechs Wege zur Optimierung NCache Leistung

Aufgezeichnetes Webinar
Von Kal Ali und Sam Awan

NCache ist ein beliebter Open Source In-Memory Distributed Cache für .NET. Es hilft Ihnen, Ihre .NET-Anwendungen zu skalieren, indem es Anwendungsdaten zwischenspeichert und diese teuren Datenbankreisen reduziert. NCache skaliert linear, indem Sie dem Caching-Tier-Cluster weitere Cache-Server hinzufügen können.

Erfahren Sie, wie Sie optimieren NCache Leistung, indem Sie es richtig konfigurieren und auch seine leistungssteigernden Funktionen verwenden.

Dieses Webinar umfasst:

  • Einführung in die NCache und seine Architektur
  • Gemeinsame Wege NCache verwendet wird
  • NCache leistungssteigernde Funktionen
  • NCache leistungssteigernde Konfigurationsoptionen

Überblick

Heute präsentieren wir ein Webinar über sechs Tricks zur Verbesserung NCache Leistung. Der Modus dieses Webinars wäre nur zuhören. Sie haben die Möglichkeit, jede Art von Frage zu stellen, die Sie möchten. Auf der rechten Seite befindet sich eine Registerkarte mit Fragen und Antworten. Sie könnten Ihre Fragen eingeben und einer von uns wird diese Fragen für Sie beantworten können. Wenn Sie während des Webinars Fragen oder Bedenken haben und uns nicht hören können, können Sie auch hier wieder das Chat-Fenster verwenden. Kal wird über den gesamten technischen Teil der Präsentation sprechen. Wenn es etwas gibt, das nicht so technisch oder vertriebsbezogen ist, können Sie Ihre Fragen direkt an mich richten. Nachdem dies gesagt ist, werde ich es Kal übergeben und er wird mit der Präsentation beginnen.

Gut. Danke Sam. Könnten Sie bitte bestätigen, dass Sie meinen Bildschirm sehen können, weil ich gerade angefangen habe, ihn zu teilen? Ja, ich kann Ihren Bildschirm einwandfrei sehen. In Ordnung, perfekt. Also, hey Leute, Sam hat mich gerade vorgestellt, mein Name ist Kal und das Thema des heutigen Webinars ist Six Ways to Optimize NCache Performance

Daher werden wir im heutigen Webinar einige allgemeine Details in Bezug auf behandeln NCache und auch welche Funktionen Sie in Ihrer Anwendung verwenden können, um die Leistung zu optimieren. So, NCache ist bereits eine Performance-Lösung. Es erhöht schnell Ihre Leistung für Ihre Anwendungen, da es Ihre Fahrten zur Datenbank reduziert. Aber mit diesen Funktionen können Sie das sogar noch weiter verbessern, und diese sechs Tricks werden tatsächlich anwendungsfallbasiert sein. Ich werde neben jedem von ihnen einen Anwendungsfall vorstellen, und je nachdem, welcher auf Ihr spezifisches Szenario zutrifft, können Sie diesen auf jeden Fall verwenden und sehen, wie er für Sie funktioniert. Wir werden also einige praktische Demos verschiedener Anwendungen abdecken und dementsprechend werden wir sehen, wie sie in verschiedenen Situationen funktionieren NCache funktioniert und wie uns diese Funktionen tatsächlich helfen. Also werde ich jetzt mit der Präsentation fortfahren.

Das Skalierbarkeitsproblem

Lassen Sie uns also zunächst über das Skalierbarkeitsproblem sprechen, das in den meisten Bereitstellungsszenarien auftritt. Normalerweise haben Sie also eine Webfarm, die hinter einer sitzt Lastenausgleicher und diese Art von Ebene, dieses Szenario ist normalerweise sehr skalierbar. Da Sie sehen, dass Ihre Anwendungen stärker belastet werden, können Sie dieser Ebene im Grunde einfach mehr Server hinzufügen, was die Kapazität Ihrer Umgebung in Bezug auf die Gesamtlast, die sie aufnehmen kann oder für die sie aufnehmen kann, tatsächlich erhöhen würde Beispiel Gesamtanforderungen, die es, sagen wir, in einer Sekunde entgegennehmen kann.

Das eigentliche Problem, der eigentliche Engpass liegt dort, wo diese Anwendungen mit der Backend-Datenquelle in Kontakt treten müssen. Vielleicht, um einige Referenzdaten zu bekommen, vielleicht, um eine andere Art von Daten zu bekommen, die dort gespeichert sind. Also, im Grunde ist das der Engpass. Normalerweise ist die Backend-Datenquelle eine Datenbank. Wie wir alle wissen, eignen sich Datenbanken hervorragend zum Speichern, aber das Problem liegt darin, dass sie im Allgemeinen langsam sind, weil sie sich auf der Festplatte befinden. Sie neigen dazu, unter hoher Transaktionslast zu ersticken, und sie sind nicht sehr skalierbar.

Die Lösung

In solchen Szenarien neigen Unternehmen / Organisationen also dazu, sich in Richtung a zu bewegen NoSQL database, aber das ist an dieser Stelle nicht der optimale Ansatz. Denn das erfordert eine ganze architektonische Änderung, nicht nur innerhalb Ihrer Anwendung, sondern auch innerhalb Ihrer eigentlichen Daten, um sie miteinander kompatibel zu machen. In solchen Szenarien wäre ein optimaler Ansatz also ein verteilter In-Memory-Cache, wie z NCache, das schneller und skalierbarer ist, da alles im Speicher abgelegt wird. Wenn wir es also mit einer Datenbank vergleichen, war es in diesem Fall auf der Festplatte vorhanden. So, jetzt haben wir alles im Speicher vorhanden. Es ist skalierbarer, da der verteilte Cache logischerweise eine einzelne Einheit ist, aber darunter befinden sich mehrere unabhängige Server, die diesen geclusterten Cache hosten.

Es ist eine sehr skalierbare Topologie. Sie können hier beliebig viele Server hinzufügen. Wie Sie wissen, bündelt es im Grunde genommen nicht nur die Speicherressourcen für all diese Server, sondern auch die Rechenleistung all dieser Ressourcen. Wenn Sie also mehr Server hinzufügen, erhöht sich die Kapazität des Caches in Bezug auf die Gesamtdaten, die gespeichert werden können. Sowie die Gesamtoperationen oder die Gesamtlast, die es aufnehmen kann.

Wenn Sie also sehen, dass Ihre Webfarm stärker belastet wird, können Sie tatsächlich auch die Anzahl der Server in Ihrem Caching-Cluster erhöhen, und das würde diese Ebene auch skalierbar machen. Jetzt stimmt Ihre Caching-Ebene also mit den Anfragen überein, die von der Webfarm eingehen. Jetzt hilft es also tatsächlich, diesen nicht skalierbaren Teil zu entfernen, der in der Datenbank vorhanden war. Das Beste daran ist, dass es kein Ersatz für eine Datenbank ist. Sie können es parallel dazu verwenden. Der Cache-Cluster befindet sich also im Grunde direkt zwischen Ihren Anwendungen und Ihrer Datenbank. Sie können weiterhin Direktanrufe tätigen. Aber was es tut, ist, dass Sie es machen können NCache Ihre einzige Quelle für Daten, und damit haben wir Funktionen der Datenzugriffsschicht, die mit diesem Cache bereitgestellt werden, durch die Sie tatsächlich können, dass der Cache tatsächlich Daten in die Back-End-Datenquellen schreiben und Daten vom Back-End abrufen kann Datenquellen.

Auf diese Weise bleibt Ihr Cache also mit den Back-End-Datenquellen synchron. Sie haben also aktuelle Daten aus einer schnelleren Quelle, da sie im Arbeitsspeicher vorhanden sind und außerdem eine besser skalierbare Quelle sind. In diesem Fall ist es also ein sehr guter Kompromiss.

NCache Einsatz

Reden wir also über die NCache Bereitstellung in diesem Diagramm. Also, hier, wenn Sie das sehen können, sind dies im Grunde Ihre Anwendungsserver oder Webserver, auf denen Ihre Anwendung gehostet wird. Sie sitzen normalerweise hinter einem Load Balancer. Früher führten sie direkte Aufrufe an die Back-End-Datenquellen, wie z. B. eine Datenbank, aber jetzt ist die Caching-Schicht genau hier vorhanden. Dies ist die von uns empfohlene Bereitstellung, bei der Sie über eine dedizierte Caching-Ebene verfügen, die Ihre geclusterten Caches hostet.

NCache Einsatz

Was Ihre Anwendungen also tun, machen sie NCache die einzige Quelle für Daten. Alle ihre Anfragen zum Abrufen von Daten oder sogar irgendeine Art von Verarbeitung werden direkt im Cache ausgeführt, und wenn der Cache diese Datenzugriffsschichtanbieter nicht verwendet, kann er tatsächlich aus den Datenquellen zurückgeholt werden. Das ist es also, was es in Ihrer Umgebung tut. Diese Server werden, wie ich bereits erwähnt habe, als dedizierte Server empfohlen und sind sehr kostengünstige Server. Einzige Voraussetzung für NCache in diesem Fall ist nur die .NET framework. Auf diesen Servern, die den Cluster-Cache hosten, haben Sie die Cache-Server-Installation, die Cluster-Caches hosten kann, und auf dem Client, auf diesen Client-Boxen genau hier, die Ihre Anwendungsserver sind, haben Sie die remote client Installation, die lokale Caches hosten kann und tatsächlich dabei helfen kann, sich mit Remote-Cluster-Caches zu verbinden.

So sieht also die Bereitstellung aus. All dies ist linear skalierbar. Wenn wir mehr Server hinzufügen, erhöhen Sie die Gesamtkapazität des Caches.

Drei häufige Verwendungen von NCache

Lassen Sie uns über die drei häufigsten Verwendungen von sprechen NCache. Ich gehe all diese Dinge schnell durch, weil ich zu diesen sechs Wegen gelangen und ins Detail gehen möchte, damit ich, wenn es irgendwelche Fragen gibt, diese definitiv beantworten kann. Lassen Sie uns also über die drei üblichen Verwendungen von sprechen NCache.

  1. Zwischenspeichern von Anwendungsdaten

    Das erste ist das Zwischenspeichern von Anwendungsdaten. Auf dieser Folie haben wir also über die drei üblichen Verwendungen von gesprochen NCache. Das erste ist also das Zwischenspeichern von Anwendungsdaten. In diesem Fall führen Sie im Grunde genommen die ein NCache API innerhalb Ihrer Anwendung und mit dieser API können Sie Elemente hinzufügen und Elemente aus dem Cache abrufen und Sie können verschiedene Vorgänge im Cache ausführen, je nach Bedarf. Na und NCache Hat es die Fähigkeit hosten, im Grunde können Sie alles darin zwischenspeichern NCache. Es können Bilder sein, es können einige benutzerdefinierte Objekte, Domänenobjekte, es können Sammlungen sein, im Grunde alles. Alles, was für .NET zulässig ist, kann also zwischengespeichert werden NCache und Ihre Anwendungen verwenden, indem Sie die einführen NCache API, sehr einfach zu bedienen, sehr einfach zu bedienen, Sie können tatsächlich verschiedene Vorgänge im Cache ausführen und Elemente hinzufügen und abrufen.

  2. ASP.NET, ASP.NET Core Caching

    Der nächste Anwendungsfall bezieht sich auf ASP.NET, ASP.NET Core zwischenspeichern. Das erste ist also, dass Sie verwenden können NCache als Session State Provider. Kann Single-Site oder Multi-Site sein. Das nächste ist, dass Sie haben können NCache Speichern Sie Ihren Ansichtszustand. Dies ist etwas, das vor MVC ist. Danach war das Konzept des Ansichtszustands nicht mehr vorhanden. Danach haben wir für ASP.NET den Ausgabecacheanbieter. NCache kann als das fungieren und dann für ASP.NET Core Anwendungen kann es Core Response Caching sein. Damit kannst du das also machen NCache. NCache kann auch als SignalR Backplane. Alle diese Optionen, die gerade in Nummer 2 behandelt wurden, sind also eigentlich keine Codeänderungsoptionen. Sie müssen keinerlei Codeänderungen vornehmen. Sie können einfach Ihre Anwendungskonfigurationsdatei aktualisieren und die verwenden, die Sie tatsächlich haben NCache um alles zu speichern, was Sie speichern möchten. Es könnte Sitzungen sein, es könnte Ansichtsstatus sein, es könnte Ihre Ausgaben oder sogar das Core Response Caching sein. Also, mit diesem können Sie haben NCache diese Dinge aufbewahren. Also im Grunde in diesem Fall wieder keine Codeänderungsoption, sehr einfach zu bedienen. Es sind einige Schritte erforderlich. Wir haben eine vollständige Dokumentation. Wir haben auch Muster und nach diesen Schritten und dieser Dokumentation, sogar den Mustern, können Sie es innerhalb von 15 Minuten einrichten. Sie können alles einrichten lassen. Wir können es tatsächlich testen und sehen, wie das für Sie funktioniert.

  3. Freigabe von Pub/Sub- und Laufzeitdaten über Ereignisse

    Der nächste ist Pub / Sub und Gemeinsame Nutzung von Laufzeitdaten durch Ereignisse. Also, im Grunde haben Sie in diesem Fall, sagen wir, Sie haben serverlose Apps und Sie möchten sicherstellen, dass es eine Art Synchronisierung zwischen ihnen gibt, die bestimmte Nachrichten, bestimmte Daten weitergeben möchten. NCache kann nur als Medium dafür verwendet werden. Sie könnten Herausgeber haben, Sie könnten Abonnenten haben und sie könnten einige Nachrichten veröffentlichen. Abonnenten, die bei diesen, sagen wir, Kunden registriert sind, können tatsächlich diese erhalten, um diese Daten von denen zu erhalten NCache In diesem Fall.

    Ein typisches Beispiel wäre also eine Gruppenchat-Anwendung. Vielleicht haben Sie Mitglieder der Gruppe, die alle mit demselben Cache verbunden sind, sie befinden sich tatsächlich in einem Gruppenchat. Eines der Mitglieder postet eine Nachricht, alle anderen Mitglieder dieser Gruppe erhalten eine Benachrichtigung über diese Daten, dass sie hinzugefügt wurden. Dies ist also nur ein grundlegendes Beispiel, und dann haben wir auch noch Benachrichtigungen und kontinuierliche Abfragen.

Also, das waren die Dinge, die NCache Ihnen tatsächlich bietet und was von den meisten unserer Kunden grundsätzlich genutzt wird.

NCache Architektur

Reden wir eigentlich über die NCache Architektur jetzt. Lassen Sie uns erklären, wie das funktioniert? Also im Grunde genommen NCache ist eine 100% Peer-to-Peer-Architektur. Es gibt keinen Single Point of Failure und es gibt keine Master-Slave- oder Mehrheitsregel oder ein ähnliches Konzept darin NCache. Server können spontan hinzugefügt und entfernt werden. Der Cache muss nicht angehalten werden und würde weiterhin problemlos funktionieren. Selbst in dem Fall, dass, wenn einer der Server ausfällt, im Grunde in einem unvorhergesehenen Szenario, der Cluster nicht ausfällt, fällt nicht der gesamte Cluster aus. Es startet die Wiederherstellungslogik, zwischen den Servern um redisGeben Sie diese Daten weiter oder holen Sie sich die Daten von einer der Sicherungen, und auf der Clientseite führen die Clients tatsächlich ein Failover ihrer Verbindungen zu den verbleibenden Servern im Cluster durch.

Dynamischer Cache-Cluster

Wenn Sie dies verwenden, gehen die Daten tatsächlich nicht verloren, und die Clients, deren Verbindungen tatsächlich hergestellt werden, führen ein Failover zu den anderen Servern durch. Sie stellen also weiterhin Anfragen, auch wenn einer der Server ausgefallen ist. Solange Sie also einen Server in Betrieb haben, wird Ihre Anfrage bearbeitet.

All diese Änderungen, all diese Konfigurationsänderungen, die Server hinzufügen oder für unvorhergesehene Szenarien spontan entfernen, werden tatsächlich im gesamten Cluster verbreitet. Alle diese Konfigurationen sind also tatsächlich dynamisch. Jedes Update innerhalb des Clusters und in Bezug auf die Konfiguration wird auf alle im Cluster vorhandenen Server abgebildet, und die Clients wissen automatisch auch davon.

NCache Systemanforderungen

Cache-Server

Reden wir darüber NCache System Anforderungen. Also, im Allgemeinen in Bezug auf, sagen wir, wenn Sie über Kerne sprechen, je mehr desto besser. Aber im Allgemeinen empfehlen wir mehr als 8 Kerne. Die wichtigsten drei Dinge, die NCache verwendet, ist CPU, Netzwerkressourcen und Arbeitsspeicher. Die CPU wird im Wesentlichen verwendet, um die eingehenden Anforderungen zu verarbeiten, oder wenn es serverseitigen Code gibt, der für diese Art von Operationen konfiguriert wurde, wird die CPU verwendet. Zweitens wird der RAM nur zur Speicherung verwendet, und möglicherweise ist ein gewisser Overhead damit verbunden, nachdem die Daten gespeichert wurden, und in den Netzwerkressourcen werden verwendet, um die Kommunikation aufrechtzuerhalten. Beispielsweise von Server-zu-Server-Kommunikation und dann von Client-zu-Server-Kommunikation. Sie haben also diese beiden Optionen und dann sind die empfohlenen Windows-Server 2012, 2016. Die einzige Voraussetzung für NCache is .NET framework, andernfalls wird es in allen Windows-Umgebungen unterstützt.

Remote Clients

In Bezug auf die remote clients, die einzige Voraussetzung ist .NET 4.0 oder höher und Ihr Client wird tatsächlich unterstützt. Du kannst haben NCache auf diesen Servern.

Einrichtungsumgebung

Also, jetzt, wo wir über die verschiedenen Dinge gesprochen haben, die grundlegende, wissen Sie, die Einführung in Bezug auf NCache, lassen Sie uns darüber sprechen, wie wir die Umgebung einrichten können. Wann immer wir also Kunden haben, die unser Produkt bewerten, geben wir ihnen das, was wir ihnen sagen, in fünf Schritten, damit sie arbeiten können NCache. Zuerst lädt man eine neue Kopie der herunter NCache Enterprise von der Website und zweitens zu installieren NCache in deiner Umgebung. ich habe NCache bereits auf zwei meiner Rechner installiert. Sie sind eigentlich Remote-Boxen demo1 und demo2. Und auf diesen Boxen installiere ich sie einmal NCache, bekomme ich ein Verwaltungstool von NCache namens NCache Manager. Mit diesem Tool kann ich tatsächlich Caches erstellen, konfigurieren und verschiedene Operationen und sogar ausführen Überwachung ist an diesem Fall beteiligt.

Erstellen Sie einen Cache durch NCache Geschäftsführer

Also, lass uns weitermachen und die öffnen NCache Manager hier. Ich muss nur suchen NCache und es kommt automatisch. Wenn Sie es also öffnen, ist dies die Ansicht, die Sie erhalten. Also, was wir jetzt tun müssen, ist, wir müssen einen neuen geclusterten Cache erstellen. Klicken Sie dazu mit der rechten Maustaste auf die „Clustered Caches“ und dann auf „Create New Clustered Cache“.

NCache Geschäftsführer

Also, hier muss ich ihm einen Namen geben. Ich werde fortfahren und ihm einen Namen "Democache" geben. Alle Caches müssen benannt werden. Werde das einfach behalten. Ich klicke auf Weiter.

Demo-Cache

Dies sind die vier Topologien, die von angeboten werden NCache Ich werde „Partitionierte Replik“ ausgewählt lassen, weil es die am meisten empfohlene und beliebteste unter all unseren Kunden ist. Es ist sehr skalierbar, sehr zuverlässig.

Partitioniertes Replikat

Dies ist die Replikationsstrategie zwischen der aktiven Partition und der Sicherungspartition im Fall einer partitionierten Reproduktion. Ich werde es bei Async behalten, da es schneller ist.

Replikationsstrategie

Hier gebe ich diese Server an, die diesen geclusterten Cache hosten werden. Also, hier werde ich demo1 und demo2 spezifizieren. Dies sind die beiden Felder, die ich habe, 107 und 108, und klicken Sie auf Weiter.

Geben Sie Server an

Dies ist der Cluster-Port, über den der Cluster kommuniziert. Es wird automatisch abgeholt.

TCP-Parameter

Dies ist die Größe, die auf jeder Box konfiguriert ist. Es wird also eine Gesamtgröße von 2 GB geben, eine auf Server1 und eine auf Server2.

Speichergröße

Dies sind einige erweiterte Optionen. Wenn Sie ein Szenario haben, in dem der Cache voll wird, kann der Cache möglicherweise automatisch Elemente aus dem Cache entfernen. Wenn es sich um vertrauliche Daten handelt, können Sie die Räumung tatsächlich deaktivieren, sodass die Elemente nicht von selbst entfernt werden, und Sie haben dann auch die Möglichkeit, den Cache automatisch zu starten, sobald er gestartet wird, sobald die Maschine startet. Also klicke ich einfach auf Fertig stellen und das erstellt tatsächlich meinen Cache.

Erweiterte Optionen

So einfach war es also, einen Cache zu erstellen. Ich habe den Cache jetzt konfiguriert. Wenn ich einfach mit der linken Maustaste auf den Cache-Namen klicke, werden all diese verschiedenen Registerkarten hier geöffnet, über die ich bei Bedarf an dieser Stelle weitere Änderungen oder Konfigurationen vornehmen kann.

Dashboard

Als nächstes werde ich also meine persönliche Box als hinzufügen remote client. Klicken Sie dazu einfach mit der rechten Maustaste auf den Cache-Namen und klicken Sie auf Knoten hinzufügen.

Knoten hinzufügen

Und hier gebe ich nur die IP meiner persönlichen Box an, das ist 102 und jetzt wird sie hinzugefügt.

Box-IP

Also, sobald es hinzugefügt ist, klicke ich einfach mit der rechten Maustaste auf den Cache-Namen und klicke auf Start. Also, jetzt wird der Cache auf 107 und 108 Box gestartet. Sobald es läuft, öffne ich die Statistiken und zeige Ihnen auch ein Überwachungstool von NCache namens NCache Monitor, der sehr tief ins Detail geht, um grundsätzlich verschiedene Dinge zu überprüfen, die im Cache vor sich gehen. Also, der Cache ist jetzt in Betrieb. Um die Statistiken zu öffnen, klicke einfach mit der rechten Maustaste auf den Cache-Namen und klicke auf Statistiken.

Statistiken öffnen

Das wird also all diese Statistiken für diese beiden Boxen 107 und 108 abrufen.

Statistiken

Also, jetzt lasst uns das tatsächlich öffnen Überwachungstool von NCache. Um das zu öffnen, klicken Sie mit der rechten Maustaste auf den Cache-Namen und klicken Sie auf Cluster überwachen.

Öffnen Sie den Monitor-Cluster

Das NCache Monitor wird nun geöffnet, wodurch wir zwei vorkonfigurierte Dashboards erhalten, nämlich das Server-Dashboard und das Dashboard für die Berichtsansicht. Wenn Sie dies verwenden, können Sie sich also eine ziemlich gute Vorstellung davon machen, was im Cache vor sich geht. Wenn wir hier sehen, ist dies zum Beispiel die Cache-Größe, die gerade verbraucht wird, und dann ist dies die Grafik der Anforderungen pro Sekunde. Es gibt Ihnen also viele verschiedene Details, die derzeit im Cache vor sich gehen, und Sie können diese Details verwenden, um vielleicht tatsächlich einige Szenarien zu debuggen oder auf den Grund zu gehen, wenn Sie irgendwelche Probleme sehen.

Server-Dashboard

Also, ich werde nur schnell auf das zurückkommen NCache Manager und hier können Sie auch Ihr eigenes benutzerdefiniertes Dashboard erstellen. Wenn Sie sich bestimmte Dinge ansehen möchten, die nicht hier vorkonfiguriert sind, können Sie dies auch tun. Sie haben hier Steuerelemente unter der Kategorie Cache-Server und dann auch unter der Kategorie Cache-Clients. Sie können auch Ihre eigenen benutzerdefinierten Dashboards erstellen, um nur die Dinge zu sehen, die Sie tatsächlich interessieren. Kommen wir also zurück zu den NCache Manager. Alles zeigt Null an, weil wir keine Anwendungen haben, die gegen diesen Cache laufen.

Stress simulieren und Cache-Statistiken überwachen

Testen wir es also schnell, indem wir eine Anwendung ausführen. Also, ich habe die PowerShell hier geöffnet. Klären wir es tatsächlich auf. Lassen Sie uns tatsächlich ein neues eröffnen. Okay, also, ich habe eine PowerShell, die sich öffnet. Also, was ich tun werde, ist, ich werde die Stress-Tool-Anwendung ausführen, um meinem geclusterten Cache eine Dummy-Last hinzuzufügen, um eine Aktivität zu simulieren. Mit dieser Aktivität haben wir sie also auch durch die überwacht NCache Manager, sowie durch die NCache Monitor, sehen Sie, wie das für uns funktioniert.

Führen Sie also das Stresstest-Tool aus. Ich muss es nochmal eingeben. Lassen Sie uns zuerst den Prozess beenden. Wenn Sie in der Zwischenzeit Fragen haben, können Sie diese gerne auf der Registerkarte „Fragen und Antworten“ posten. Kal, ich glaube nicht, dass wir im Moment irgendwelche Fragen haben. In Ordnung, perfekt. Irgendwie pflücken sie nicht. Ich bin wieder da. Tut mir leid, das wollte ich gerade sagen, Leute, diese Sitzung wird aufgezeichnet. Wenn Sie also aus irgendeinem Grund nicht an der gesamten Sitzung teilnehmen können oder den ersten Teil verpasst haben, können Sie diese Aufzeichnung überprüfen. Ich glaube, wir werden es später in der Woche oder Anfang nächster Woche veröffentlichen. Sie können also fortfahren und die gesamte Sitzung erneut durchlaufen.

Also, was ich gerade mache, ist, dass ich tatsächlich direkt in dieses Verzeichnis gegangen bin, um dort die Eingabeaufforderung zu öffnen und das Stresstest-Tool auszuführen. Okay, mal sehen, ja, es ist abgeholt. Ich werde einfach weitermachen und ihm den Namen stresstesttool.exe und dann Demo-Cache geben. Was es jetzt tun würde, ist, es wird dem Cache einige Dummy-Daten hinzufügen. Wenn wir hierher zurückkommen, sollten wir jetzt einige Aktivitäten auf diesen beiden Kisten sehen. Da ist es. Wir sehen also, dass auf diesen beiden Feldern 107 und 108 eine Aktivität auftritt.

Aktivität

In der von uns gewählten Topologie partitioniertes Replikat, hat jeder Client eine Verbindung zu allen im Cluster vorhandenen Serverknoten, weshalb er sich mit beiden Servern verbindet. Wenn wir zum kommen NCache Monitor können wir sehen, dass ein Client mit 108 und einer mit 107 verbunden ist. Wenn Sie sich den ansehen NCache Request-pro-Sekunde-Diagramm, können wir sehen, dass einige Aktivitäten stattfinden.

NCache Aktivität überwachen

Dieser Test diente also nur dazu, zu überprüfen, ob alles in Ordnung ist, der Cache richtig konfiguriert ist, alles einwandfrei funktioniert und das getestet wurde. Also werde ich die Stresstest-Tool-Anwendung stoppen. Kommen wir nun auf die zurück NCache Manager. Lassen Sie uns fortfahren und diesen Cache leeren, damit für unseren weiteren Test keine Elemente im Cache vorhanden sind. Alles wird also bei 0 angezeigt. Kommen wir zurück zur Präsentation. So, unsere Umgebung ist jetzt eingerichtet und alles ist bereit. Was wir jetzt tun können, ist, wir können mit den Folien fortfahren.

NCache Tricks – Leistungsoptimierung

Lassen Sie uns also über die sechs Möglichkeiten sprechen, die wir verwenden werden, um die Leistung nacheinander zu optimieren. Nur um es zu wiederholen NCache, der Cluster-Cache ist bereits ein Leistungsmerkmal, das Ihre Leistung innerhalb Ihrer Anwendung verbessert, Ihre Datenbankfahrten reduziert werden und Sie dann Daten aus einer schnelleren Quelle finden, die ein verteilter Cache im Arbeitsspeicher ist. Aber diese Funktionen werden Ihnen tatsächlich helfen, diese Leistung je nach Ihrem spezifischen Anwendungsfall weiter zu steigern.

  • Client-Cache

    Also, das erste, über das wir sprechen werden, ist Client-Cache. Was es tut, ist, dass es im Grunde Ihre Fahrten zum eigentlichen Cluster-Cache reduziert.

  • Massenanrufe

    Dann werden wir über Massenaufrufe sprechen, die Fahrten zum Cache so reduzieren, dass Sie nur eine einzige Operation ausführen und mit nur einem einzigen Aufruf und mehreren Operationen im Gegenzug auf der Serverseite verarbeitet werden.

  • Kompression

    Dann hast du auch Werkzeugen. Wenn Ihre Objektgröße größer ist, können Sie dies möglicherweise verwenden, um die Gesamtgröße des Objekts zu reduzieren, das hinzugefügt oder abgerufen wird. Im Allgemeinen empfehlen wir, das Objekt in eine kleinere Größe zu zerlegen, aber falls dies nicht möglich ist, können Sie die Komprimierungsfunktion verwenden.

  • Asynchrone Updates

    Wir haben auch asynchrone Updates. Wenn Sie diese verwenden, wartet Ihre Anwendung also im Grunde nicht auf die Ausführung der Operation. Vielleicht können Sie dafür eine separate Aufgabe erstellen und sich dann leisten, dass die Daten selbst hinzugefügt werden, und wenn es irgendeine Art von Aktualisierung gibt, die Sie zurückbekommen möchten, wurden die Daten möglicherweise hinzugefügt oder nicht oder falls vorhanden war ein Problem, können Sie sich einfach für einen Rückruf dagegen anmelden.

  • Kompakte Serialisierung

    Der nächste ist Kompakte Serialisierung. Wenn Sie also beispielsweise benutzerdefinierte Objekte, Domänenobjekte haben, die nicht als serialisierbar markiert sind und sich in einem verteilten Cache befinden, müssen alle Objekte serialisiert werden, da sie vollständig außerhalb des Prozesses liegen. Wenn Sie also dieses Szenario haben, in dem Sie sich Codeänderungen in Ihrer Umgebung nicht leisten können, aber auch Ihre benutzerdefinierten Objekte oder Domänenobjekte serialisierbar haben müssen, können Sie die kompakte Serialisierungsfunktion von verwenden NCache um sie alle als serialisierbar zu markieren und sie dann zu verwenden, können Sie sie tatsächlich weiter verwenden NCache in deiner Umgebung. Es ist eine Option ohne Codeänderung. Nur etwas, das Sie aus der GUI herausfinden können, und Sie haben alles eingerichtet.

  • Zwei Netzwerkkarten

    Und dann endlich haben wir die zwei Netzwerkkarten Merkmal. Wenn Sie also den Datenverkehr von der Client-zu-Server-Kommunikation und der Server-zu-Server-Kommunikation trennen möchten, separate Netzwerkressourcen, können Sie das tatsächlich tun NCache. Dies ist nur in dem Fall der Fall, in dem Ihre, wissen Sie, Ihre Netzwerkressourcen tatsächlich durch den übermäßig eingehenden Datenverkehr erstickt sind. Nur in diesen Szenarien würden wir dies empfehlen. Wenn Sie jedoch nicht sehen, dass diese Ressourcen zu diesem Zeitpunkt ausgeschöpft sind, können Sie tatsächlich dieselbe Netzwerkschnittstellenkarte für beide Arten der Kommunikation verwenden.

Demo

Lassen Sie uns also unseren ersten Test durchführen, bei dem wir Elemente in den Cache hinzufügen und Elemente aus dem Cache abrufen werden, und wir werden dies als Grundlage für die grundlegende API verwenden, die wir haben. Auch hier ist es bereits optimiert, aber wir werden es als Basis verwenden und verschiedene Funktionen darauf ausführen und sehen, wie sie für uns funktionieren.

Also, als erstes, lasst uns eigentlich auf dieses Beispiel hier zurückkommen. Dies ist also ein Beispiel, das ich tatsächlich auch für diesen Code bereitstellen kann. Dies ist, was wir verwenden werden, um Ihnen die Grundlinie zu zeigen, die wir abdecken werden. Wir befinden uns also in Test 1. In Test 1 fügen wir im Grunde genommen 5,000 Elemente mit einer Größe von 100 KB in den Cache ein und holen diese Elemente dann aus dem Cache. Dieser Test wird uns nur die Zeit verschaffen, die für diesen gesamten Code benötigt wird, dieser Abrufteil wird dauern. In diesem Abrufteil wird die Schleife tatsächlich 5000 Mal ausgeführt, da 5000 Elemente abgerufen werden müssen, und in den späteren Folien werden wir behandeln, wie verschiedene Funktionen in diesem Fall tatsächlich helfen können.

...
try
    {
        cache = NCache.InitializeCache(args[0]);
        cache.Clear();

        Console.WriteLine("TEST 1\n");
        Console.WriteLine("Press anything to add " + objectsCount + " items (100kb Object)");
        Console.ReadKey();
        Console.WriteLine("Adding items now");

        for (int i = 0; i < objectsCount; i++)
            {
                cache.Insert(key + i, obj1);
            }

        Console.WriteLine(objectsCount + " items added. Press any key to retrieve them.");
        Console.ReadKey();
        Console.WriteLine("\nRetrieving " + objectsCount + " items now");
        datetime1 = DateTime.Now;
        ...

Also, lassen Sie uns das tatsächlich ausführen. Lassen Sie uns zuerst überprüfen, ob alles richtig eingestellt ist. Ja, Democache-Test 1 und ich werde das ausführen. Auch dies ist Test Nummer eins, nur um eine Grundlinie zu bekommen, wie die Zahlen aussehen. Ich werde auf Enter drücken. Es wird anfangen, Elemente in den Cache hinzuzufügen. Wenn wir auf die zurückkommen NCache Manager, das ist hier, wir sehen, dass einige Aktivitäten im Gange sind. Es fügt also Elemente in den Cache ein. Da es zwei Server in der Partition der Replikattopologie gibt, werden die Daten auf diesen beiden Servern hinzugefügt, auf Server 1, also 107, und auch auf Server 2. Die Daten werden also geteilt. Insgesamt werden insgesamt 5,000 Elemente im Cache vorhanden sein.

Lassen Sie uns in diesem Fall also warten, bis es abgeschlossen ist, und sobald es abgeschlossen ist, können wir diese Zahl tatsächlich notieren und sie für unseren Vergleich für die späteren Funktionen verwenden, mit denen wir testen werden. Es ist fast fertig, wir haben bereits über 4,000 Artikel hinzugefügt.

Artikel hinzugefügt

Denken Sie daran, dass es sich um ein 100-KB-Objekt handelt, was eine ziemlich große Größe zum Testen ist, aber das war nur, um Ihnen zu zeigen, wie verschiedene Dinge aussehen. Ich denke, sie werden alle hinzugefügt, ja, sie werden alle hinzugefügt. Der Zähler hat tatsächlich aufgehört. Wenn wir auf die Eingabetaste klicken, hat es gedauert, wenn wir auf die Eingabetaste klicken, werden diese Elemente aus dem Cache abgerufen, und wenn Sie hierher zurückkehren, wird die Zeit angezeigt, sobald dies der Fall ist. Wir können also sehen, dass die Abrufe pro Sekunde tatsächlich steigen und auch die Anfragen pro Sekunde für diese beiden Server steigen. Das zeigt Ihnen also, dass einige Aktivitäten im Gange sind, um diese Elemente aus dem Cache zu holen. Sobald alle 5000 Elemente aus dem Cache abgerufen wurden, wird der Timer auf dem Bildschirm angezeigt und mithilfe dieses Timers werden wir ihn als Basis für unsere kommenden Tests festlegen.

Client-Cache (in der Nähe von Cache)

Also, lasst uns tatsächlich über das nächste sprechen. Das nächste, das eigentliche Feature, das wir zuerst verwenden werden, ist der Client-Cache. Lassen Sie mich also erklären, was ein Client-Cache ist. Ein Client-Cache ist im Grunde ein lokaler Cache, der auf den Client-Boxen und diesen Client-Boxen vorhanden ist. Er reduziert Ihre Fahrten zum Cluster-Cache. Der Client-Cache ist eine Teilmenge der Cluster-Cache-Daten. Es behält eine lokale Kopie der Cluster-Cache-Daten bei sich. Es bleibt mit dem Cluster-Cache synchron.

Client-Cache

Daher werden alle am Client-Cache durchgeführten Aktualisierungen an den Cluster-Cache weitergegeben und umgekehrt. Es bleibt also mit dem geclusterten Cache auf dem neuesten Stand, und was es tut, ist, wenn Ihre Anwendung versucht, einige Elemente aus dem Cache abzurufen, stellt es bereit, wenn diese Elemente hier lokal vorhanden sind, teilt es einfach diese Daten oder diese Elemente direkt dort und dann von einer lokalen Quelle.

Lassen Sie uns tatsächlich zurück zu diesem springen. Okay, dieser Vorgang dauerte etwa 45 Sekunden. Sobald wir also den Client-Cache verwenden, können wir tatsächlich sehen, wie er sich in diesem Szenario auswirkt. Ich klicke auf Enter. Wir werden uns das merken, diese Zahl, die 45 Sekunden lang ist.

Zeit für die Operation

Wir sprachen also bereits über den Client-Cache. Wie ich bereits erwähnt habe, gibt es im Grunde zwei Möglichkeiten, die Sie haben. Sie können den Client-Cache entweder als InProc oder OutProc ausführen, das können Sie sich vorstellen. Im Fall von OutProc wird ein separater Prozess ausgeführt, der verbleiben wird, der mit dem geclusterten Cache synchron bleiben wird.

Der OutProc-Prozess wird im Allgemeinen empfohlen, wenn Sie ein Webgartenszenario haben, in dem Sie mehrere Anwendungen oder mehrere Instanzen der Anwendungen auf derselben Box ausführen. Sie müssten sich also mit einer gemeinsamen Ressource befassen, nämlich dem Client-Cache, einem separaten Prozess, der ausgeführt wird. Die zweite Option ist ein InProc-Cache, der für den Fall empfohlen wird, wenn Sie ein Webfarm-Szenario haben, in dem normalerweise eine oder zwei Anwendungen auf derselben Box ausgeführt werden.

Im ersten Fall befindet sich der Client-Cache im Anwendungsprozess. Da dies Teil desselben Prozesses ist, werden in diesem Fall tatsächlich viele Gemeinkosten entfernt. In diesem Fall werden der Overhead der Serialisierung, der Overhead der Kommunikation zwischen Prozessen, alle diese tatsächlich entfernt und sie erhöhen die Leistung erheblich.

Im Fall von OutProc cachen Sie, dass die Anwendung diese Daten aus einer lokalen Quelle erhält, die auf derselben Box vorhanden ist. Eine Netzreise wird also tatsächlich reduziert. Das erhöht die Leistung also ziemlich stark, und das können wir gerade jetzt sehen.

In diesem Fall werden wir also einen Client-Cache erstellen, zuerst als OutProc und dann als InProc, und wir werden sehen, wie die Zahlen aussehen. Und im aktuellen Szenario, wenn Sie sich erinnern, dauerte es mit normalen Abrufen 45 Sekunden.

Kal, ich habe hier eine Frage und die Frage ist, ob alle Funktionen, über die wir sprechen, Teil desselben Produkts sind? Also, ich schätze, sie reden über Editionen.

Ja, einige davon sind nur im Unternehmen verfügbar, aber ich kann sie teilen Editionen Vergleich Dokument, das tatsächlich jedes Detail für alle abdeckt. Vielleicht würde Ihnen das tatsächlich genau die Details liefern, nach denen Sie suchen.

Und ich werde diese Gelegenheit nutzen und alle anderen fragen, gibt es im Moment irgendwelche Fragen? Nein, wir haben keine Fragen, also rede bitte weiter.

Out-Proc-Client-Cache

Also werde ich fortfahren und den Inhalt des Caches löschen. Sie sind jetzt fertig. Also werde ich jetzt fortfahren und einen Client-Cache erstellen. Also im NCache Manager, Sie haben den Client-Cache genau hier geschrieben. Klicken Sie einfach mit der rechten Maustaste hier und klicken Sie auf Neuen Client-Cache erstellen. Also, hier werde ich den Namen beibehalten. Es ist auf Client-Cache eingestellt. Alles standardmäßig beibehalten. Als nächstes ist es jetzt auf OutProc eingestellt, aber wir werden es später in InProc ändern. Klicken Sie auf Weiter. Die Größe ist auf einen Gig festgelegt. Ich behalte es dabei. Ich kann das tatsächlich ändern, was ich will, und einige weitere erweiterte Einstellungen, die auch vorhanden waren, als wir einen Cluster-Cache erstellten. Also, jetzt ist der Client-Cache tatsächlich auf meiner persönlichen Box konfiguriert, also 102.

Client-Cache erstellen

Eine schnelle Möglichkeit, dies zu überprüfen, besteht darin, nach der Installation einfach das List-Caches-Tool auszuführen, das sich in meiner persönlichen Box befindet NCache und wenn ich dieses Tool verwende, weiß ich tatsächlich, welche NCaches laufen derzeit auf meiner persönlichen Box. Also, wenn ich hier hochkomme, lassen Sie uns tatsächlich Listen-Caches ausführen. Okay, es zeigt die Caches an, die auf meiner persönlichen Box vorhanden sind, das ist 102. Ich denke, im Hintergrund versucht es immer noch, es aus irgendeinem Grund zu aktivieren. Ja, scheint dort aktiviert zu sein. Wenn Sie also hierher kommen, können wir den Client-Cache sehen. Der Client-Cache ist also hier ein lokaler Cache und läuft. Es läuft also zu diesem Zeitpunkt auf meiner persönlichen Box und wir können es jetzt tatsächlich verwenden.

Laufende Caches auflisten

Also, bevor ich wirklich fortfahre, na und NCache tut, es veröffentlicht diese Zähler, die jetzt sogar auf dem Bildschirm angezeigt werden. Sie können also über den Windows-Leistungsmonitor angezeigt werden. Was ich tun werde, ist, ich werde den Windows-Leistungsmonitor öffnen und die Zähler für den Client-Cache öffnen, den ich verwenden werde.

Also werde ich von meiner persönlichen Box aus nach einem PerfMon suchen, der genau hier die Leistung überwacht, und mit diesem werde ich das öffnen NCache Kategorie und suchen Sie nach meinem spezifischen Cache, der Client-Cache war, und öffnen Sie die Zähler für diese. Also, es ist jetzt geöffnet und ich werde einen brandneuen Leistungsmonitor öffnen, um nach der Kategorie von zu suchen NCache. Da ist es und hier habe ich den Client-Cache wie hier vorhanden. Ich klicke auf Hinzufügen und dann auf OK. Ich werde die Ansicht in die Berichtsansicht ändern. Also, das sind jetzt die Zähler. Alles, was angezeigt wird, ist im Moment 0, weil es nicht verwendet wird. Es ist ein separater Prozess, der ausgeführt wird, weil wir ihn auf OutProc gesetzt haben.

Mal sehen, wie die Zahlen jetzt aus meiner persönlichen Box aussehen. Ich werde die Anwendung ausführen, derselbe Code, ich nehme keinerlei Codeänderungen vor. Die Client-Cache-Funktionen sind keine Codeänderung, wie ich bereits erwähnt habe. Sie müssen sie nur aktivieren oder deaktivieren, je nachdem, welche Sie bevorzugen, und dann wird sie automatisch übernommen. Wenn ich also auf die Startschaltfläche klicke, der gleiche Code, alles gleich, sogar der gleiche Test, werden diese Elemente hinzugefügt, sobald ich auf die Eingabetaste klicke. Okay, sobald ich auf die Eingabetaste geklickt habe, wurden diese Elemente hinzugefügt. Wenn Sie zurückkommen NCache Manager sehen wir, dass die Elemente im geclusterten Cache hinzugefügt werden. Wenn Sie die öffnen NCache Monitor, das ist dieser, ja, dieser, wir sehen, dass hier auch ein bisschen Aktivität vor sich geht, und das habe ich anfangs erklärt. Wenn Sie den Client-Cache konfiguriert haben, wird er verwendet, und wenn Sie Elemente zum Cache hinzufügen, erhält der Client-Cache ebenfalls eine Kopie und der Cluster-Cache erhält ebenfalls eine Kopie.

PerfMo

Dieser Anwendungsfall wird im Allgemeinen empfohlen, wenn Sie beispielsweise ein Lese-zu-Schreib-Verhältnis von 80 % bis 20 % oder sogar ein Lese-zu-Schreib-Verhältnis von 70 % bis 30 % haben. Dies wird im Allgemeinen in Szenarien empfohlen, in denen Sie viele Lesevorgänge haben, möglicherweise einige Referenzdaten aus statischen Daten, die Sie in Ihrer Umgebung haben, und in denen Sie große Leistungsverbesserungen sehen würden, wenn Sie einen Clientcache aktiviert haben.

Denken Sie also daran, dass der erste Test, bei dem nur die Get-API in einer Schleife ausgeführt wurde, 45 Sekunden lang in der Lage war, diese Elemente aus dem Cache zu holen. Aber wenn Sie jetzt diesen Client-Cache verwenden, würde er all diese Daten in einer lokalen Quelle finden, in einem separaten Prozess, der auf derselben Box läuft, und wir werden sehen, wie das für uns funktioniert. Wenn wir also genau hier nach unten scrollen, können wir sehen, dass dies die Anzahl des Client-Cache ist. Diese Zahl muss auf 5,000 steigen, da es sich um eine einzelne Quelle handelt. Alle 5,000 Elemente werden also hier im Cluster vorhanden sein und sie werden auf alle Serverknoten verteilt. Wir warten also nur darauf, dass diese Elemente auf 5,000 steigen, und führen dann den zweiten Teil des Tests aus, in dem diese Elemente aus dem Cluster-Cache abgerufen werden.

Eine weitere zu beachtende Sache wäre also, dass die Aufrufe nach dem Abrufen der Elemente aus dem Cache nicht an den Clustered-Cache gehen würden, sondern alle vom Client-Cache abgefangen würden, der derzeit lokal ist, und das werde ich zeigen Sie von diesen Zählern, genau hier. Diese Zähler zeigen also die Client-Cache-Zähler an, aber wenn Sie dazu kommen, zeigen diese die serverseitigen Zähler für den gruppierten Cache an. Lassen Sie uns hier auf die Eingabetaste klicken und es wird damit beginnen, diese Elemente aus dem Cache abzurufen. Also, nur um Ihnen zu zeigen, dass hier keine Karte verschoben wird. Hier kommt also kein Anruf. Wenn Sie dieses öffnen, können wir sehen, dass diese Aktivität hier vor sich geht. Es finden bestimmte Abrufe statt. Der Client-Cache wird also derzeit stark genutzt, und das ist der springende Punkt bei einem Client-Cache in Szenarien, in denen Sie mehr Lese- als Schreibvorgänge haben. Nach ein paar Sekunden sollten wir hier also die Ergebnisse sehen, wie lange es gedauert hat, Ihnen 5,000 Elemente mit einer Größe von 100 KB aus dem Client-Cache-Szenario anzuzeigen. Hier können Sie also sehen, dass es von 45 Sekunden auf 33 Sekunden gesunken ist, falls Sie einen OutProc-Client-Cache in Ihrer Umgebung aktiviert haben.

Zeit reduziert

Sie können also sehen, dass es eine große Verbesserung ist. Es sind mehr als 10 Sekunden, die Sie sehen können, und in Bezug auf Anwendungen ist das eine große Zeit. Es hat uns also in diesem Fall eine große Verbesserung gezeigt.

In-Proc-Client-Cache

Also werde ich jetzt fortfahren und einen In-Proc-Client-Cache erstellen und diesen In-Proc-Client-Cache verwenden, um zu sehen, wie das für uns im Vergleich zu diesen 45 Sekunden für den eigentlichen Test, 33 Sekunden für uns, abschneidet der Client-Cache-OutProc-Test. Also, zuerst werde ich fortfahren und diesen Cache entfernen. Jetzt ist es entfernt. Ich werde einen neuen Cache erstellen. Auch hier tippe ich einfach InProc daneben ein und klicke auf Weiter und behalte die Isolationsstufe auf InProc, behalte alles auf Standard und klicke auf Fertig stellen. Also, jetzt wird dies auf meiner persönlichen Box erstellt und ich werde genau den gleichen Test durchführen. Lassen Sie uns zuerst die Daten im Cache löschen.

Also, jetzt dieselben Tests, dieselben Argumente, und ich habe gerade erst damit begonnen. Also, jetzt wird es noch einmal genau den gleichen Test durchführen. 5000 Elemente in den Cache mit einer Größe von 100 KB und dann werden diese Elemente mithilfe des Client-InProc-Client-Cache abgerufen. Das Konzept bleibt genau dasselbe. Sobald Ihre Anwendung Elemente in den Cache hinzufügt, würden Sie sie auch im Client-Cache hinzufügen, der im selben Prozess vorhanden ist, da wir ihn jetzt als In-Proc ausführen. Es fügt diese Elemente also auch dem Client-Cache hinzu und es fügt auch dem Clustered-Cache hinzu. Sobald dies der Fall ist, klicke ich jetzt auf die Eingabetaste. Sobald es also diese Elemente abgerufen hat, wird es alle diese Elemente innerhalb des Lokals finden, und zwar innerhalb desselben Prozesses.

Also, jetzt ohne Overhead wie Interprozesskommunikation und Serialisierung, Deserialisierung, all das wird jetzt vollständig entfernt. Es würde die Daten direkt an Ort und Stelle aus einer lokalen Quelle abrufen, und wir würden sehen, wie gut der Client-Cache tatsächlich mit einem InProc-Modus für dieses spezielle Szenario arbeitet. Also nur darauf warten, dass die Artikel hinzugefügt werden. Wenn wir hierher zurückkommen, sollten wir einige Zähler sehen, die auf und ab gehen. Das können wir auf jeden Fall sehen.

Cache-Statistiken

Also, Jungs, wenn es irgendwelche Fragen gibt, lassen Sie es mich bitte wissen. Sam behält die Registerkarte des Fragendocks im Auge. Er wird mich informieren, wenn es irgendwelche Fragen gibt.

Das nächste, was ich bereits in der Liste erwähnt habe, sind Massenoperationen. Wir werden also nur mit einem einzigen testen, der die Massen-API verwendet. Aber es gibt verschiedene Konzepte für verschiedene Dinge, die genauso funktionieren wie die Massenoperationen, und wir werden sie alle in dieser Präsentation theoretisch behandeln. Mal sehen, wie viele Elemente hinzugefügt werden. So wurden bereits über 3000 Artikel hinzugefügt. Wir warten also nur darauf, dass die vollständige 5000-Markierung erreicht wird, und danach werden wir sehen, wie das funktioniert. Okay, blieb beim ersten. Also warte ich nur darauf, dass die Operationen im Rücken durchgeführt werden. In der Zwischenzeit spreche ich hier nur von der ersten Sache im Fall von Massenoperationen.

Das Kernkonzept des Massenvorgangs besteht also darin, die tatsächliche Anzahl der Aufrufe zu beschränken, die in den geclusterten Cache gehen. Anstatt also all diese Dinge innerhalb einer Schleife auszuführen, wie wir es bereits getan haben, können wir dieselben Aufrufe tatsächlich als Teil einer einzigen Operation ausführen. Es können also eine einzelne Operation an den Clustered-Cache gesendet und dann mehrere Operationen dafür ausgeführt werden. Wenn Sie also im Falle einer Masse teilen, müssen Sie die Schlüssel kennen. Sie haben also beispielsweise nur die Schlüssel und die eigentlichen Objekte, die Sie hinzufügen möchten, mit einem einzigen Aufruf bereitgestellt, und mit diesem werden alle diese Elemente tatsächlich in den Clustered-Cache im Hintergrund hinzugefügt.

Also, ich denke, sie sollten fertig sein, ja, sie sind jetzt fast fertig. Wenn wir gleich hierher zurückkommen, so kommen jetzt alle diese Gegenstände hinzu. Ich klicke auf die Eingabetaste und wir können sehen, dass alle diese Elemente jetzt abgerufen werden. Es ist sehr erstaunlich zu sehen, weil jetzt viele Overheads entfernt wurden. Es ging also extrem schnell. Wenn wir also wiederholen, was wir beim ersten Test gemacht haben, dauerte es beim Basistest 45 Sekunden, beim Client-Cache-OutProc etwa 33 Sekunden. Aber im Fall des InProc-Client-Cache ist diese ganze Zeit in diesem Fall auf 0.1 Sekunden gesunken.

Zeit reduziert

So viel Verbesserung können Sie also mit einem InProc-Client-Cache sehen, wenn Ihr Anwendungsfall dem entspricht, den wir hier gerade am Laufen haben. Das ist also eine große Verbesserung, die Sie sehen können, wenn Sie mehr Lese- und Schreibvorgänge haben.

Also klicke ich einfach auf Enter. Das kommt also in die Nähe. Ich werde diesen Client-Cache hier entfernen und tatsächlich auch aufräumen. Okay, kommen wir zurück zur Präsentation. Also, hier, also, wir haben über Massenoperationen gesprochen.

Massenabruf (schlüsselbasiert)

Im Fall von Massenoperationen ist die erste, dass Sie nach dem Hinzufügen, wenn Sie viele Elemente hinzufügen oder sogar aus dem Cache abrufen möchten, nur die Liste entsprechend und bereitstellen müssen Mit nur einem einzigen Aufruf können Sie all diese Operationen im Cache ausführen. Wenn Sie also eine größere Objektgröße haben, empfehlen wir im Allgemeinen, es in mehrere Objekte aufzuteilen und dann die Funktionen zu verwenden, die NCache bietet, sie tatsächlich zu gruppieren oder sogar abzurufen oder in den Cache hinzuzufügen. Daher kann die Massen-API in diesen Szenarien verwendet werden. Der zweite ist zum Beispiel, wenn Sie die Schlüssel dieser Elemente nicht kennen, da Bulk eine schlüsselbasierte Operation war, also müssen Sie alle Schlüssel kennen.

SQL/LINQ-Suchanfragen

Bei Suchabfragen vom Typ SQL oder LINQ können Sie grundsätzlich nach bestimmten Kriterien suchen, wenn Sie die Schlüssel nicht kennen. Wenn Sie beispielsweise Produkte im Cache hinzugefügt haben, können Sie basierend auf bestimmten Kriterien tatsächlich mehrere Produkte aus dem Cache abrufen. Nehmen wir also an, ich führe eine Abfrage mit dem Namen aus 'Produkt WÄHLEN, WO produkt.preis > 10 UND produkt.preis < 100'. Alle Produkte, die diese spezifischen Kriterien tatsächlich erfüllen und im Cache vorhanden sind, würden also tatsächlich an mich zurückgegeben. In diesem Fall habe ich also keine Schlüssel angegeben, ich habe nur mit den Kriterien angegeben, und sie wurden mir zurückgegeben.

Gruppen & Untergruppen

Als nächstes können Sie logische Sammlungen im Cache erstellen. Ich werde beide zusammen behandeln, als Gruppen, Untergruppen und dann auch Tags. Das können Sie also tun. Wenn Sie also beispielsweise Kunden und deren Bestellungen im Cache platziert haben, können Sie tatsächlich alle Bestellungen zusammen gruppieren. Da es separate Elemente im Cache gibt, können Sie auch Sammlungen behalten, aber wir empfehlen, sie aufzuschlüsseln, da Sie normalerweise, sobald Sie ein Element aus dem Cache erhalten, nicht das vollständige Objekt benötigen, sondern einen bestimmten Wert dafür benötigen. Wenn Sie es also in mehrere Objekte aufteilen, können Sie es effizienter verwenden. Mit diesen logischen Sammlungsfunktionen können Sie also grundsätzlich Elemente innerhalb des Caches gruppieren. So lassen sich alle Bestellungen eines bestimmten Kunden gruppieren und mit nur einem Anruf erledigen. Nehmen wir an, Sie können in Gruppen ein Abrufen nach Gruppe oder im Fall von Tags zum Abrufen nach Tags durchführen, nur mit der Kunden-ID versehen und alle diese im Cache vorhandenen zugehörigen Elemente würden tatsächlich an Sie zurückgegeben. Auch in diesem Fall mussten Sie die Schlüssel nicht kennen, Sie müssen nur den bestimmten Zeichenfolgenwert kennen, der eine Gruppe oder ein Tag ist, und basierend darauf wurde er Ihnen zurückgegeben, und dann unterstützt er auch parallele Abfragen.

Massenoperationen - Demo

Kommen wir also zum eigentlichen Beispiel für Massenoperationen. Also, wenn Sie zu diesem Test zurückkommen, genau hier. Dies ist der Massentest, also Test 2, und wir werden ihn tatsächlich ausführen. Lassen Sie uns zuerst damit beginnen und dann können wir uns mit den Details befassen, was es tut. Also, ich habe es gerade auf Test 2 geändert und ich habe es gestartet. Dieser Test fügt also im Grunde jetzt 10,000 Elemente mit einer Größe von 10 KB in den Cache ein. Erstens führt es nur eine grundlegende Einfügung durch, indem es diese Elemente in den Cache hinzufügt, und dann ruft es all diese Elemente ab, und es protokolliert tatsächlich auch die Zeit für Hinzufügungen und den Abrufteil.

Console.WriteLine("TEST 2\n");
Console.WriteLine("Press anything to add " + objectsCountBulk + " items (10kb Object)");
Console.ReadKey();
Console.WriteLine("Adding items now");
datetime1 = DateTime.Now;
for (int i = 0; i < objectsCountBulk; i++)
{
    cache.Insert(key + i, obj2);
}
datetime2 = DateTime.Now;
Console.WriteLine(objectsCountBulk + " items added. Time to add " + objectsCountBulk + " items in a loop: " + (datetime2 - datetime1).TotalSeconds);
Console.WriteLine("\nPress any key to retrieve them.");
Console.ReadKey();

Sobald dies erledigt ist, erhalten wir eine Grundlinie, wie viel Zeit es gedauert hat, 10,000 Elemente mit einer Größe von 10 KB in den Cache hinzuzufügen, und dann werden die Massenoperationen gestartet. Bei diesen Massenoperationen fügt es alle diese 10,000 Elemente mit demselben Aufruf in den Cache ein und ruft mit nur einem einzigen Aufruf wieder ab, wobei die Schlüsselliste und die Objektliste vordefiniert sind.

Ok, ich klicke auf Enter. Es wird damit beginnen, diese Elemente in den Cache einzufügen. Wenn wir auf die zurückkommen NCache Manager sehen wir, dass hier einige Aktivitäten im Gange sind. Diese Gegenstände werden jetzt zu diesen beiden Servern hinzugefügt, die derzeit vorhanden sind.

Massenoperationsaktivität

Selbst wenn Sie sich den Monitor-Cluster ansehen, können wir sehen, dass ein Client hier verbunden ist, ein Client dort verbunden ist, und dann sehen wir, dass in diesen Diagrammen ein wenig Aktivität vor sich geht. Wenn Sie dies verwenden, können Sie sich also eine ziemlich gute Vorstellung davon machen, was im Cache vor sich geht, was verwendet wird, was an diesem Punkt nicht verwendet wird und wie viel es verwendet wird. Es sind fast alle 10,000 Artikel fertig, glaube ich jetzt hinzugekommen. Ja, das sind sie, und ich werde die Eingabetaste drücken, um diese 10,000 Elemente abzurufen. Zunächst einmal dauerte es ungefähr 37 Sekunden, um diese Elemente in den Cache einzufügen. Jetzt liest es diese 10,000 Elemente aus dem Cache. Wenn Sie also sehen, können wir hier sehen, dass auf diesen beiden Serverknoten einige Abrufe pro Sekunde stattfinden. Die Artikel werden also gerade abgeholt. Es wird jetzt also in einer Schleife abgerufen. Denken Sie daran, sobald es abgeschlossen ist, den Massentest zu starten. Basierend auf diesem Massentest werden wir also diese beiden Zahlen vergleichen und sehen, wie sie sich tatsächlich auswirken. Also, hier hat es ungefähr 30 Sekunden gedauert, um diese 10,000 Artikel abzurufen, und mit der Massen-API sind die Ergänzungen tatsächlich erledigt, und es sollte bald auch mit dem Abrufteil fertig sein, denke ich, oh ja, ich muss die EINGABETASTE drücken. Okay, lass uns warten, bis es fertig ist, und dann kann ich dir tatsächlich zeigen, wie all diese Dinge aussehen. So, jetzt ist es komplett. Um diesen Test nur noch einmal durchzugehen, wurden 10,000 Elemente mit einer Größe von 10 KB in einer Schleife in den Cache hinzugefügt, was etwa 37 Sekunden dauerte. Um diese 10,000 Elemente abzurufen, dauerte es ungefähr 30 Sekunden, wieder in einer Schleife. Beim Massentest wurden diese 10,000 Elemente in den Cache hinzugefügt, und es dauerte etwa 5 Sekunden.

Massentest abgeschlossen

Das ist also eine große Lücke zwischen 37 Sekunden und 5 Sekunden, und um diese Elemente im Cache abzurufen, dauerte es ungefähr 6 Sekunden. Also nochmal ein großer Unterschied zwischen 6 Sekunden und 30 Sekunden. Das ist also, wie viel Verbesserung die Massenoperationen Ihnen und Ihrer Anwendung tatsächlich bieten können, und wenn Sie dies verwenden, müssen Sie denselben Aufruf nicht immer wieder ausführen. Sie müssen nicht jedes Mal zum geclusterten Cache wechseln. Sie können im Grunde eine Sammlung all dieser Operationen erstellen, die Sie ausführen müssen. Mithilfe der Bulk-API können Sie sie einfach in den Cache einfügen.

Komprimierung - Demo

So, jetzt ist unser Massentest tatsächlich abgeschlossen. Gehen Sie also zurück zur Präsentation. Als nächstes kommt der Kompressionstest. Wie ich bereits erwähnt habe, empfehlen wir im Allgemeinen, das Objekt in kleinere Größen zu zerlegen, aber wenn Sie diese Option nicht zur Verfügung haben, können Sie tatsächlich komprimieren, Sie können tatsächlich einen bestimmten Schwellenwert festlegen. Jedes größere Objekt würde nicht auf eine kleinere Größe komprimiert werden. Lassen Sie uns jetzt tatsächlich die Komprimierung in unserer Umgebung aktivieren. Lassen Sie uns also zunächst den Cache leeren. Es ist fertig. Komprimierung ist etwas, das im laufenden Betrieb durchgeführt werden kann. Der Cache muss also nicht gestoppt werden. Wenn ich also mit der linken Maustaste auf den Cache-Namen klicke, werden all diese verschiedenen Konfigurationen geöffnet. Wenn ich hierher gehe und hier Optionen öffne, muss ich nur auf diese Option klicken, um die Komprimierung zu aktivieren. Ich werde es auf 50 KB setzen. Alles, was größer als 50 KB ist, wird also komprimiert. Klicken Sie mit der rechten Maustaste auf den Cache-Namen und klicken Sie auf Konfigurationen anwenden. Alle diese Konfigurationen werden nun auf den Cluster angewendet. Jedes Objekt, das größer ist, wird also tatsächlich komprimiert.

Komprimierung anwenden

Ich werde also denselben Test ausführen, den wir ursprünglich durchgeführt haben, und das war Test 1. Ändern Sie ihn zurück zu Test 1, speichern Sie dies und ich drücke auf Ausführen (Start). Lassen Sie uns warten, bis es beginnt, und dann gebe ich weitere Details darüber, wie die Komprimierung in verschiedenen Szenarien tatsächlich hilft. Die Komprimierung funktioniert also folgendermaßen: Sobald der Client diese Elemente an den Cache sendet, sendet er sie komprimiert. Die Komprimierung hilft also, wenn das Element, sobald es über das Netzwerk wandert, kleiner ist, und sobald es im Cluster-Cache verbleibt, nimmt es auch weniger Platz ein.

Kal, ich wollte Sie nur daran erinnern, dass wir 10 Minuten Zeit haben, bevor die Sitzung endet, also passen Sie sich einfach entsprechend an. Stimmt, ok danke. Haben Sie an dieser Stelle noch Fragen? Nein, es scheint, als wäre jeder gut. Eigentlich haben wir zwei Bestätigungen, so weit so gut, also sind wir gut. In Ordnung, perfekt. Danke.

Okay, also, ich sprach über Kompression, wie es hilft. Falls es also zwei Dinge gibt, wird die gesamte Netzwerkreise eines kleineren Objekts offensichtlich schneller sein als bei einem größeren Objekt, und sobald dieses Objekt im Cache platziert ist, klicken Sie auf die Eingabetaste, damit es mit dem Abrufen dieser Elemente beginnt . Sobald es also im Cache platziert ist, ist es tatsächlich auch kleiner. Es verbraucht also weniger Platz. Die Gesamtzeit, die für die Bearbeitung dieses Artikels benötigt wird, wird ebenfalls reduziert. So hilft die Komprimierung in Ihrem Szenario. Während des Hinzufügens entsteht auf der Clientseite ein Overhead. Aber die gesamte Nettoverbesserung, die wir jetzt bemerken werden, ist tatsächlich größer als das. Also, die ganze Zeit, die es braucht, bis alle Operationen auf diesen Gegenständen gefunden wurden, wird tatsächlich viel schneller sein. Test 1 mit Komprimierung dauerte also etwa 26 Sekunden.

Komprimierungsergebnisse

Wenn Sie sich erinnern, anfangs, in unserem ersten Test mit nichts, ohne besondere Funktionen, nur mit der grundlegenden API, dauerte es, glaube ich, 45 Sekunden. Es gibt also einen großen Unterschied zwischen 45 Sekunden und 26 Sekunden. So viel Komprimierung hilft also tatsächlich, und wenn diese Vorgänge noch weiter skaliert werden, wäre der Unterschied in diesem Fall noch größer. Das hilft in diesem Fall also sehr.

Asynchrone Operationen – Demo

Lassen Sie uns also zum nächsten Szenario übergehen, das wir haben, nämlich asynchrone Updates. Asynchrone Updates sind im Grunde genommen Ihre Anwendung, die nicht wartet. Sie können eine separate Aufgabe dafür einrichten und diese Aufgabe wird diese Vorgänge ausführen. Sie können Rückrufe einrichten, um nur die Informationen zu erhalten, ob das Element für ein beliebiges Szenario hinzugefügt oder nicht hinzugefügt wurde. Das kann man eigentlich auch einrichten. Ich gehe jetzt schnell zur Probe und ich denke, es ist Test Nummer 3, aber das kann ich schnell bestätigen. Okay, das ist Test Nummer 3 für asynchrone Updates. Lassen Sie uns damit beginnen und dann können wir uns die Details des Codes ansehen. Sobald ich die Kontrolle zurück habe, werde ich die Codedatei öffnen und Ihnen tatsächlich zeigen, was in Test Nummer 3 vor sich geht, nämlich für asynchrone Updates. Habe jetzt angefangen. Also, in den asynchronen Updates, das ist Test Nummer 3, was los ist, ist, dass es zuerst ein Element in den Cache hinzufügt, indem es nur den einfachen Einfügungsaufruf verwendet, und dann, sobald es mit dem Hinzufügen dieser Elemente fertig ist, es im Grunde genommen wieder entfernt in einem Teil von a Schleife. Jeder Schlüssel wird also in einer einzigen Iteration entfernt.

...
else if (args[1].Equals("test3"))//ASYNC API TEST
{
    Console.WriteLine("TEST 3\n");
    Console.WriteLine("Press anything to add " + objectsCount + " items normally (100kb Object)");
    Console.ReadKey();
    Console.WriteLine("Adding items now");

    try
    {
        cache = NCache.InitializeCache(args[0]);
        datetime1 = DateTime.Now;
        for (int i = 0; i < objectsCount; i++)
        {
            cache.Insert(key + i, obj1);
            //cache.InsertAsync(key + i, obj1, OnItemAdded, "", "");
        }
...

Ich klicke auf Enter. Es fügt dem Cache mit einer Größe von 5,000 KB 100 Elemente hinzu, und das normalerweise. Mit normalerweise meine ich hier nur ein einfaches Einfügen und dann werden diese Elemente wieder in einem Teil der Schleife entfernt. So werden wir sehen, wie viel Zeit für diesen Teil benötigt wird, und danach werden wir die asynchronen Aufrufe für Hinzufügungen, asynchrone Einfügungen und dann für deren Entfernung verwenden. Lassen Sie uns beim Hinzufügen dieser Elemente tatsächlich zurückspringen und sehen, wie sie aussehen. In diesem Fall wird also nur eine grundlegende Entfernung durchgeführt, um diese Elemente zu entfernen. Im asynchronen Testteil führt es den asynchronen Aufruf zum Einfügen aus. Der Client wartet also nicht, sondern übergibt die Operation einfach an die Warteschlange. Die Warteschlange bedeutet nicht, dass es ein langsamer Prozess sein wird, der Client wartet nicht darauf und es wird als hübscher, wissen Sie, als Hintergrundprozess ausgeführt, aber es ist ziemlich schnell erledigt. Denn viele Vorgänge innerhalb des Caches werden tatsächlich asynchron ausgeführt.

...
datetime2 = DateTime.Now;
Console.WriteLine("Time to remove " + objectsCount + " objects normally: " + (datetime2 - datetime1).TotalSeconds);
Console.WriteLine("\nAdding items using Async API now");
datetime1 = DateTime.Now;

for (int i = 0; i < objectsCount; i++)
{
    //cache.Insert(key + i, obj1);
    cache.InsertAsync(key + i, obj1, OnItemAdded, "","");
}
datetime2 = DateTime.Now;
Console.WriteLine("Time to add " + objectsCount + " objects with Async API: " + (datetime2 - datetime1).TotalSeconds);
Console.WriteLine("\nRemoving " + objectsCount + " items with Async API now");
...

Lassen Sie mich Ihnen ein Beispiel geben. Wenn also zum Beispiel über Replikation gesprochen wird, wenn Sie sich erinnern, dass wir im Cache-Erstellungsprozess asynchron eingestellt haben. Wenn Sie das also im Grunde verwenden, werden viele von ihnen als Hintergrundprozess ausgeführt. Sie sind sehr zuverlässig. Es ist nur so, dass Ihre Anwendung, der Hauptprozess, die Hauptaufgabe davon nicht betroffen ist. Das Hinzufügen dieser Elemente zum Cache dauerte also etwa 49 Sekunden, um diese Elemente dem Cache hinzuzufügen. Jetzt werden diese 5,000 Artikel tatsächlich entfernt. Sobald dies erledigt ist, werden wir sehen, wie die asynchronen Aufrufe dauern. Es müssen also 5,000 Artikel bewegt werden. Es hat ungefähr 25 Sekunden gedauert, diese Elemente zu entfernen, und jetzt werden Elemente mit dem asynchronen Aufruf hinzugefügt, und wir werden sehen, wie viel Unterschied zwischen 49 Sekunden und der Zahl, die wir jetzt erhalten, in Bezug auf den Zeitpunkt, an dem wir Erneutes Hinzufügen von Elementen zum Cache. Da ist es. So wurde sie von 49 Sekunden im Hinzufügungsteil auf 28 Sekunden und beim Entfernen dieser Elemente von 25 Sekunden auf 1.6 Sekunden gesenkt. Das ist also, wie viel Leistung wir tatsächlich sehen können, wenn Sie dies einbeziehen. Sie können also sehen, dass es einen großen Unterschied gibt. Es sind ungefähr 25 Sekunden Unterschied zwischen dem Entfernen von Elementen aus einem einfachen Entfernungsaufruf und dann aus einem asynchronen Entfernungsaufruf. Das können Sie also von dieser Art von Funktionen erwarten, die von angeboten werden NCache.

Asynchrone API

Zwei Netzwerkkarten – Demo

Springen wir eigentlich zurück zur Präsentation. Wir haben Asynchronität behandelt und die nächste ist die kompakte Serialisierung. Also noch einmal, genau dies wird in den Szenarien behandelt, in denen Sie nicht den Luxus haben, eine Aktualisierung im Code vorzunehmen, und damit können Sie tatsächlich alle diese Klassen als serialisierbar markieren. Kal mit diesem Kommentar, wir haben noch ungefähr 3 Minuten, also ... Richtig, richtig. Ich werde es nur schnell vertuschen. Die letzten beiden Dinge, die übrig blieben, waren die kompakte Serialisierung und danach haben wir die Dual-NICs-Funktion. Wenn Sie also, wie ich bereits erwähnt habe, feststellen, dass Ihre Netzwerkressourcen ausgeschöpft sind, würden standardmäßig sowohl die Art der Kommunikation, die Server-zu-Server-Kommunikation als auch die Client-zu-Server-Kommunikation, beide auf derselben Netzwerkschnittstellenkarte stattfinden. Wenn Sie jedoch feststellen, dass Ihre Netzwerkressourcen ausgeschöpft sind, können Sie die Art der Kommunikation zwischen Client zu Server und dann von Server zu Server trennen. Es ist eine sehr einfache Aufgabe innerhalb der NCache Manager. Wenn Sie hierher kommen, um es auszuwählen, klicken Sie einfach mit der rechten Maustaste hier und klicken Sie auf NIC auswählen.

NIC konfigurieren

Sobald Sie NIC auswählen, können Sie tatsächlich angeben, welche Kommunikation auf dieser bestimmten IP stattfinden soll. Da ich nur einen habe, stehen mir diese Optionen zur Verfügung. Wenn ich mehrere IPs habe, kann ich diese direkt an Ort und Stelle auswählen. Also klicke ich einfach auf Abbrechen.

Wählen Sie Netzwerkkarte

Wir hatten aus Zeitmangel keine Gelegenheit, die kompakte Serialisierungsdemo zu machen, aber ich kann dieses Beispiel tatsächlich mit euch teilen, und ihr könnt es testen und sehen, wie es für euch funktioniert. Sam zu dir. Perfekt. Nun, vielen Dank für deine Zeit, Kal.

Gibt es noch Fragen, bevor wir die heutige Sitzung abschließen? Ich werde nur eine Minute geben, um zu sehen, ob es irgendwelche Fragen gibt. Ok, also, es gibt eine Frage.

Können Sie bitte den Link teilen, über den Sie diese Präsentation teilen werden? Also, Kal, ich schätze, es wäre auf unserer Website verfügbar, richtig?

Ja, es wird verfügbar sein und ich habe ihre E-Mail-Adresse dort unten notiert. Was ich also tun kann, ist, ich kann ihnen eine E-Mail schicken, sobald es hochgeladen wird. In Ordnung. Eigentlich haben wir noch eine Frage.

Können wir eine Präsentation planen, okay, also können wir eine Demo für unser Team planen?

Ja absolut. Sie können natürlich eine Demo vereinbaren. Sie können unser Support-Team kontaktieren support@alachisoft.com oder unser Verkaufsteam sales@alachisoft.com Teilen Sie uns einfach Ihre Zeitpräferenzen mit und wir planen gerne eine personalisierte Sitzung für Sie.

Okay, Kal, also mache ich weiter und schließe das ab. Ich glaube, wir haben keine weiteren Fragen. Vielen Dank an alle, die heute an der Sitzung teilgenommen und teilgenommen haben, wir wissen das zu schätzen. Wie gesagt, wenn Sie Fragen haben, wenden Sie sich bitte an unser Support-Team oder wenden Sie sich bei vertriebsbezogenen Fragen an unser Vertriebsteam. Wir werden hier sein, um zu helfen. Rufen Sie uns gerne an. Sie können uns auch direkt telefonisch erreichen. Es ist auf unserer Website. Bis zum nächsten Mal, vielen Dank und einen schönen Abend, tschüss.

Was macht man als nächstes?

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