Ü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 :-)
quelle
Antworten:
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.
quelle
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?
quelle