Benutzer mit den meisten Antworten
Globale Object-Caching und Service Bus Replay?

Frage
-
Hi, ich habe dies mal 2 verschiedene Frage über den Service Bus Replay und den Caching Dienst.
Fachliche Frage zum "Caching Dienst"
Verstehe ich so richtig, Caching Dienst ist ähnlich wie ein Storage, der aber auf Arbeitspeicher befindet ist? Sodass die Daten schnell zugegriffen werden können?
Kann ich den Caching Dienst ausnutzen/manipulieren um ein Global Object zu implementieren?
Beispiel: Ich habe ein Service Dienst (Worker Role), für jeden Funktionaufruf, wird ca. 100MB Speicher geladen um ein Objekt zu erstellen, dieses Objekt wird nach dem Berechnen gelöscht um den Speicher (RAM) frei zu geben. Es kostet aber eine menge Zeit um dieses Objekt wieder zu instanzieren. Daher haben wir so gelöst.
Bisherige Lösung: Solche Objekte werden erstellt aber nie gelöscht (statische private Atts), es führt dazu, dass der Arbeitspeicher andauern belastet ist, d.h. der RAM wird unnötigt belastet! Weil wir 5GB RAM verbraten , bei kleineren Instanzen wäre diese Option keine Lösung und auf Dauer ist es total unschön.
Gesuchte Ansatz: Ich frage mich ob es möglich ist, solche Objekte einmalig im "Cache-Dienst" zu instanzieren und evt. global (innerhalb eines Worker Role-Services) zu bereitstellen, sodass andere Instanzen zugreifen könnten?
Fachliche Frage zum "Service Bus Replay"
Wenn ich eine Berechnung an Server schicke, wird die Frage an die Queue hinzugefügt und bekomme eine "DummyReplay" zurück? Sobald die Berechnung (wirklich) fertig ist, wird mein Client eine Benachrichtigung bekommen um das richtige Ergebnis zu holen? Bzw. Service Bus Replay versucht den Client ständig zu erreichen um das Ergebnis zu liefern?
https://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-relay/
Dieses Service ist besonders interessant weil das "Firewall-Problem" wahrscheinlich umgehen/aufgehoben wird??
Ich habe leider kein Codebeispiel finden können und verstehe irgendwie noch nicht ganz, wie man den "Service Bus Replay" programmiertechnisch umsetzen könnte.
Mit freundlichen Grüßen
Nghia
Freue mich wieder auf eure Hilfe.
Antworten
-
Hallo Nghia,
zu Deinen Fragen:
zu 1 (Wenn ich ein Objekt gecacht habe...):
Das Objekt wird übertragen. Muss es ja auch, da es ja nicht unbedingt im gleichen Speicher liegt. Es könnte ja sein, dass es im Speicher einer anderen Instanz liegt. Das ist auch ein Grund dafür, warum zu cachende Objekte serialisierbar sein müssen.zu 2 (Was würde passieren...):
Nein, die beiden Instanzen bekommen Änderungen nicht synchron mit. Jede arbeitet mit ihrer eigenen Kopie.zu 3 (Wie viel Cache-Speicher...):
Theoretisch kannst Du unendlich viel Cache-Speicher einrichten. Der Speicher wird durch drei Faktoren bestimmt:
1. die Zahl der Instanzen, für die Du Cache konfiguriert hast
2. die Größe der Instanzen, für die Du Cache konfiguriert hast
3. den Anteil, den Du in den Instanzen für Cache reservierst
Beispiel: XL Instanzen haben jeweils 14 GB RAM, wenn Du drei Instanzen hast und jeweils 50% für Cache reservierst, hast Du 3 x 50% x 14 GB = 21,5 GB Cache.zu 4 (Service Relay Bus...):
Wenn Dein Client an den Relay eine Anfrage schickt, bekommst Du entweder die Antwort des Service zurück (wenn der Service empfangsbereit ist) oder eine Exception (wenn der Service nicht empfangsbereit ist)zu 5 (Wenn ich als Server/Service...):
Ja, so ist es. Der ganze Mechanismus erfolgt automatisch durch den Service Bus. Siehe auch das Beispielprojekt unten.zu 6 (In welcher Form...):
Das Service Bus Relay funktioniert synchron. D.h. der Client wartet solange bis er entweder eine Antwort über das Relay bekommt oder einen Timeout. Der Client ist also solange blockiert, bis eine Antwort bekommt. Wenn Du das nicht möchtest, dann musst Du z.B. eine Service Bus Queue verwenden. Dabei kann der Client weiterarbeiten, sobald seine Nachricht in der Queue steht. Dann musst Du allerdings selbst implementieren, wie der Client eine Antwort bekommt.zu 7 (Können mehrere Instanzen...):
Ja.Unter folgendem URL kannst Du Dir ein Beispielprojekt für das Service Bus Relay herunterladen. Das ist ein simpler Echo-Service, der eine Textnachricht bekommt und gleich wieder zurück schickt: http://hsirtl.blob.core.windows.net/codesamples/AzureInfodaySampleAppFabricSB17.zip
Das Beispiel funktioniert bei mir. Ist zwar eine VS2012-Solution. Die sollte aber auch unter VS2010 funktionieren. Du musst nur in die beiden Program.cs-Dateien (beim Client und beim Service) Deine eigenen Credentials Deines Service Bus eintragen.
Viele Grüße,
Holger
PS: bitte verteile in Zukunft Deine Fragen in diesem Forum thematisch auf verschiedene Anfragen. Jetzt sind in diesem Thread Fragen zum Cache, zum Service Bus und zum Blob-Storage. Später findet dann keiner mehr die einzelnen Themen. Besser wäre eine Frage zum Cache, eine Frage zum Service Bus und eine Frage zum Blob-Storage.
Holger Sirtl Senior Technical Evangelist, Microsoft Deutschland GmbH http://blogs.msdn.com/hsirtl
- Als Antwort vorgeschlagen Holger SirtlMicrosoft employee Montag, 3. Dezember 2012 09:54
- Als Antwort markiert LocomTester Freitag, 7. Dezember 2012 10:38
Alle Antworten
-
Hallo LocomTester,
Für die erste Frage die Antwort ist Ja es ist wie ein Storage. Hier findest Du mehrere Infos: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/AAP314
Für die Service Bus Replay Frage was für Beispiele meinst Du? Es gibt einige Beispiele in den Link die Du gepostet hast.
Gruß,
Ionut
-
Hallo Nghia,
ja, Du verstehst den Cashing Dienst grundsätzlich richtig.
Bitte beachte, dass es unter Windows Azure zwei Arten von Caching gibt. Zum einen gibt es das Shared Caching. Das ist der Caching Service, den du im alten Portal unter deinem Namespace anlegen kannst. Jeder deiner Dienste, der auf diesen Namespace zugreifen kann, kann dann diesen Caching Service nutzen. Die Roadmap dieses Caching Service ist allerdings unklar. Besser, du verwendest die zweite Art des Caching Service. Dabei kannst du innerhalb eines Cloud Service entweder anteilig Ressourcen deiner Rollen oder spezielle Caching Rollen zum Caching einsetzen. In Visual Studio kannst du dies unter den Propertys deiner Rollen tun. Siehe auch folgende Abbildung.
Für weitere Informationen zum Caching Service empfehle ich dir folgende Ressourcen:
Zum Service Bus Relay:
Ja, so kannst Du das implementieren. Wenn Du eine Queue verwendest, bekommst Du keine DummyReply sondern einfach eine Rückmeldung, dass Deine Nachricht erfolgreich versendet wurde. Wenn die Worker Role Deine lokale Anwendung aufrufen soll, kannst Du das ebenfalls über den Service Bus realisieren. Am besten Du schaust Dir folgendes Video an, da zeige ich das: http://www.youtube.com/watch?v=TsmLD1DQUVU.
Ansonsten empfehle ich Dir die Seite https://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-relay/, die Du ja schon angegeben hast. Ist ein guter Einstieg.
Viele Grüße,
Holger
Holger Sirtl Senior Technical Evangelist, Microsoft Deutschland GmbH http://blogs.msdn.com/hsirtl
-
Caching Theory habe ich alles verstanden, aber der Emulator für Caching funktioniert es nicht? Es startet und startet ... startet aber nie vollständig.
Service Bus ist irgendwie schwer zu implementieren oder es funktioniert etwas bei mir nicht richtig.
Ich benutze "Relayed Messaging Bindings NetTcp MsgSec UserName" und habe quasi nur meine Daten geändert, trotzdem kann ich kein Host.open()! Liegt es an VS2010?Komisch ... jetzt erst mal weekend, nächste woche geht es weiter.
Viele Grüße
Nghia -
HM....
Cache und Service Bus Relay lässt sich bei mir nicht implementieren(mit Emulator), daher erhoffe ich auf eure Hilfe.
Cache kann ich leider nicht ausprobieren, die .config Einstellung funktioniert bei mir nicht ... Ein Service auf Service-Replay (Emulator) lässt sich bei mir nicht hosten!
- Wenn ich ein Objekt gecacht habe und dieses Objekt benutzen würde, wird dieses Objekt übertragen/kopiert oder wird nur ein Verweis auf das Objekt zurück gegeben. D.h. Das Programm merkt es nicht, ob das Objekt ein Cache-Objekt oder ein normale Objekt ist?
Cache Reference Data, Cache Activity Data, Cache Resource Data?
- Was würde passieren, wenn dieses Objekt von 2 Benutzer/Instanzen gleichzeitig benutzt werden möchte? Bekommen beide Instanzen die Änderungen synchron mit?
- Wieviele Cache-Speicher steht mir zu verfügung, wenn ich z.B. "3 XL Instanze Worker Role" beim 50% mit hoher Verfügbarkeit bzw. (ohne Verfügbarkeit) einrichten würde? 7GB bei hoher Verfügbarkeit und 21GB bei ohne hoher Verfügbarkeit?
- Service Relay Bus konnte ich leider auch nicht umsetzen ... Wenn ich als Client ein Request an Serivce-Relay geschickt habe, was genau erhalte ich als Antwort zurück?
- Wenn ich als Server/Service eine Nachricht aus dem Service-Relay entnehme und verarbeite, wie funktioniert es dann mit dem "Beantworten", das Service schickt zunächst eine Antwort an Service-Relay und Service-Relay schickt eine Benachrichtigung an Client?
- In welcher Form findet diese Benachrichtigung statt? Wird der Client aufgefordert die Antwort zu holen? Oder verschickt das Service-Relay gleich die Antwort an Client mit?
- Können mehrere Instanzen auf den selben BLOB-Container lesen und schreiben?
Auf eure Hilfe würde ich mich sehr freuen, ein Example Projekt (die funktioniert) auf VS2010 mit .Net 4 würde ich sehr freuen, ich habe viele projekt und Code ausprobiert, leider ohne erfolg.
Viele Grüße
NghiaComputer System.
Window 7 64 Bit
VS2010 Prof.
Azure .NET 1.7
Emulator Version 1.8
FrameWork 4.0- Bearbeitet LocomTester Freitag, 30. November 2012 10:03
- Wenn ich ein Objekt gecacht habe und dieses Objekt benutzen würde, wird dieses Objekt übertragen/kopiert oder wird nur ein Verweis auf das Objekt zurück gegeben. D.h. Das Programm merkt es nicht, ob das Objekt ein Cache-Objekt oder ein normale Objekt ist?
Cache Reference Data, Cache Activity Data, Cache Resource Data?
-
Hallo Nghia,
zu Deinen Fragen:
zu 1 (Wenn ich ein Objekt gecacht habe...):
Das Objekt wird übertragen. Muss es ja auch, da es ja nicht unbedingt im gleichen Speicher liegt. Es könnte ja sein, dass es im Speicher einer anderen Instanz liegt. Das ist auch ein Grund dafür, warum zu cachende Objekte serialisierbar sein müssen.zu 2 (Was würde passieren...):
Nein, die beiden Instanzen bekommen Änderungen nicht synchron mit. Jede arbeitet mit ihrer eigenen Kopie.zu 3 (Wie viel Cache-Speicher...):
Theoretisch kannst Du unendlich viel Cache-Speicher einrichten. Der Speicher wird durch drei Faktoren bestimmt:
1. die Zahl der Instanzen, für die Du Cache konfiguriert hast
2. die Größe der Instanzen, für die Du Cache konfiguriert hast
3. den Anteil, den Du in den Instanzen für Cache reservierst
Beispiel: XL Instanzen haben jeweils 14 GB RAM, wenn Du drei Instanzen hast und jeweils 50% für Cache reservierst, hast Du 3 x 50% x 14 GB = 21,5 GB Cache.zu 4 (Service Relay Bus...):
Wenn Dein Client an den Relay eine Anfrage schickt, bekommst Du entweder die Antwort des Service zurück (wenn der Service empfangsbereit ist) oder eine Exception (wenn der Service nicht empfangsbereit ist)zu 5 (Wenn ich als Server/Service...):
Ja, so ist es. Der ganze Mechanismus erfolgt automatisch durch den Service Bus. Siehe auch das Beispielprojekt unten.zu 6 (In welcher Form...):
Das Service Bus Relay funktioniert synchron. D.h. der Client wartet solange bis er entweder eine Antwort über das Relay bekommt oder einen Timeout. Der Client ist also solange blockiert, bis eine Antwort bekommt. Wenn Du das nicht möchtest, dann musst Du z.B. eine Service Bus Queue verwenden. Dabei kann der Client weiterarbeiten, sobald seine Nachricht in der Queue steht. Dann musst Du allerdings selbst implementieren, wie der Client eine Antwort bekommt.zu 7 (Können mehrere Instanzen...):
Ja.Unter folgendem URL kannst Du Dir ein Beispielprojekt für das Service Bus Relay herunterladen. Das ist ein simpler Echo-Service, der eine Textnachricht bekommt und gleich wieder zurück schickt: http://hsirtl.blob.core.windows.net/codesamples/AzureInfodaySampleAppFabricSB17.zip
Das Beispiel funktioniert bei mir. Ist zwar eine VS2012-Solution. Die sollte aber auch unter VS2010 funktionieren. Du musst nur in die beiden Program.cs-Dateien (beim Client und beim Service) Deine eigenen Credentials Deines Service Bus eintragen.
Viele Grüße,
Holger
PS: bitte verteile in Zukunft Deine Fragen in diesem Forum thematisch auf verschiedene Anfragen. Jetzt sind in diesem Thread Fragen zum Cache, zum Service Bus und zum Blob-Storage. Später findet dann keiner mehr die einzelnen Themen. Besser wäre eine Frage zum Cache, eine Frage zum Service Bus und eine Frage zum Blob-Storage.
Holger Sirtl Senior Technical Evangelist, Microsoft Deutschland GmbH http://blogs.msdn.com/hsirtl
- Als Antwort vorgeschlagen Holger SirtlMicrosoft employee Montag, 3. Dezember 2012 09:54
- Als Antwort markiert LocomTester Freitag, 7. Dezember 2012 10:38
-
Hi Holger, ich werde nächstes Mal auf die Thematik aufpassen.
Ich habe das Projekt genommen und meine Daten eingegeben, beim Hosten ( host.Open() ) kommt dann die CommunicationException "Unable to connect to ServiceBus using HTTP connectivity mode" ...
Meine Daten habe ich so angegebenstring serviceNamespace = "locomrelay"; string issuerName = "owner"; string issuerSecret = "soK4oKT8XXXXXXXXXXXXXXXXXXXXXXXXXXX=";
Danke für deine Mühe
Nghia -
Hallo Nghia,
Deine Einstellungen sehen gut aus. Ich gehe mal davon aus, dass Du im ServiceBus einen Namespace mit Namen 'locomrelay' angelegt hast.
Ich vermute, dass das Problem in der Netzwerkverbindung zum ServiceBus liegt. Ggf. lässt Dein Proxy keinen entsprechenden Traffic zu. Schau Dir mal diesen Thread an:
Darüber hinaus kann ich Dir auch noch den folgenden Blogpost empfehlen:
http://www.jayway.com/2011/05/12/windows-azure-servicebus-pitfalls/
Viele Grüße,
Holger
Holger Sirtl Senior Technical Evangelist, Microsoft Deutschland GmbH http://blogs.msdn.com/hsirtl
-
-
Hi,
Clemens Vasters hat in oben genannten Thread noch folgenden Hinweis gegeben:
Your proxy only supports HTTP/1.0. Our HTTP tunneling capabilty requires HTTP/1.1 compliant proxies.
We'll be adding an explicit HTTPS tunneling capability in one of the next releases (with some luck in the next one) that will allow getting this scenario to work through proxies that are still operating on a pre-1999 technology status quo.
Kann es daran liegen?
Viele Grüße,
Holger
Holger Sirtl Senior Technical Evangelist, Microsoft Deutschland GmbH http://blogs.msdn.com/hsirtl
- Als Antwort markiert LocomTester Freitag, 7. Dezember 2012 10:38
- Tag als Antwort aufgehoben LocomTester Freitag, 7. Dezember 2012 10:38