Tigase XMPP Server auf Amazon EC2 skalieren

8

Hat jemand Erfahrung darin, geclusterte Tigase XMPP-Server auf Amazon EC2 , in erster Linie möchte ich etwas wissen, das mich auffallen könnte, was nicht offensichtlich ist. (Zum Beispiel kann das Ausführen von Ejabberd auf EC2 Probleme aufgrund von Mnesia verursachen.)

Oder wenn Sie allgemeine Ratschläge zum Installieren und Ausführen von Tigase auf Ubuntu haben.


Zusätzliche Informationen:

Das von mir entwickelte System verwendet XMPP nur, um (fast in Echtzeit) zwischen einer mobilen App und dem / den Server (n) zu kommunizieren.

Die Anzahl der Benutzer wird anfangs klein sein, aber hoffentlich wird sie wachsen. Aus diesem Grund muss das System skalierbar sein. Vermutlich für nur ein paar tausend Benutzer würden Sie keine cc1.4xlarge EC2-Instanz benötigen? (Sonst wird es sehr teuer zu laufen!)

Ich plane die Verwendung einer MySQL-Datenbank, die in Amazon RDS für die XMPP-Server-Datenbank gehostet wird.

Ich plane auch, eine externe XMPP-Komponente in Python zu erstellen, die SleekXMPP verwendet. Es wird diese externe Komponente sein, die die gesamte 'Arbeit' des Servers erledigt, da die Anwendung, die ich mache, ganz anders ist als Instant Messaging. Für diesen Teil habe ich nicht herausgefunden, wie man eine externe XMPP-Komponente, die in Python geschrieben wurde, mit einem Tigase-Server verbindet. Die Dokumentation scheint darauf hinzuweisen, dass Komponenten speziell für Tigase geschrieben wurden - und nicht für einen allgemeinen XMPP-Server, der XEP-0114: Jabber Component-Protokoll , wie ich es erwartet hatte.

Mit dieser zusätzlichen Information, wenn Sie an etwas anderes denken können, was ich wissen sollte, würde ich mich freuen zu wissen.

Danke:)

    
Jon Cox 29.12.2011, 16:12
quelle

1 Antwort

25

Ich habe viel Erfahrung. Ich denke, es gibt eine Menge nicht offensichtlicher Probleme. Wie die einzige zuverlässige Instanz, um eine Anwendung wie Tigase auszuführen, ist cc1.4xlarge. Andere verursachen Probleme mit der CPU-Verfügbarkeit und das ist nur eine Lotterie, ob Sie das Glück haben, Ihren Dienst auf einem Server zu betreiben, der nicht mit anderen Leuten beschäftigt ist.

Sie benötigen auch eine Instanz mit dem höchstmöglichen I / O, um sicherzustellen, dass sie den Netzwerkverkehr bewältigen kann. Der High-I / O gilt speziell für die Datenbankinstanz.

Nicht sicher, ob das offensichtlich ist oder nicht, aber es gibt dieses Problem mit Hostnamen auf EC2, jedes Mal, wenn Sie die Hostnamenänderungen und IP-Adressänderungen starten. Tigase-Cluster reagiert sehr empfindlich auf Hostnamen. Es gibt eine Möglichkeit, den Hostnamen für die Instanz zu erzwingen / zu ändern. Dies könnte das Problem umgehen.

Natürlich spreche ich von einem Cluster für Millionen von Online-Benutzern und 100k XMPP-Paketen mit wirklich hohem Datenverkehr pro Sekunde oder mehr. Im Allgemeinen ist es bei einer großen Installation viel billiger und effizienter, dedizierte Server zu haben.

Im Allgemeinen läuft Tigase auf Amazon EC2 sehr gut, aber Sie brauchen wirklich den neuesten SVN-Code, da viele Optimierungen hinzugefügt wurden, besonders nach Tests in der Cloud. Wenn Sie weitere Details zu Ihrem Service angeben, kann ich weitere Vorschläge haben.

Weitere Kommentare:

Wenn es um Kosten geht, ist ein dedizierter Server immer billiger Option für ständig laufenden Dienst. Sofern Sie nicht beabsichtigen, die Server stündlich ein- und auszuschalten, würde ich Ihnen einen speziellen Service empfehlen. Die Kosten sind niedriger und die Leistung ist viel besser vorhersehbar.

