Frage brauche Beratung zum Aufbau einer skalierbaren Architektur für Moodle


Ich bin dabei, eine Architektur für eine Moodle-basierte Bildungsseite zu entwerfen, die zunächst mehrere tausend Nutzer bedienen wird, aber in der Lage sein muss, Hunderttausende bis Millionen von Nutzern in mehreren Ländern zu unterstützen.

Ich dachte an einen Load Balancer, um Anfragen an mehrere Webserver zu verteilen. Die Webserver können geteilt werden, indem einige statische und einige dynamische Inhalte bedient werden. Dann ist es an einen Mysql-Master-Knoten zu schreiben und von Slave-Knoten zu lesen.

Welche Art von Load Balancer wird gut mit Moodle funktionieren, sollte ich eine Hardware-Load-Balancer-Lösung von einem der Anbieter erhalten oder selbst eine mit Open-Source-Lösung wie LVS oder Reverse-Proxy erstellen?

Ich plante, Apache Server zu verwenden, um die Webseiten zuerst zu dienen, dann, wenn Lasten höher werden, geteilt in lighttpd Webserver für statischen Inhalt und Apache Anwendungsserver für dynamischen Inhalt. Sachen wie Gzip-Komprimierung, Tintenfisch-Cache, Memcache werden ebenfalls bereitgestellt, falls erforderlich.

Muss ich für die Webserver-Hardware einen Single-Socket-Server oder eine Blade-Lösung verwenden? Welche wird am Ende billiger zu laufen und zu erweitern sein? Supermicro hat ein interessantes Produkt mit Twin Servern in 1u Chassis und 4 Servern in 2U Chassis mit Infiniband. Hat jemand diesen Server schon einmal ausprobiert?

Für die Speicherung sollte ich einen SAN oder Storage Server wie Sun Unified Storage 7000 verwenden. Für ein MySQL-Cluster-Setup sollte ich zwei verschiedene Speichersysteme haben, die für den schreibenden Zugriff des Master-Knotens und eine andere für den Slave zum Lesen verwendet werden? Oder sollten alle Knoten einen separaten Speicher haben?

Da diese Website wahrscheinlich mehr Leseoperationen benötigt, sollte man sich Gedanken über die Cluster- und Speicherkonfiguration von MySQL machen.

Für den Managementteil plane ich dsh, ganglia, nagios, splunk, kickstart.

Als Backup plane ich einen LTO Tape Autoloader. Diese Website wird hauptsächlich für die Region Asien genutzt, so dass es nachts mehrere Stunden wenig Verkehr geben wird. Was ist der beste Weg, um einen MySQL-Cluster zu sichern? Kann ich den Schreibvorgang vorübergehend deaktivieren und den Master herausnehmen, um das Backup durchzuführen?

Bitte geben Sie an, wenn Sie Erfahrung mit der Einrichtung einer solchen skalierbaren Website haben. Die meiste Erfahrung habe ich mit großen Unix-Boxen oder kleineren eigenständigen Unix / Linux-Boxen gemacht. Diese Art der Implementierung ist also für mich das erste Mal.

Vielen Dank

Robert.


5
2017-09-02 06:13


Ursprung




Antworten:


Robert, du bist eindeutig ein kluger Typ, aber respektvoll, hol dir einen Berater mit vorherigem Fachwissen, oder fang an, etwas Kleines zu bauen und schau, wo es dich hinführt. Es gibt keine Möglichkeit, deinen Beitrag zu beantworten. es hat zu viele abstrakte Konzepte und keine harten Zahlen.

Ein paar Gedanken:

wird mehrere tausend Benutzer bedienen   zuerst ... wachsen, um Hunderte von zu unterstützen   Tausende bis Millionen von Benutzern

Beweisen Sie, dass Sie diese Skalierungsstufe zuerst benötigen. Erstellen Sie keine Scale-Out-Architektur im Vorgriff auf Benutzer, die nie auftauchen. Tut mir leid, wenn ich hart klingen mag, aber 99% aller Websites wachsen nicht bis zum großen Ende der Skala. Siehe Stapelüberlauf / Serverfehler; Sie bedienen monatlich eine Million Benutzer von einer Handvoll ziemlich konventioneller Server.

