python matplotlib - Ist Django skalierbar?




legend title (25)

Ich glaube nicht, dass es wirklich um Djangos Skalierung geht.

Ich schlage vor, dass Sie in Ihre Architektur schauen, die Ihnen bei der Skalierung der Bedürfnisse helfen wird. Wenn Sie das falsch verstehen, gibt es keinen Hinweis darauf, wie gut Django funktioniert. Leistung! = Skala. Sie können ein System haben, das erstaunliche Leistung hat, aber nicht skaliert und umgekehrt.

Ist Ihre Anwendungsdatenbank gebunden? Wenn es dann ist, liegen auch Ihre Skalenprobleme dort. Wie planen Sie die Interaktion mit der Datenbank von Django? Was passiert, wenn Ihre Datenbank Anfragen nicht so schnell verarbeiten kann, wie Django sie akzeptiert? Was passiert, wenn Ihre Daten einen physischen Computer verlassen? Sie müssen berücksichtigen, wie Sie mit diesen Umständen umgehen wollen.

Was passiert außerdem, wenn Ihr Datenverkehr einen App-Server verlässt? Wie Sie in diesem Fall mit Sitzungen umgehen, kann schwierig sein. In den meisten Fällen benötigen Sie wahrscheinlich eine Shared Nothing-Architektur. Das hängt wiederum von Ihrer Anwendung ab.

Kurz gesagt: Sprachen bestimmen nicht den Maßstab, eine Sprache ist für die Leistung verantwortlich (wiederum abhängig von Ihren Anwendungen, unterschiedliche Sprachen funktionieren anders). Es ist Ihr Design und Ihre Architektur, die Skalierung zur Realität werden lässt.

Ich hoffe, es hilft, würde mich freuen weiter zu helfen, wenn Sie Fragen haben.

Ich baue eine Webanwendung mit Django. Die Gründe, warum ich Django gewählt habe, waren:

  • Ich wollte mit kostenlosen / Open-Source-Tools arbeiten.
  • Ich mag Python und fühle, dass es eine "Langzeit" -Sprache ist, während ich in Bezug auf Ruby nicht sicher war, und PHP schien mir ein riesiger Ärger zu sein.
  • Ich baue einen Prototyp für eine Idee und denke nicht zu viel über die Zukunft nach. Entwicklungsgeschwindigkeit war der Hauptfaktor und ich kannte Python bereits.
  • Ich wusste, dass die Migration auf Google App Engine einfacher wäre, sollte ich dies in Zukunft tun.
  • Ich hörte Django war "nett".

Jetzt, wo ich näher daran denke, über die Veröffentlichung meiner Arbeit nachzudenken, mache ich mir langsam Gedanken über die Skalierung. Die einzige Information, die ich über die Skalierungsfähigkeiten von Django fand, liefert das Django-Team (ich sage nichts, um sie zu ignorieren, aber das ist eindeutig keine objektive Information ...).

Meine Fragen:

  • Was ist die "größte" Seite, die heute auf Django gebaut wird? (Ich messe Größe meistens durch Benutzerverkehr)
  • Kann Django täglich mit 100.000 Benutzern umgehen, von denen jeder die Seite für ein paar Stunden besucht?
  • Könnte eine Site wie auf Django laufen?

Was ist die "größte" Seite, die heute auf Django gebaut wird? (Ich messe Größe meistens durch Benutzerverkehr)

In den USA, Mahalo . Mir wurde gesagt, dass sie ungefähr 10 Millionen Uniques pro Monat handhaben.

Im Ausland das Globo Netzwerk (ein Netzwerk von Nachrichten-, Sport- und Unterhaltungsseiten in Brasilien); Alexa zählt sie weltweit zu den Top 100 (derzeit etwa 80).

Andere bemerkenswerte Django-Benutzer gehören PBS, National Geographic, Discovery, NASA (eigentlich eine Reihe von verschiedenen Abteilungen innerhalb der NASA), und die Library of Congress.

Kann Django täglich mit 100.000 Nutzern umgehen, von denen jeder die Seite für ein paar Stunden besucht?

Ja - aber nur, wenn Sie Ihre Bewerbung richtig geschrieben haben und genügend Hardware haben. Django ist keine magische Kugel.

