2016-06-06 26 views
1

Ich habe eine Reihe von Azure Websites, die zu demselben Resource Group als Azure VM running SQL server bereitgestellt werden, soweit ich zuvor verstanden habe, war dies alles, was erforderlich war, um sicherzustellen, dass Ihre Prozesse in einem geographischen befinden Nähe zueinander.Azure-Website zu Azure VM Netzwerklatenz verbessern

Allerdings habe ich einige steile Leistungsprobleme bekommen. Mit Entities Framework wenn ein einfaches Stück Code, wie diese zwischen meinem lokalen dev Setup

var result = await context.Categories.Include(o => o.ParentCategory); 

oder eine Kombination der über dem durchschnittlichen Leistungsunterschied

var result = await Context.Settings.Where(o => o.Name == name).FirstOrDefaultAsync(); 

oder etwas so einfaches wie

ausgeführt wird und das Produktionssystem ist 400%. Dieser Unterschied scheint bei verschiedenen Arten von Abfragen ziemlich konsistent zu sein, und nachdem eine größere VM auf das Problem geworfen wurde, scheint es definitiv kein Hardwareproblem zu sein, da es keinen Effekt hatte. Während ich etwas Netzwerklatenz erwartete, scheint dies extrem hoch.

Was mache ich falsch? Ich würde es sehr begrüßen, wenn jemand eine Aufschlüsselung der Best Practices für die Kommunikation zwischen Azure-Websites und Azure-VMs bereitstellen und die Latenz verbessern könnte.

Nebenbemerkung: Im Verlauf meiner Recherchen habe ich festgestellt, dass Sie Azure Virtual Networks erstellen können (und davon ausgehen, dass dies Teil der Lösung sein könnte), aber ich sehe keine Möglichkeit, eine Website zu einem solchen virtuellen Netzwerk zu verschieben oder zuzuordnen.

+0

Bitte überprüfen Sie, ob Sie alle Ihre Artikel in der gleichen Region bereitgestellt haben. Die Verwendung derselben Ressourcengruppe garantiert nicht, dass sich alle in derselben Region befinden. Aus der Dokumentation: "5 - Eine Ressourcengruppe kann Ressourcen enthalten, die sich in verschiedenen Regionen befinden." https://azure.microsoft.com/en-us/documentation/articles/resource-group-overview/ –

Antwort

1

Maxim. Ich habe diesen Kommentar ein paar Mal gesehen. Microsoft hat einige Anleitungen zum Arbeiten mit Entity Framework in Azure veröffentlicht. Sie können es hier finden:

https://msdn.microsoft.com/en-us/library/cc853327(v=vs.110).aspx

Es ist nicht die beste Antwort auf Ihre Frage sein kann, aber ich glaube, es sollte Ihnen sehr helfen. Es hat sicherlich für mich getan.

Zusätzlich würde ich, wenn möglich, eine sanfte Art der CQRS-Implementierung in Betracht ziehen, so dass Sie ZWEI Kontextobjekte erstellen, eines zum Schreiben und eines zum Lesen. Im schreibgeschützten Kontext können Sie das Tracking in EF deaktivieren, wodurch die signifikant die EF-Leseleistung insgesamt verbessert.

// In your READ context, do this in the constructor 
context.Configuration.AutoDetectChangesEnabled = false; 

Ich hoffe, dass all dies hilft.

+0

Mit freundlichen Grüßen schätzen Sie Ihre Eingabe, aber im Gegensatz zu den anderen Fragen, die Sie erwähnen (von denen ich selbst eine Nummer gesehen habe) ist mein Problem grundlegend anders. Mein Problem liegt nicht bei Entity Framework und ich kann dies leicht überprüfen, indem ich versuche, einige der von Ihnen beschriebenen Optimierungen mit wenig oder gar keiner Wirkung anzuwenden. Weiter würde ich das gleiche Verhalten auf meiner Dev-Maschine erwarten, nicht nur in der Produktion, wenn dies ein EF-Problem wäre. Meine Probleme scheinen mit der Netzwerktopographie der Azure-Cloud zu liegen, auf die Sie leider nicht eingehen. –

+0

Die Netzwerk-Topologie ist, was es ist. Es ist für horizontale Skalierung (mehrere Maschinen) und nicht für vertikale Skalierung (mehr CPU/RAM auf einer einzelnen Maschine) gebaut. Darüber hinaus sind Sie mehr oder weniger gezwungen, den ganzen Weg async zu denken, was einige Anpassungen erfordern kann.Jeder bekommt diesen ersten Schock, wenn sie ihre Entwicklungsumgebungen mit der Cloud vergleichen (irgendeine Wolke) - aber sobald du den anfänglichen Schock überwunden hast und ihn zu deinem Vorteil benutzt hast, wirst du niemals wiederkommen .- Versprechen :) –