2014-03-12 8 views
5

In unserem noch in Entwicklung befindlichen Projekt haben wir beim Zugriff auf unsere ASP.NET-Web-API-Dienste plötzliche Verzögerungen festgestellt. Mit dem genialen Mini Profiler haben wir festgestellt, dass diese Verzögerungen verursacht werden, wenn Verbindungen zu den Azure Data Cache (Preview) -Diensten fallen gelassen werden und sie erneut eingerichtet werden müssen. Dieser Vorgang dauert etwa 3,3 Sekunden. Nach dem erneuten Verbinden dauert das Abrufen eines Objekts aus dem Cache 1,4 ms.Die Verbindung zum Azure Cache-Dienst dauert etwa 3,3 Sekunden.

Als ich MaxConnectionsToServer von 1 bis 20 erhöht, bemerkte ich eine andere Sache. Wenn ich für 1 oder 2 Minuten keine Anfragen an die Web-API stelle (normalerweise wenn die Verbindungen unterbrochen werden) und dann Anrufe tätige, werden die nächsten 20 Anfragen um 3,3 Sekunden verzögert. So funktioniert das Verbindungs-Pooling (rate) - die Verbindungen aus dem Pool entfernen.

Sowohl die Web-API als auch der Caching-Dienst werden in der Region Ost-USA gehostet. Wir haben den lokalen Cache deaktiviert, SSL ist deaktiviert, die automatische Erkennung ist aktiviert.

Also, ich frage mich, wenn etwas mit unserer Konfiguration nicht stimmt oder ist das eine Sache, weil Azure Cache noch in der Vorschau ist?

Alle Informationen werden bewertet.

Danke!

Antwort

0

Es klingt, als würde Ihr geteilter Cache aufgrund von Inaktivität ausgelagert. Eine Möglichkeit, dies zu testen, wäre das Hinzufügen eines In-Role-Cache zu einem vorhandenen Dienst (falls verfügbar) und das Vertauschen der Cache-Nutzung mit diesem neuen Cache. In-Role-Cache wird beschrieben here.

Sobald der Cache von einem freigegebenen Angebot verschoben wurde, warten Sie die erforderlichen 1-2 Minuten für Leerlaufzeit und versuchen Sie die Verbindung erneut, die Verzögerung sollte nicht vorhanden sein.

Angenommen, Sie möchten nach dem Isolieren des Problems bei der geteilten Cache-Option bleiben, führt die einzige aktuelle Problemumgehung, die ich kenne, eine Hintergrundaufgabe aus, die den Cache periodisch anpingt, um ihn am Leben zu erhalten.

Wenn Sie eine vollständige Webrolle ausführen, können Sie beim Start der Anwendung eine Hintergrundaufgabe starten.
Wenn Sie über Mobile Services bereitstellen, können Sie den "Ping" über geplante Jobs ausführen. Das einzige Problem, auf das Sie hier stoßen könnten, ist, dass die Mindestzeit für einen geplanten Job 1 Minute beträgt. Dies ist möglicherweise nicht aggressiv genug, um den Cache zu 100% am Leben zu erhalten.

+0

Vielen Dank für Ihre Antwort. Wir verwenden nicht den Shared Caching Service, sondern den neuen Azure Cache: http://msdn.microsoft.com/en-us/library/windowsazure/dn386094.aspx –

+0

Ich hätte klarstellen sollen - die Stufe, die Sie wählen, bestimmt, ob Sie Cache ist freigegeben oder dediziert. Wenn Sie unter der Basisebene ausgeführt werden, führen Sie die gemeinsame Hardware aus, wenn Sie sich für die Standard- oder Premiumstufen entschieden haben, die Sie auf dedizierter Hardware ausführen. Tier Details hier: http://msdn.microsoft.com/en-us/library/windowsazure/dn386114.aspx. – MOverlund

+0

Mit dem Standard-Angebot versucht - das gleiche. Die Verbindung dauert ca. 3 Sekunden. –

0

Nichts, was ich sehe, deutet darauf hin, dass Sie irgendetwas falsch machen. Es kann sein, dass der Azure wirklich Probleme hat, die Cache-Verbindungen schnell zum Laufen zu bringen. Laut mehreren Best Practices-Dokumenten und MSDN-Posts möchten Sie die Anzahl der Verbindungen zu Caches erhöhen, um einen Failover zu einer aktiven Verbindung zu ermöglichen, die Sie effektiv mit Ihrer Konfigurationsänderung durchgeführt haben.

Versuchen Sie, sicherzustellen, dass Ihr Cache-Accessor ein statisches Objekt ist (eine weitere MSDN-Empfehlung). Dies kann eine lange Überlegung sein, aber Sie sollten die Option Gleitendes Fenster verwenden, um den Objektablauf ablaufen zu lassen zurückgesetzt werden, aber auch den Cache-Dienst aufgefordert, die Verbindung zurückzusetzen.

Verwandte Themen