Wenn Sie jedoch wirklich bei Amazon EC2 bleiben wollen / müssen, lassen Sie mich einige konkrete Zahlen nennen. Unten finden Sie eine Liste von Instanzen und wie viele Online-Benutzer der Cluster zuverlässig verarbeiten konnte:

  • 5 * cc1.4xlarge - 1 Million 700k Online-Nutzer
  • 1 * c1.xlarge - 118k Online-Nutzer
  • 2 * c1.xlarge - 127k Online-Nutzer
  • 2 * m2.4xlarge (mit 5GB RAM für Tigase) - 236k Online-Nutzer
  • 2 * m2.4xlarge (mit 20GB RAM für Tigase) - 315k Online-Benutzer
  • 5 * m2.4xlarge (mit 60GB RAM für Tigase) - 400k Online-Benutzer
  • 5 * m2.4xlarge (mit 60GB RAM für Tigase) - 312k Online-Nutzer
  • 5 * m2.4xlarge (mit 60GB RAM für Tigase) - 327k Online-Nutzer
  • 5 * m2.4xlarge (mit 60GB RAM für Tigase) - 280k Online-Nutzer

Noch ein paar Kommentare:

  1. Warum ist viel Speicher so wichtig? Dies liegt daran, dass die CPU-Leistung bei allen außer cc1.4xlarge-Instanzen sehr unzuverlässig und inkonsistent ist. Sie haben 8 virtuelle CPUs, aber wenn Sie sich den obersten Befehl ansehen, sehen Sie oft, dass eine CPU arbeitet und der Rest nicht. Diese unzureichende CPU-Leistung führt zu internen Warteschlangen in der Tigase. Wenn die CPU-Leistung zurück ist, kann Tigase wartende Pakete verarbeiten. Je mehr Speicher Tigase hat, desto mehr Pakete können in die Warteschlange gestellt werden, und CPU-Defekte werden besser behandelt.
  2. Warum gibt es 5 * m2.4xlarge 4 mal? Dies ist, weil ich Tests mehrmals zu verschiedenen Tages- und Tageszeiten wiederholte. Wie Sie sehen können, kann das System je nach Uhrzeit und Datum unterschiedliche Belastungen verarbeiten. Ich denke, das liegt daran, dass die Tigase-Instanz die CPU-Leistung mit einigen anderen Diensten geteilt hat. Wenn sie beschäftigt waren, litt Tigase unter CPU unter Strom.

Das sagte ich denke mit der Installation von bis zu 10k Online-Benutzern sollten Sie in Ordnung sein. Andere Faktoren wie die Dienstanbietergröße sind jedoch von großer Bedeutung, da sie sich auf den Verkehr und die Auslastung auswirken. Auch wenn Sie andere Elemente haben, die einen erheblichen Datenverkehr generieren, belastet dies Ihr System.

Auf jeden Fall ist es ohne Tests nicht möglich zu sagen, wie sich Ihr System wirklich verhält oder ob es die Last verarbeiten kann.

Und die letzte Frage bezüglich der Komponente:

Selbstverständlich unterstützt Tigase XEP-0114 und XEP-0225 zum Anschluss externer Komponenten. Das sollte also kein Problem mit Komponenten sein, die in verschiedenen Sprachen geschrieben sind. Auf der anderen Seite empfehle ich Tigase API zum Schreiben von Komponenten zu verwenden. Sie können entweder als interne Tigase-Komponenten oder als externe Komponenten eingesetzt werden und dies ist für den Entwickler transparent, Sie müssen sich zur Entwicklungszeit nicht darum kümmern. Dies ist Teil der API und des Frameworks. Außerdem können Sie alle Waren aus dem Tigase-Framework, Skripting-Funktionen, Überwachung, Statistiken, viel einfacher Entwicklung verwenden, da Sie Ihren Code einfach als interne Komponente für Tests bereitstellen können. Sie müssen sich wirklich keine Gedanken um irgendwelche XMPP-spezifischen Sachen machen, sondern füllen nur den Körper der processPacket (...) Methode und das war's. Es sollte genügend Online-Dokumentation für all das auf der Tigase-Website geben.

Ich würde auch vorschlagen, über Python-Unterstützung für Multithreading zu lesen und wie es sich unter sehr hoher Last verhält. Früher war es nicht so toll.

    
Artur Hefczyc 29.12.2011, 19:38
quelle

Tags und Links