Könnte eine Site wie auf Django laufen?

Ja (aber siehe oben).

Technologisch, leicht: soclone für einen Versuch. Traffic-bezogen konkurrieren Pegs unter 1 Million Uniques pro Monat. Ich kann mindestens zehn Django-Sites mit mehr Traffic als SO nennen.



Ich war die andere Woche auf der EuroDjangoCon-Konferenz, und dies war das Thema einiger Gespräche - unter anderem von den Gründern der größten Django-basierten Website, Pownce (gleitet aus einem Vortrag here ). Die Hauptbotschaft ist, dass es sich nicht um Django handelt, sondern um Dinge wie ordentliches Caching, Load Balancing, Datenbankoptimierung usw.

Django hat tatsächlich Haken für die meisten dieser Dinge - Caching ist insbesondere sehr einfach.


Beachten Sie Folgendes: Wenn Sie 100 K Benutzer pro Tag erwarten, die stundenweise aktiv sind (dh max. 20 K + gleichzeitige Benutzer), werden Sie viele Server benötigen. SO hat ~ 15.000 registrierte Benutzer, und die meisten von ihnen sind wahrscheinlich nicht täglich aktiv. Während der Großteil des Traffics von nicht registrierten Nutzern stammt, gehe ich davon aus, dass nur wenige von ihnen länger als ein paar Minuten auf der Website bleiben (dh sie folgen den Google-Suchergebnissen und gehen dann).

Für dieses Volume erwarten Sie mindestens 30 Server ... was immer noch eine ziemlich schwere 1.000 gleichzeitige Benutzer pro Server ist.


Ich entwickle stark frequentierte Sites mit Django für den nationalen Sender in Irland. Es funktioniert gut für uns. Bei der Entwicklung einer leistungsstarken Website müssen Sie nicht nur ein Framework auswählen. Ein Framework wird nur ein Teil eines Systems sein, das so stark ist wie sein schwächstes Glied. Wenn Sie das neueste Framework 'X' verwenden, werden Ihre Leistungsprobleme nicht gelöst, wenn das Problem langsame Datenbankabfragen oder ein schlecht konfigurierter Server oder Netzwerk ist.


Wenn Sie Open Source verwenden möchten, gibt es viele Optionen für Sie. Aber Python ist das Beste unter ihnen, es hat viele Bibliotheken und eine super tolle Community. Dies sind Gründe, die Ihre Meinung ändern könnten:

  • Python ist sehr gut, aber es ist eine interpretierte Sprache, die es langsam macht. Aber es gibt viele Beschleuniger- und Caching-Dienste, die dieses Problem teilweise lösen.

  • Wenn Sie über eine schnelle Entwicklung nachdenken, ist Ruby on Rails am besten geeignet. Das Hauptmotto dieses (ROR) Frameworks ist es, den Entwicklern ein komfortables Erlebnis zu bieten. Wenn Sie Ruby und Python vergleichen, haben beide fast die gleiche Syntax.

  • Google App Engine ist ein sehr guter Dienst, der Sie jedoch in seinem Umfang bindet. Sie erhalten keine Chance, neue Dinge zu testen. Stattdessen können Sie die Digital Ocean Cloud verwenden, die nur 5 $ / Monat für das einfachste Droplet benötigt. Heroku ist ein weiterer kostenloser Service, bei dem Sie Ihr Produkt bereitstellen können.

  • Ja! Ja! Was Sie gehört haben, ist völlig korrekt, aber hier sind einige Beispiele, die andere Technologien verwenden

    • Schienen: Github, Twitter (früher), Shopify, Airbnb, Slideshare, Heroku usw.
    • PHP: Facebook, Wikipedia, Flickr, Yahoo, Tumbler, Mailchimp usw.

Fazit ist ein Rahmen oder Sprache wird nicht alles für Sie tun. Eine bessere Architektur, Design und Strategie geben Ihnen eine skalierbare Website. Instagram ist das größte Beispiel, dieses kleine Team verwaltet so große Datenmengen. Hier ist ein blog über seine Architektur muss es lesen.


Sehen Sie sich diesen Micro News Aggregator namens EveryBlock an .

Es ist vollständig in Django geschrieben. Tatsächlich sind sie die Leute, die das Django-Framework selbst entwickelt haben.


