2009-03-16 5 views
3

Ich habe eine Web-Anwendung, die derzeit etwa 500.000 Benutzer hat, im Durchschnitt etwa 500 Seitenaufrufe pro Stunde, und wir erwarten, innerhalb des nächsten Jahres bis zu 20.000.000 Benutzer skalieren zu müssen.Was sind gute Ressourcen für die Gestaltung einer Web-Services-basierten Architektur, die gut skalieren kann?

Unser derzeitiges System kann diese Skalierung nicht verarbeiten, und deshalb müssen wir auf eine solche umsteigen.

Ich dachte, eine servicebasierte Architektur würde robuster sein und ermöglichen, dass die Komponentendienste unabhängig voneinander und der Hauptanwendung skaliert werden können.

Aber ich wurde gewarnt, dass man leicht eine Dienstleistungsarchitektur entwerfen kann, die nicht gut skaliert, und da ich wenig oder gar keine Erfahrung mit der Entwicklung eines solchen Systems habe, ist das Durchlaufen einiger empfohlener Ressourcen wahrscheinlich besser als nur "ein erstechen.

Welche Ressourcen werden für die Erstellung eines gut skalierenden Systems empfohlen? Die Plattform ist .Net, aber ich würde mir vorstellen, dass die gleichen Informationen für jede service-basierte Architektur unabhängig von der Plattform gelten.

+0

Sie haben eine halbe Million Menschen mit durchschnittlich 500 Ansichten pro Stunde? Sind sie ADHS-Affen auf Crack? ;) – Dan

+0

Nein, sie sind K-12 Studenten ... mehr wie Heuschrecken! – cdeszaq

+0

Was ist derzeit der Flaschenhals Ihres Systems, den Sie als nicht skalierbar betrachten? –

Antwort

2

Ich würde zuerst Gennady Shumakhers Kommentar antworten - "Was ist derzeit der Flaschenhals Ihres Systems, den Sie als nicht skalierbar betrachten?". Sobald Sie das wissen, dann können Sie es spezifisch ansprechen, dann die ganze Anwendung, wie Sie brauchen.

Eine interessante Studie ist Twitter. Es begann mit nur wenigen Anfragen, hat sich aber schnell zu einer stark genutzten Plattform mit weltweitem Traffic entwickelt. This kann nützlich sein. Interessant könnte auch diese blog on scalability sein.

1

Theoretisch skaliert es, aber Sie müssen auf Latenz achten. Nehmen wir an, Sie haben ein Modul externalisiert, jetzt können Sie zwei Dienste haben, die an Stelle von einem dienen, aber in der Zeit, die benötigt wird, um eine Anfrage an einen externen Dienst zu senden, zu verarbeiten, können Sie 100 interne Anfragen bearbeitet haben 100 Servern, die tatsächlich einen geringeren Durchsatz haben, aber in beiden Fällen zahlen Sie mit 100 Servern im Vergleich zu 1 viel mehr in Wartung und Speicherplatz. Normalerweise muss die Balance zwischen Latenz und Verarbeitung gemessen werden, als Faustregel, wenn Sie viele senden müssen Daten, Sie könnten besser diesen Schritt in einen Dienst nicht trennen. Zum Glück haben Sie ein laufendes System, gegen das Sie messen, die meisten Leute müssen dies aus Spezifikationen allein zu schätzen wissen.

Betrachten Sie also Ihre Datenflussmuster und favorisieren Sie die Lokalität. Es ist eine Kunst, Ihre App auf Dienste zu reduzieren und nicht dagegen.

Sie könnten über das Lesen von Concurrent-Mustern interessiert sein, da dies genau das ist, worauf es ankommt.

2

Ich möchte Ebay architectural principles presentation und auch eine gute writeup auf der Präsentation empfehlen. Tatsächlich hat Ebay einen typischen serviceorientierten Ansatz gewählt. Dienste werden nach Funktionen extrahiert, sodass jeder Dienst unabhängig skaliert werden kann. Ich denke, es gibt einige gute Punkte, von denen Sie lernen können.

Verwandte Themen