Soll ich einen Hardware Load Balancer bekommen?   Lösung von einem der Anbieter, oder   baue mich selbst mit Open Source   Lösung

Abhängig von Ihren Fähigkeiten und Ihrer Situation in Bezug auf Zeit und Geld. Einmal gebaut, funktionieren Open Source und kommerzielle Angebote ziemlich genau gleich. Kommerzielle Lösungen haben tendenziell bessere Statistiken und schönere Managementschnittstellen.

Für die Webserver-Hardware sollte ich   Verwenden Sie einen einzelnen Socket-Server oder einen   Klingenlösung?

Fragen Sie Ihren Serveranbieter nach Preisen. Fragen Sie Ihr Rechenzentrum nach der Leistungsdichte, d. H. Nach dem bevorzugten Verhältnis zwischen Größe und Stromverbrauch - oft sind Sie leistungsbegrenzt, sodass eine dichte Lösung wie Blades möglicherweise nichts gewinnen kann.

Für den Speicher sollte ich ein SAN oder verwenden   Speicherserver wie Sun vereinheitlicht   Speicher 7000 wird ausreichen.

Holen Sie sich SAN, wenn Sie nachweislich SAN benötigen; Dann werden Sie auch besser verstehen, was Ihr SAN für Sie lösen sollte.

Da diese Website wahrscheinlich mehr sein wird   schwer auf Leseoperationen, was   sollte berücksichtigt werden für die   MySQL Cluster- und Storage-Setup?

Erstellen Sie eine wirklich gute Caching-Lösung. Entweder vollständiges Seiten-Caching wie Squid (Varnish) oder Anwendungsdaten-Caching wie Memcached oder eine Kombination aus beidem. Ziehen Sie die Cache-Invalidierung in Betracht, könnten Sie Inhalte schnell aus Ihren Caches löschen müssen, um eine erneute Bereitstellung zu vermeiden?

Was ist der beste Weg, um ein Backup zu machen?   MySQL-Cluster?

Die Meinungen sind unterschiedlich, aber ein gemeinsamer Ansatz besteht darin, einen dedizierten Slave MySQL nur für Backups zu verwenden und für eine selbst geschriebene Backup-Lösung so etwas wie InnoBackup oder Maatkit zu verwenden.

Bearbeiten: Wenn du das jetzt wirklich von Grund auf aufbauen willst, dann nimm bitte ein guter Blick auf Cloud Computing vor dem Begehen. Beim Cloud Computing geht es nicht nur um Skalierbarkeit, auch wenn Skalierbarkeit eine große Stärke ist. Bestimmte Dienste, die Teil des Pakets sind, können die tägliche Arbeit erleichtern. Einige Beispiele:

  • Live-Snapshots von Amazon EBS-Volumes ermöglichen einfache Datenbanksicherungen.
  • Amazon hat Load Balancing als einen Satz und vergessen Sie den Dienst (natürlich mehr Feature begrenzt als gute selbst gehostete Load Balancer, aber leicht zu beginnen mit).
  • Rightscale verfügt über eine umfangreiche Serverüberwachung, die in ihre Images integriert ist, was eine einfache Kapazitätsplanung / Anwendungsintrospektion ermöglicht.

4
2017-09-02 10:26



Jesper, du hast recht damit, etwas für Benutzer zu bauen, die nie auftauchen, das ist auch mein Rat. was ich versuche zu tun ist, um eine Idee auf dem Weg zu einer Scale-Out-Architektur in Erwartung der besten Wachstumsprognose im Business-Plan zu implementieren. Gleichzeitig wurde die Verschwendung von Hardwarekosten während des Projektbeginns minimiert. Danke für all deine Tipps übrigens. - Robert


Obwohl ich nicht viel über die Besonderheiten von Moodle weiß, kann ich einige Tipps für die allgemeine Skalierbarkeit geben.

Blades und SANs werden oft von Anbietern falsch verkauft. Ich vermute, dass ein Cluster von 1U-Commodity-Servern wahrscheinlich der beste für Ihre Bedürfnisse sein würde. Es gibt eine Reihe von Rechenzentren, in denen keine Blade-Systeme benötigt werden, da die Leistungsaufnahme sehr hoch ist und die Kühlanforderungen auch sehr bedürftig sind!