Was ist die "größte" Seite, die heute auf Django gebaut wird? (Ich messe Größe meistens durch Benutzerverkehr) Pinterest
disqus.com
Mehr hier https://www.shuup.com/en/blog/25-of-the-most-popular-python-and-django-websites/

Kann Django täglich mit 100.000 Benutzern umgehen, von denen jeder die Seite für ein paar Stunden besucht?
Ja, aber verwenden Sie die richtige Architektur, Datenbankdesign, Cache-Nutzung, Lastverteilung und mehrere Server / Knoten

Könnte eine Site wie auf Django laufen?
Ja, müssen Sie nur der Antwort in der 2. Frage folgen


Ein anderes Beispiel ist rasp.yandex.ru, der russische Transportfahrplanservice. Ihre Anwesenheit entspricht Ihren Anforderungen.


Ja, kann es. Es könnte Django mit Python oder Ruby on Rails sein. Es wird immer noch skalieren.

Es gibt wenige verschiedene Techniken. Erstens ist das Caching keine Skalierung. Sie könnten mehrere Anwendungsserver mit Nginx als Front zusätzlich zu Hardware-Balancer (n) ausbalanciert haben. Um auf der Datenbankseite zu skalieren, können Sie ziemlich weit mit read slave in MySQL / PostgreSQL gehen, wenn Sie den RDBMS-Weg gehen.

Einige gute Beispiele für stark frequentierte Webseiten in Django könnten sein:

  • Pownce als sie noch da waren.
  • Diskus (generischer gemeinsamer Kommentarmanager)
  • Alle mit der Zeitung verbundenen Websites: Washington Post und andere.

Sie können sich sicher fühlen.



Teufels Anwalt ein wenig spielen:

Sie sollten die DjangoCon 2008 Keynote von Cal Henderson mit dem Titel "Why I hate Django" besuchen , wo er ziemlich viel über alles, was Django fehlt, liest , was Sie vielleicht in einer stark frequentierten Website tun möchten. Am Ende des Tages muss man das alles mit Offenheit tun, denn es ist durchaus möglich, Django-Apps zu schreiben, die skalierbar sind, aber ich fand es eine gute Präsentation und relevant für deine Frage.


Die größte Django-Site, die ich kenne, ist die Washington Post , was sicherlich darauf hindeutet, dass sie gut skalierbar ist.

Gute Design-Entscheidungen haben wahrscheinlich einen größeren Einfluss auf die Performance als alles andere. Twitter wird oft als eine Seite zitiert, die die Performance-Probleme mit einem anderen dynamisch interpretierten sprachbasierten Web-Framework, Ruby on Rails, verkörpert - dennoch haben Twitter-Ingenieure festgestellt, dass das Framework nicht so sehr ein Problem ist als einige der Datenbankdesign-Entscheidungen, die sie früh getroffen haben auf.

Django funktioniert sehr gut mit memcached und bietet einige Klassen für die Verwaltung des Cache, wo Sie die meisten Ihrer Leistungsprobleme lösen würden. Was Sie auf dem Draht liefern, ist in der Realität fast wichtiger als Ihr Backend - die Verwendung eines Tools wie yslow ist entscheidend für eine leistungsstarke Webanwendung. Sie können immer mehr Hardware in Ihr Back-End werfen, aber Sie können die Bandbreite des Benutzers nicht ändern.


