Beratung zu Cloud-Diensten und IM-Protokollen für ein Backend zur mobilen Gruppenchat-App

8

Übersicht
Ich werde eine App für Android und iOS entwickeln. Benutzer können Gruppen-Chatrooms einrichten und über Chatrooms sprechen, die von anderen Benutzern eingerichtet wurden. Der Service muss hoch skalierbar sein, damit über Nacht eine massive Zunahme der Benutzer möglich ist (wir können nur träumen).


Hintergrundinformationen
Bisher habe ich hauptsächlich Java und Python verwendet, aber die für diese Aufgabe am besten geeigneten Sprachen sollten verwendet werden. Es macht mir nichts aus, viele neue Fähigkeiten zu lernen.

Chat-Anforderungen
Das Chat-Protokoll sollte flexibel sein: Es sollte die Bestimmung ermöglichen, wer in "Chatrooms" anzeigen / posten kann, basierend auf Faktoren, die vom ersten Poster / Ersteller des jeweiligen "Chatrooms" festgelegt wurden. Außerdem sollten Benutzer die App einfach installieren und den Dienst nutzen können, nachdem sie nur einen einfachen Spitznamen angegeben haben (der später geändert werden kann).


Pläne für Chat-Protokolle
Nachdem ich mich umgesehen habe, denke ich, dass das XMPP-Protokoll der beste Kandidat ist. Insbesondere die Multi-User-Chat- Erweiterung sieht so aus, wie ich es brauche. Wäre dies am besten für meine Anforderungen geeignet, oder kennen Sie eine andere mögliche Lösung?

Update: Ich habe seitdem das Protokoll für SYnchronous Conferencing recherchiert und es scheint perfekt zu meinen Anforderungen zu passen. Ich bin mir jedoch nicht sicher, wie gut es dokumentiert ist oder wie ich es tatsächlich implementieren würde.


Cloud-Dienst
Ich habe mich zwischen Amazon Web Services, Google App Engine und Windows Azure entschieden. Ich komme zu dem Schluss, dass Azure am besten geeignet ist, da es einfacher zu verwalten ist als AWS (einfache Skalierbarkeit ist ein Schlüsselfaktor für das Design). Ich denke, es ist möglicherweise weniger eingeschränkt als GAE, und Azure wird es bald haben Toolkits für eine einfache Anbindung an Android- und iOS-Telefone.

Update: Wenn man es weiter untersucht, scheint es, dass AWS billiger wäre und dass es Bestimmungen wie Elastic Load Balancing und Auto Scaling gibt, die den zusätzlichen Aufwand für die Aufrechterhaltung der Skalierbarkeit vernachlässigbar machen.

Ist dies die Entscheidung, die Sie getroffen hätten, oder würden Sie andere Cloud-Dienste empfehlen / prüfen?


Allgemeine Anforderungen
Alle Komponenten sollten gut dokumentiert, als zuverlässig und vorzugsweise nach Möglichkeit auf hohem Niveau nachgewiesen werden. Zum Beispiel würde ich es vorziehen, ein Plugin zu verwenden, um das Chat-Protokoll zu implementieren, anstatt es selbst zu schreiben - und es so erfahreneren Leuten zu überlassen.


Danke
Danke fürs Lesen und jeder Rat, den Sie zu irgendeinem Aspekt haben, wäre sehr dankbar :-)

Jon Cox
quelle
Bei näherer Betrachtung anderer Aspekte bin ich zu dem Schluss gekommen, dass ich immer noch keine Ahnung habe, mit welchem ​​Cloud-Anbieter ich zusammenarbeiten soll. AWS scheint billiger als Azure zu sein, und bei näherer Betrachtung verfügt es über einige gute Tools zur automatischen Verwaltung der Skalierbarkeit.
Jon Cox
Ich bin mir nicht sicher, ob ich ganz sicher bin, wonach Sie suchen. Könnten Sie spezifischere Fragen stellen? "Ist das die Entscheidung, die du getroffen hättest?" ist ziemlich subjektiv. Sie bitten um Rat bezüglich des Protokolls (gut), aber das Ganze liest sich eher wie ein RFC als wie eine gute SE-Frage.
Greg Jackson
Ich hatte den Eindruck, dass programmers.stackexchange der Ort für subjektive Fragen zur Softwareentwicklung ist. Als solche gibt es viele mögliche Lösungen für die Dinge, die ich gefragt habe, und ich würde mich sehr für die Meinungen verschiedener Leute zu einem von ihnen interessieren :)
Jon Cox
Richtig, aber laut FAQ sollten Sie "nur praktische, beantwortbare Fragen stellen, die auf tatsächlichen Problemen basieren, mit denen Sie konfrontiert sind. Geschwätzige, offene Fragen beeinträchtigen den Nutzen unserer Website und verdrängen andere Fragen von der Titelseite." Mit anderen Worten, je spezifischer desto besser. Sie können sowohl subjektiv als auch spezifisch sein, sodass direkte Fragen immer noch besser sind als RFCs. Der Unterschied ist hier, ich könnte vorschlagen, dass Sie Ihre Frage klären, während sie auf SO geschlossen wäre (obwohl es für SO bereits zu subjektiv ist, egal wie spezifisch).
Greg Jackson
Versteh mich nicht falsch, es ist eine sehr gute Frage, aber es könnte immer noch besser sein.
Greg Jackson