Ich bin ein großer Fan von Glanz Für verteilte / replizierte Speicher könnte es interessant sein, sie als Alternative zu einer SAN-Lösung eines großen Anbieters zu untersuchen.

Ein ganzer Stapel von HP DL360s würde genauso gut funktionieren (oder billigere Commodity-Server (ich empfehle DNUK)). Ich bezweifle ernsthaft, dass Sie Infiniband-Verbindungen zwischen Ihren Servern benötigen (die Infrastruktur ist teuer und für Web-Serving-Zwecke größtenteils unnötig. Wenn Sie HPC-Modellierung des Genomexpressionsmodells durchführen würden, könnte meine Antwort anders sein!)

Im Hinblick auf die Netzwerkinfrastruktur (wenn Sie das ebenfalls in Betracht ziehen müssen), empfehle ich Cisco-Router mit Cisco Catalyst-Switches oder HP Procurves (ziemlich gleichmäßig abgestimmt, IMO und billiger).

Was den Lastenausgleich betrifft, wird ein dedizierter Linux-Server, auf dem LVS läuft, problemlos den Verkehr zu mehreren Cluster-Knoten handhaben. Wenn Sie das Geld ($ 30k +) hätten, dann könnte ein Citrix-Nescaler die richtige Caching / Acceleration / Load-Balancing-Plattform sein, aber bedenken Sie, dass Sie 2 (idealerweise 3) für Redundanz benötigen.

Sie sollten wahrscheinlich versuchen, Memcache von Anfang an einzuschließen, es ist einfach, Skalierbarkeit hinzuzufügen, und verbessert die Caching-Leistung erheblich, besonders beim Lesen von einem MySQL-Datenbank-Cluster. Es gibt noch andere Dinge, die Sie tun können, um Ihre MySQL-Performance zu optimieren, wie InnoDB über MyISAM zu verwenden.

Ich vermute, Sie wären besser mit einem Reverse-Proxy-Cache, wie Varnish, im Gegensatz zu Squid, die besser als Client-Side-Cache funktioniert.
Sie könnten ganz einfach ein paar dedizierte Varnish-Cache-Knoten haben oder Varnish auf demselben Server wie die Apache / Lighttpd-Server ausführen.

Versuchen Sie zu verhindern, dass Sie in einen Zustand geraten, in dem Sie eine Herstellerbindung erhalten, da dies bei Lizenzproblemen sehr teuer werden kann. Es ist sehr gut möglich, eine skalierbare Site mit freier / Open-Source-Software zu erstellen. Natürlich sind Software Load Balancer nicht so schnell wie Hardware mit dedizierten ASICs, aber mit einer guten Netzwerkinfrastruktur kann es ziemlich nahe kommen.

Für den Managementteil plane ich dsh, ganglia, nagios, splunk, kickstart.

Sie müssen nur eine Puppe zu dieser Liste hinzufügen, und Sie sind auf einen Gewinner. Achten Sie auf die teure Lizenzierung von Splunk (wenn Sie 10 GB GB Logs pro Tag verarbeiten, kann es Sie beißen).

Munin ist ein großartiges kostenloses Überwachungstool und hat Vorteile gegenüber Apps wie Zabbix, da es automatisch Grafiken aus dem Plugin-Skript konfigurieren kann (damit Sie nicht im Voraus verfolgen müssen, was Sie überwachen).


1
2017-09-02 10:33



Ich dachte an Gigabit-Netzwerk für die Server-Kommunikation, 100 MB für Management-Netzwerk. und wenn mysql Cluster größer wird, implementieren Sie 10gigabit Netzwerk für die Cluster-Kommunikation. von meiner Forschung auf MySQL Leistung gesehen, dass es viele dieser Meinung sind, dass die aktuelle Version nicht gut skaliert auf Server mit einer großen Anzahl von Kern. bis zum nächsten Jahr Mainstream-Server wird Dual-8-Core-Prozessor und bis zu 200 + GB maximaler Speicher haben. Es gibt auch Design von 8 Socket Machice für Nehalem, die die Thread-Anzahl auf 128 schieben wird. Wird MySQL von diesen großen Anzahl von Kern profitieren? - Robert
WRT MySQL, es ist ein Scale-Out-Scale-Up-Problem. Ich habe normalerweise Architekturen gesehen, in denen Sie mehrere ziemlich Low-End-Slaves und einen mächtigen Master haben. Vielleicht ist es das Beste, sich einige Benchmarks anzusehen (ich bin mir ziemlich sicher, dass Sun einige auf ihrem Tech-Blog veröffentlicht hat). - Tom O'Connor