Hier ist eine Liste einiger relativ hochkarätiger Dinge, die in Django gebaut wurden:

  1. The Guardian's " Untersuchen Sie Ihre MP Ausgaben " App

  2. Politifact.com (hier ist ein Blogbeitrag , der über die (positive) Erfahrung spricht. Site gewann einen Pulitzer.

  3. NY Times ' Represent app

  4. EveryBlock

  5. Peter Harkins, einer der Programmierer bei WaPo, listet alle Sachen auf, die er mit Django in seinem Blog erstellt hat

  6. Es ist ein bisschen alt, aber jemand von der LA Times gab einen grundlegenden Überblick darüber, warum sie mit Django zusammen waren.

  7. Der AV Club der Onion wurde kürzlich von Drakal nach Django verlegt.

Ich kann mir vorstellen, dass eine Anzahl dieser Seiten wahrscheinlich weit über 100.000 Treffer pro Tag erreicht. Django kann sicher 100k Hits / Tag und mehr machen. Aber YMMV in Ihre bestimmte Website dort je nachdem, was Sie bauen.

Es gibt Caching-Optionen auf der Django-Ebene (zum Beispiel Caching von Query-Sets und Ansichten in memcached kann Wunder wirken) und darüber hinaus (Upstream-Caches wie Squid ). Database Server Spezifikationen sind auch ein Faktor (und in der Regel der Ort zu protzen), wie gut Sie es abgestimmt haben. Nehmen Sie zum Beispiel nicht an, dass Django die Indizes richtig einrichtet. Gehen Sie nicht davon aus, dass die PostgreSQL oder MySQL Standardkonfiguration die richtige ist.

Darüber hinaus haben Sie immer die Möglichkeit, mehrere Anwendungsserver mit Django zu betreiben, wenn dies der langsamste Punkt ist, mit einem Software- oder Hardware-Lastenausgleich.

Stellen Sie statische Inhalte auf demselben Server wie Django bereit? Verwenden Sie Apache oder etwas wie nginx oder lighttpd ? Können Sie es sich leisten, ein CDN für statische Inhalte zu verwenden? Das sind Dinge, über die man nachdenken sollte, aber alles ist sehr spekulativ. 100k Hits / Tag ist nicht die einzige Variable: Wie viel möchten Sie ausgeben? Wie viel Know-how verwalten Sie all diese Komponenten? Wie viel Zeit hast du, um alles zusammen zu ziehen?


Wir machen jetzt Lasttests. Wir denken, dass wir 240 gleichzeitige Anfragen (eine anhaltende Rate von 120 Treffern pro Sekunde 24x7) ohne signifikante Verschlechterung der Serverleistung unterstützen können. Das wären 432.000 Treffer pro Stunde. Die Antwortzeiten sind nicht gering (unsere Transaktionen sind groß), aber es gibt keine Verschlechterung unserer Baseline-Leistung, wenn die Last steigt.

Wir verwenden Apache Front-End Django und MySQL. Das Betriebssystem ist Red Hat Enterprise Linux (RHEL). 64-Bit. Wir verwenden mod_wsgi im Daemon-Modus für Django. Wir haben keine Cache- oder Datenbankoptimierung vorgenommen, außer die Standardwerte zu übernehmen.

Wir sind alle in einer VM auf einem 64-Bit-Dell mit (ich denke) 32 GB RAM.

Da die Leistung für 20 oder 200 gleichzeitige Benutzer fast gleich ist, müssen wir nicht viel Zeit für das "Tweaken" aufwenden. Stattdessen müssen wir unsere Basisleistung durch normale SSL-Leistungsverbesserungen, gewöhnliches Datenbankdesign und -implementierung (Indexierung usw.), normale Firewall-Leistungsverbesserungen usw. aufrechterhalten.

Was wir messen, sind unsere Lasttest-Laptops, die unter der wahnsinnigen Arbeitslast von 15 Prozessen leiden, die 16 gleichzeitige Threads von Anfragen ausführen.



Wie in High Performance Django Book angegeben, geben Sie hier die Linkbeschreibung ein und gehen Sie durch dieses Cal Henderson

Weitere Details siehe unten:

Es ist nicht ungewöhnlich, dass Leute sagen "Django skaliert nicht". Je nachdem, wie Sie es betrachten, ist die Aussage entweder völlig wahr oder offensichtlich falsch. Django allein ist nicht skalierbar.

Dasselbe gilt für Ruby on Rails, Flask, PHP oder jede andere Sprache, die von einer datenbankbasierten dynamischen Website verwendet wird.

Die gute Nachricht ist jedoch, dass Django wunderbar mit einer Reihe von Caching- und Load-Balancing-Tools interagiert, die es erlauben, so viel Verkehr wie möglich zu skalieren.

Im Gegensatz zu dem, was Sie möglicherweise online gelesen haben, kann es dies tun, ohne Kernkomponenten zu ersetzen, die oft als "zu langsam" bezeichnet werden, wie z. B. das Datenbank-ORM oder die Vorlagenschicht.

Disqus bedient über 8 Milliarden Seitenaufrufe pro Monat. Das sind einige große Zahlen.

Diese Teams haben bewiesen, dass Django durchaus skalierbar ist. Unsere Erfahrung hier bei Lincoln Loop unterstützt es.

Wir haben große Django-Seiten gebaut, die den Tag auf der Reddit-Homepage verbringen können, ohne ins Schwitzen zu geraten.

Djangos Skalierungserfolge sind fast zu zahlreich, um sie hier aufzulisten.

Es unterstützt Disqus, Instagram und Pinterest. Willst du noch mehr Beweise? Instagram konnte über 30 Millionen Nutzer auf Django mit nur 3 Ingenieuren (von denen 2 keine Backend-Entwicklung hatten) unterhalten


Nicht sicher über die Anzahl der täglichen Besuche, aber hier sind ein paar Beispiele für große Django-Sites:

Screencast zur Bereitstellung von django mit Skalierung im Hinterkopf http://ontwik.com/python/django-deployment-workshop-by-jacob-kaplan-moss/

Hier ist ein Link zur Liste der stark frequentierten Django-Sites auf Quora .


Ich bin mir sicher, dass Sie nach einer solideren Antwort suchen, aber die offensichtlichste objektive Bestätigung, die ich mir vorstellen kann, ist, dass Google Django zur Verwendung mit seinem App Engine- Framework drängt. Wenn jemand regelmäßig über Skalierbarkeit Bescheid weiß und sich mit Skalierbarkeit befasst, ist es Google. Nach allem, was ich gelesen habe, scheint der limitierende Faktor das Datenbank-Backend zu sein, weshalb Google seine eigenen ...


Auch wenn es hier viele gute Antworten gegeben hat, möchte ich darauf hinweisen, dass niemand betont hat ..

Es hängt von der Anwendung ab

Wenn Ihre Anwendung schreibgeschützt ist, lesen Sie viel mehr Daten aus der Datenbank als Sie schreiben. Dann sollte das Skalieren von Django ziemlich trivial sein, verdammt, es kommt mit einigermaßen anständigen Output / View Caching direkt aus der Box. Nutzen Sie das und sagen Sie, Redis als Cache-Provider, stellen Sie einen Load-Balancer vor, spin-up n-Instanzen und Sie sollten in der Lage sein, mit sehr viel Verkehr umzugehen.

Nun, wenn Sie Tausende von komplexen Schreibvorgängen pro Sekunde durchführen müssen? Andere Geschichte. Wird Django eine schlechte Wahl sein? Nun, nicht unbedingt, hängt davon ab, wie Sie Ihre Lösung wirklich gestalten, und auch, was Ihre Anforderungen sind.

Nur meine zwei Cent :-)


