2012-04-15 9 views
2

Laut der folgenden Stack Overflow-Frage: Does Django scale? Django eignet sich hervorragend für ein Web-Anwendungen, die Tausende von Benutzern pro Tag/Monat erwartet, aber um dies zu erreichen, müssen Sie die haben richtiges Design.Wie man eine Django-Site so umgestaltet, dass sie skalieren kann

Jetzt ist mein Szenario wie folgt:

Ich habe gerade ein Startup als Tech-Blei/Blei-Entwickler verbunden, und während ich 3 Jahre Erfahrung mit Django habe, habe ich es nie benutzen für so großen Maßstab App Die neueste große App, an der ich beteiligt war, verwendete Zope und verließ sich auf SQL Server, um das Caching usw. zu erledigen (meiner Meinung nach eine schreckliche Praktik). Angesichts der Tatsache, dass dieses Startup jetzt nur noch etwa 20.000 Benutzer hat, nachdem es bereits 6 Monate existiert hat, und da sie gleichzeitig einen Marketing-Spezialisten eingestellt haben, kann ich eine Wachstumschance erwarten (oder zumindest hoffen) . Ein großer Teil des bestehenden Django-Codes muss refactoring werden; dh mit statischen HTML-Formular anstelle von ModelForm, usw.

Meine Frage ist: wie ich diese App umgestalten, was sind die Entwurfsmuster, die ich befolgen sollte, um es richtig zu machen, so dass wir 100.000 bis 500.000 Benutzer sagen können pro Monat? Was sind einige Gottchas, auf die ich achten sollte? Was wird im Hinblick auf das Modelldesign als skalierbares Modelldesign angesehen? In Bezug auf DB-Unterstützung, welche Art von DB-Setup kann mir helfen, diese Skalierbarkeit zu erreichen? Welche Architektur eignet sich für den Load Balancing?

Ich nehme an, mit Django out of the box, werde dies nicht erreichen, und ich möchte mich nicht in einer Situation finden, in der ich fragen muss, einen Skalierbarkeitsexperten einzustellen ... Ich würde auch gerne wissen Was sind einige Lasttesttechniken/Tools, mit denen ich die aktuelle Leistung/Skalierbarkeit messen kann? Ich war nur ein paar Tage bei ihnen, also bin ich mir der Produktumgebung noch nicht sicher, also wenn ich das Gefühl hätte, dass ich das Produkt ändern müsste, was sind gute Optionen (Cloud-Lösungen), dass sind angemessen und doch bezahlbar?

Edit: Sie scheinen auch Ajax für alles zu verwenden und das hat mich beunruhigt. Angenommen, ich kann sie nicht davon überzeugen, das zu ändern, was sind einige gute Bibliotheken für Ajax-Techniken (ich kenne django-dajax/dajaxice), die verwendet werden können und immer noch skalierbar sind.

Dank,

Sam

+0

Ich fand diese Folie http://www.slideshare.net/mmalone/scaling-django-1393282 die hilfreich sind. Kann jemand seine Erfahrung mit einem Szenario teilen? Auch wenn jemand das Video der Dias fidden könnte, wäre ich sehr dankbar ... –

+3

Nur meine 2 Cent, ich habe das kürzlich von einem Django - Talk gehört ... "geh nicht weiter, finde den Engpass und finde den Dies ist die günstigste und einfachste Lösung, da sich Ihre Spezifikationen im Laufe der Zeit ändern und Sie in der Zwischenzeit unter Skalierungsproblemen leiden. Sie können die gesamte Site nicht anhalten, um alle Änderungen vorzunehmen. Sie haben Priorität. Finden Sie Ihren Engpass Die andere Sache ist es, die Verwendung von 3rd-Party-Apps so weit wie möglich zu vermeiden, es sei denn, die Apps sind wirklich seriös und Sie sind bereit, Entwicklerstunden zu investieren, da das Projekt tot sein kann. Keine Garantie. – CppLearner

Antwort

6

Leider gibt es in Ihrer Frage nicht viele Besonderheiten. Google-Suchen liefern viele Informationen zur Skalierung von Django.

http://www.morethanseven.net/2011/06/30/Django-performance-1-measuring-performance.html

Dieser Link bietet über 5 verschiedene Möglichkeiten, unterschiedliche Performance-Metriken zu messen. Da ich Ihnen keine Einzelheiten darüber mitteilen kann, wie Sie Ihre App skalieren können, finden Sie hier einige allgemeine gute Prinzipien für jede Website.

  1. Stellen Sie sicher, statische Medien wird von Ihrem Web-Server und nicht von django
  2. Sie alles erklären ist entscheidend Profil Stellen Sie sicher, serviert.
  3. Cache alles was du kannst. Speicher ist blitzschnell und Django macht es einfach zu implementieren.
  4. Achten Sie auf Django ORM-Fehler in Ihren Vorlagen. Verwenden Sie die django-debug-Symbolleiste, um sicherzustellen, dass Sie nicht versehentlich mehrere Abfragen ausführen, wenn Sie über Ergebnismengen iterieren.
  5. Für Datenbanken stellen Sie sicher, dass Ihre Daten normalisiert sind.
  6. Noch besser verwenden Sie ein CDN und stellen Sie sicher, dass Ihre Webserver und DB-Server auf separaten Rechnern sind.

Nicht vorzeitig optimieren !! Django kann mit A LOT out of the box umgehen. Ich mache mir keine Gedanken über Ajax- oder Modellformen oder irgendetwas anderes, es sei denn, Sie stellen fest, dass es sich um spezifische Engpässe für den Aufbau Ihrer Website handelt. Ich glaube, genauso wichtig wie die Leistung ist, dass Ihre Site modular, versionskontrolliert und leicht beweglich ist. Dies erleichtert die Entwicklung und wenn Sie groß genug werden, können Sie sofort neue Maschinen auf den Markt bringen.

+0

In Bezug auf Metriken und Testen, nachdem ich diese Frage gepostet habe, habe ich einige Google-Suchen durchgeführt und httperf und autobench gefunden, einen Perl-Wrapper für httperf, der eine CSV generiert, die grafisch dargestellt werden kann 5 Anfragen bis 50 gleichzeitige Anfragen, und insgesamt 500, und festgestellt, dass die Website nicht bei 25 und bei 35 reagiert. Ich möchte auch prüfen, Dinge, die hinter Login sind, wie das Abrufen von Benutzerprofilen und Suchen und Ähnliches –

+1

Ich fand auch dieses http://highscalability.com/scaling-django-web-apps-mike-malone, das mir ziemlich ein bisschen half, die Aufgaben zu verstehen, die ich nehmen muss. –

+0

Irgendwelche Beobachtungen über die von mir durchgeführten Tests und/oder Vorschläge für andere Tests? –