Obwohl ich noch nie ein Moodle-System verwaltet habe, das als groß angesehen werden könnte (höchstens eins mit ein paar tausend aktiven Benutzern) und ich bin mir fast sicher, dass Sie mehr Linux-Erfahrung haben als ich, kann ich einige Beobachtungen anbieten.

Eine Moodle-Installation mit Millionen von Benutzern wäre eine Größenordnung größer als alle anderen, von denen ich gehört habe. Selbst die Open University mit Studenten aus Großbritannien und der Welt erwartet nur 200.000 Nutzer. Große US-Universitäten haben in der Regel nur Zehntausende von Nutzern. Für eine gute Idee der Größe werfen Sie einen Blick auf http://docs.moodle.org/de/Large_installations Wirst du Ja wirklich Millionen von Menschen das System nutzen? Werden sie alle auf einmal erscheinen oder sich allmählich über Jahre einschreiben? Sie brauchen kein System, das mit Millionen umgehen kann, wenn Sie im ersten Jahr nur 10.000 bekommen. Darüber hinaus haben viele Institutionen eine theoretische Anzahl von Studenten, die Moodle verwenden werden, aber nur ein kleiner Prozentsatz von denen, die das System tatsächlich benutzen. Kurz gesagt, fangen Sie klein an und vergrößern Sie.

Eine Linux-Distribution wird das Leben bei der Verwaltung von Moodle erleichtern. Die verfügbare Online-Community-Hilfe ist überhaupt nicht auf Windows ausgerichtet!

Ziehen Sie in Erwägung, einen lokalen Moodle-Partner zu rekrutieren (Entschuldigung, ich bin neu und kann diesen zweiten Link nicht veröffentlichen), wenn Sie das ernst meinen. Sie können Beratung basierend auf persönlichen Erfahrungen bei der Einrichtung und Verwaltung von Moodle-Systemen anbieten.

Moodle ist im Allgemeinen sehr einfach auf Systemressourcen. Beobachten Sie einfach die Datenbanken, da die Transaktionsrate sehr groß sein kann. Sie haben es nicht erwähnt, aber ziehen Sie in Betracht, db-Server vom Webserver zu trennen und Ressourcen auf das Clustering der db zu konzentrieren. Beim Caching (Eaccelerator oder Memcached) ist der Web-Zugriff vernachlässigbar. Der Dateispeicher ist in der Regel nicht besonders intensiv und eine Verbindung zu einem ordentlichen Raid-Array, lokal oder auf einer separaten Maschine, ist alles was benötigt wird. Wenn Sie ein SAN haben, verwenden Sie es. Wenn nicht, bleib einfach bei einfachen Sachen.

Wie immer, Backup, Backup, Backup!

Viel Glück!


1
2017-09-02 13:45



Die Millionen Benutzer können nicht in zwei oder drei Jahren passieren, wenn überhaupt. Ich werde mit einem kleineren Web- und Datenbankserver beginnen, dann mehr Webserver einwerfen und den Datenbankcluster konfigurieren. Die Planung für das ist die flexible Einrichtung, wenn die Website wirklich super beliebt wird. Ich glaube, dass der aktuell verfügbare Server so stark geworden ist, dass ein 2u Web Server und ein 4u Datenbank Server in der Lage sind, ein paar Tausend Anfragen pro Sekunde zu verarbeiten. Das Problem, das ich mir für diese Seite vorstellen kann, ist die Zeit vor der Prüfung, in der es eine Nutzungsspitze geben wird. - Robert
Eine Frage mit Cachespeichern, wenn auf Anwendungsebene Caching stattfindet, wird auf Datenbankebene zwischengespeichert, um die Leistung zu verbessern. - Robert