Heute verwenden wir viele Web-Apps und Websites für unsere Bedürfnisse. Die meisten von ihnen sind sehr nützlich. Ich werde Ihnen einige davon zeigen, die von Python oder Django benutzt werden.

Washington Post

Die Website der Washington Post ist eine sehr beliebte Online-Nachrichtenquelle, um ihre Tageszeitung zu begleiten. Seine riesige Menge an Ansichten und Verkehr kann durch das Django Web-Framework leicht gehandhabt werden. Washington Post - 52.2 million unique visitors (March, 2015)

NASA

Die offizielle Website der Nationalen Luft- und Raumfahrtbehörde (NASA) ist der Ort, an dem Nachrichten, Bilder und Videos über ihre laufende Weltraumforschung zu finden sind. Diese Django-Website kann große Mengen an Views und Traffic problemlos bewältigen. 2 million visitors monthly

Der Wächter

The Guardian ist eine britische Nachrichten- und Medien-Website, die der Guardian Media Group gehört. Es enthält fast den gesamten Inhalt der Zeitungen The Guardian und The Observer. Diese riesigen Daten werden von Django verarbeitet. The Guardian (commenting system) - 41,6 million unique visitors (October, 2014)

YouTube

Wir alle kennen YouTube als den Ort, um Katzenvideos hochzuladen und scheitern. Als eine der beliebtesten Websites, die es gibt, bietet sie uns endlose Stunden Videounterhaltung. Die Python Programmiersprache macht es und die Funktionen, die wir lieben.

DropBox