Antworten:

2

Protokoll

Ja, das wird sich wie eine Ausrede anhören, aber es liegt wirklich an Ihnen. Ehrlich gesagt klingt das, was Sie beschrieben haben, sehr nach IRC, aber XMPP ist ziemlich erweiterbar und weit verbreitet. Daher ist es wahrscheinlich das einfachste Nicht-IRC, um zu arbeiten und Unterstützung zu erhalten. Sie werden in der Lage sein, viele Beispiele für beide Plattformen und wahrscheinlich sogar bereits vorbereitete Bibliotheken zu finden, wenn Sie in diese Richtung gehen möchten. Ich werde keine empfehlen, aber eine schnelle Suche sollte hier ein sehr nützliches Werkzeug sein. Es gibt keine richtige Antwort, aber XMPP ist sicherlich keine schlechte Wahl.

Cloud-Dienst

Sowohl Azure als auch AWS sind sehr gute Dienste. Auf jedem von ihnen werden viele hochkarätige oder wichtige Anwendungen ausgeführt. Einer der Gründe, warum ich Azure gegenüber AWS bevorzuge, ist, dass Microsoft wirklich versucht, es Ihnen einfach zu machen, es zu bekommen. Wenn Sie dies noch nicht getan haben, würde ich mich mit Bizspark befassen , der Ihnen, wenn Sie eine Genehmigung erhalten, unter anderem eine kostenlose kleine Instanz von Azure bietet. Um fair zu sein, Amazon macht das Gleiche , aber sie scheinen Ihnen ein bisschen weniger zu geben, und zwar nur für ein Jahr (Bizspark ist für 3 Jahre). Auf der anderen Seite verlangt Bizspark tatsächlich, dass Sie genehmigt werden, während Amazon es Ihnen wirklich nur ganz einfach gibt.

Alles in allem ist beides wirklich ein guter Service, und sowohl Microsoft als auch Amazon sind sehr bemüht, Entwicklern dabei zu helfen, Dinge zu erledigen, sodass Sie in beiden Fällen nichts falsch machen können. Die beste Möglichkeit, sich zu entscheiden, besteht darin, sich die Funktionen anzusehen, die sie im Vergleich zu Ihren Anforderungen bieten, sowie die Preise für Ihre Mindest- und Idealwerte. Wenn Sie beispielsweise Windows Phone unterstützen möchten, ist Azure möglicherweise die bessere Option, da diese gut zusammenarbeiten. Wenn Sie jedoch Fulfillment-Services nutzen und T-Shirts oder Kaffeetassen oder ähnliches in Verbindung bringen möchten, ist Amazon möglicherweise die richtige Option Bessere Wahl (Hinweis: Lesen Sie keines davon durch. Ich habe absichtlich zwei Szenarien ausgewählt, die Sie nicht erwähnt haben, um nur ein Beispiel für einige der einzigartigen Funktionen der Dienste zu geben.)

Was den elastischen Lastausgleich und die automatische Skalierung betrifft, so ist dies nur das AWS-Branding, das Cloud-Server im Allgemeinen leisten. Alle anständigen Cloud-Dienste machen die Skalierung Ihres Systems technologisch vernachlässigbar, zumindest von ihrer Seite (wenn Sie schlechten Code haben, der nicht gut skaliert, können Sie ihnen nicht wirklich die Schuld geben ...). Also ja, das sind gute Dinge, aber jeder hat sie, also sollten sie keine Entscheidungsträger sein.

Greg Jackson
quelle
Vielen Dank für Ihre Antwort. Es hat mir definitiv geholfen, mehr darüber nachzudenken, was tatsächlich erforderlich sein wird, und meine Gedanken zu anderen Bereichen geklärt. Prost.
Jon Cox
IRC war das erste, was mir auch in den Sinn kam. Es ist ein äußerst gut dokumentiertes und einfaches Protokoll, das sich gut für die Skalierung auf eine große Anzahl von Benutzern eignet.
Cercerilla
0

Ich weiß nichts über Chat-Protokolle, daher werde ich zum Cloud-Bit springen.

Ich mag die Idee nicht, eine ganze Präsenz in der Cloud zu hosten.

Beginnen Sie mit dem Setup von 2 kleinen virtuellen Servern im Failover-Modus. Es gibt Anbieter, die genügend Möglichkeiten bieten, um zwei kleine virtuelle Instanzen für 40 US-Dollar pro Monat geografisch auszugleichen.

Wenn Sie wachsen, erhöhen / verringern Sie die Größe / Menge Ihrer virtuellen Instanz nach Bedarf, während Sie die Cloud zum Platzen verwenden. VPS ist billiger als stündliche Instanzen, die in Vollzeit verwendet werden.

Es scheint mir, dass Ihr System basierend auf Chatrooms einfach partitioniert werden kann. Verschiedene Ressourcen hosten verschiedene Chatrooms - und sie bewegen sich basierend auf der Anzahl der gleichzeitigen Benutzer, um eine nahezu optimale Verteilung zu erreichen.

Dies lässt zwei technische Herausforderungen offen: 1: Wie migrieren Sie einen Raum mitten im Flow auf einen neuen Server? 2: Wie gehen Sie mit einem Raum um, der mehr Ressourcen benötigt als eine einzelne Recheneinheit / VPS-Einheit?

Jonno
quelle