DropBox startete das Online-Dokument, das eine Revolution speichert, die Teil des täglichen Lebens geworden ist. Wir speichern jetzt fast alles in der Cloud. Dropbox ermöglicht es uns, fast alles zu speichern, zu synchronisieren und zu teilen, indem wir die Möglichkeiten von Python nutzen.

Umfrage-Affe

Survey Monkey ist das größte Online-Umfrageunternehmen. Sie können jeden Tag über eine Million Antworten auf ihrer neu geschriebenen Python-Website verarbeiten.

Quora

Quora ist die Nummer eins online, um eine Frage zu stellen und Antworten von einer Gemeinschaft von Einzelpersonen zu erhalten. Auf ihrer Python-Website werden relevante Ergebnisse von diesen Community-Mitgliedern beantwortet, bearbeitet und organisiert.

Bitly

Ein Großteil des Codes für Dienste und Analysen zur Bitly-URL-Verkürzung wird mit Python erstellt. Ihr Service kann Hunderte von Millionen von Ereignissen pro Tag verarbeiten.

Reddit

Reddit ist bekannt als die erste Seite des Internets. Es ist der Ort online, um Informationen oder Unterhaltung auf der Grundlage von Tausenden von verschiedenen Kategorien zu finden. Posts und Links werden vom Benutzer generiert und durch Stimmen an die Spitze befördert. Viele Funktionen von Reddit basieren auf Python für ihre Funktionalität.

Hipmunk

Hipmunk ist eine Online-Verbraucher-Reise-Website, die die Top-Reise-Websites vergleicht, um Ihnen die besten Angebote zu finden. Mit den Tools dieser Python-Website finden Sie die günstigsten Hotels und Flüge für Ihr Reiseziel.

Klicken Sie hier für mehr: 25-of-the-most-popular-python-and-django-websites , What-are-some-well-known-sites-running-on-Django


  1. "Was sind die größten Websites, die heute auf Django gebaut wurden?"

    Es gibt keinen einzigen Ort, an dem Informationen über den Verkehr auf Django-Baustellen gesammelt werden. Daher muss ich einen Blick darauf werfen, indem ich Daten von verschiedenen Standorten verwende. Zuerst haben wir eine Liste von Django-Sites auf der Hauptseite der Django-Projektseite und dann eine Liste von Django-Sites auf djangosites.org . Wenn ich die Listen durchblättere und einige auswähle, von denen ich weiß, dass sie ordentlich Verkehr haben, sehen wir:

  2. "Kann Django täglich mit 100.000 Benutzern umgehen, von denen jeder für ein paar Stunden die Seite besucht?"

    Ja, siehe oben.

  3. "Könnte eine Site wie auf Django laufen?"

    Mein Bauchgefühl ist ja, aber wie andere antworteten und Mike Malone in seinem Vortrag erwähnt, ist das Datenbankdesign entscheidend. Starke Beweise können auch unter www.cnprog.com gefunden werden, wenn wir zuverlässige Verkehrsstatistiken finden können. Wie auch immer, es ist nicht nur etwas, was passieren wird, wenn man einen Haufen Django-Modelle zusammenschmeißt :)

Es gibt natürlich noch viel mehr interessante Seiten und Blogger, aber ich muss irgendwo aufhören!

Blog-Post über Verwenden von Django zum Aufbau von High-Traffic-Site michaelmoore.com als Top 10.000 Website beschrieben . Quantcast-Statistiken und Statistiken von compete.com .

(*) Der Autor des Editiervorgangs, einschließlich eines solchen Verweises, wurde verwendet, um als ausgelagerter Entwickler in diesem Projekt zu arbeiten.



Danke Garth. Ich hatte gesehen, dass Djangosearch die offizielle Django-Suche werden wollte, aber ich zögerte, es zu benutzen, weil ich keine Dokumentation finden konnte! Glücklicherweise gibt es eine README in Subversion , die ich vorher noch nicht gesehen habe, und die API sieht sehr cool aus:

# set up the model
class Event(models.Model):
    title = models.CharField(max_length=255)
    date = models.DateField()
    is_outdoors = models.BooleanField()

    index = djangosearch.ModelIndex(text=['title'], 
                                    additional=['date', 'is_outdoors'])

# run a search
results = Event.index.search("django conference")




python django web-applications scalability