it-swarm.com.de

Welche Technologie steckt hinter Wechat, WhatsApp und anderen Messenger-Apps?

Ich bin gespannt auf die Architektur verschiedener Echtzeit-Messenger-Apps. Verwenden sie ein generisches Protokoll/eine generische Architektur?

63
viswas

Die WhatsApp-Architektur, die Facebook für 19 Milliarden US-Dollar gekauft hat erklärt die Architektur, die beim Design von WhatsApp eine Rolle spielt.

Hier ist die allgemeine Erklärung aus dem Link

  • Der WhatsApp-Server ist fast vollständig in Erlang implementiert.

  • Serversysteme, die das Backend-Nachrichtenrouting ausführen, werden in Erlang ausgeführt.

  • Ein großer Erfolg ist, dass die Anzahl der aktiven Benutzer mit einem sehr kleinen Server-Footprint verwaltet wird. Teamkonsens ist, dass es hauptsächlich an Erlang liegt.

  • Es ist interessant zu bemerken, dass Facebook Chat 2009 in Erlang geschrieben wurde, aber sie haben sich davon verabschiedet, weil es schwierig war, qualifizierte Programmierer zu finden.

  • Der WhatsApp-Server wurde von ejabberd gestartet

  • Ejabberd ist ein berühmter Open-Source-Jabber-Server, der in Erlang geschrieben wurde.

  • Ursprünglich ausgewählt, weil es offen ist, von Entwicklern großartige Kritiken erhalten hat, einfach zu starten ist und das Versprechen hat, dass Erlang langfristig für große Kommunikationssysteme geeignet ist.

  • In den nächsten Jahren wurden einige Teile von ejabberd neu geschrieben und modifiziert, darunter der Wechsel von XMPP zu einem intern entwickelten Protokoll, die Umstrukturierung der Codebasis und die Neugestaltung einiger Kernkomponenten sowie zahlreiche wichtige Änderungen an Erlang VM zur Optimierung der Serverleistung.

  • Bei der Bearbeitung von 50 Milliarden Nachrichten pro Tag liegt der Schwerpunkt auf der Herstellung eines zuverlässigen Systems, das funktioniert. Die Monetarisierung ist etwas, das man sich später ansehen sollte. Sie ist weit entfernt.

  • Ein primäres Maß für den Systemzustand ist die Länge der Nachrichtenwarteschlange. Die Länge der Nachrichtenwarteschlange aller Prozesse auf einem Knoten wird ständig überwacht, und es wird eine Warnung ausgegeben, wenn sie einen Rückstand über einen voreingestellten Schwellenwert hinaus aufbauen. Wenn ein oder mehrere Prozesse zurückfallen, wird darauf hingewiesen, dass ein Zeiger auf den nächsten anzugreifenden Engpass vorhanden ist.

  • Multimedia-Mitteilungen werden gesendet, indem das Bild, Audio oder Video, das an einen HTTP-Server gesendet werden soll, hochgeladen und anschließend ein Link zum Inhalt zusammen mit der Base64-codierten Miniaturansicht (falls zutreffend) gesendet wird.

  • Einige Codes werden normalerweise täglich gepusht. Oft ist es mehrmals am Tag, obwohl in der Regel Stoßzeiten vermieden werden. Erlang hilft dabei, Fehlerbehebungen und Features aggressiv in die Produktion zu bringen. Hot-Loading bedeutet, dass Updates ohne Neustart oder Verkehrsverlagerung übertragen werden können. Fehler können in der Regel sehr schnell wieder durch Heißladen rückgängig gemacht werden. Systeme sind in der Regel viel lockerer miteinander verbunden, was das schrittweise Ausrollen von Änderungen sehr erleichtert.

  • Welches Protokoll wird in der WhatsApp-App verwendet? SSL-Socket zu den WhatsApp-Serverpools. Alle Nachrichten werden auf dem Server in die Warteschlange gestellt, bis der Client erneut eine Verbindung herstellt, um die Nachrichten abzurufen. Der erfolgreiche Abruf einer Nachricht wird an den WhatsApp-Server zurückgesendet, der diesen Status an den ursprünglichen Absender weiterleitet (der dies als "Häkchen" neben der Nachricht ansieht). Nachrichten werden aus dem Serverspeicher gelöscht, sobald der Client die Nachricht akzeptiert hat

  • Wie funktioniert der Registrierungsprozess intern in WhatsApp? WhatsApp verwendet, um einen Benutzernamen/ein Passwort basierend auf der IMEI-Nummer des Telefons zu erstellen. Dies wurde kürzlich geändert. WhatsApp verwendet jetzt eine allgemeine Anfrage von der App, um eine eindeutige 5-stellige PIN zu senden. WhatsApp sendet dann eine SMS an die angegebene Telefonnummer (dies bedeutet, dass der WhatsApp-Client nicht mehr auf demselben Telefon ausgeführt werden muss.) Basierend auf der PIN-Nummer fordert die App dann einen eindeutigen Schlüssel von an WhatsApp. Dieser Schlüssel wird als "Passwort" für alle zukünftigen Anrufe verwendet (dieser "permanente" Schlüssel ist auf dem Gerät gespeichert.) Dies bedeutet auch, dass die Registrierung eines neuen Geräts den Schlüssel auf dem alten Gerät ungültig macht.

77
MaheshShanbhag

WhatsApp hat sich für Erlang entschieden, eine Sprache zum Schreiben skalierbarer Anwendungen, die Fehler aushalten sollen. Erlang verwendet eine Abstraktion, die als Actor-Modell bezeichnet wird, da sie gleichzeitig abläuft - http://en.wikipedia.org/wiki/Actor_ (programming_language) Anstelle des traditionelleren Shared-Memory-Ansatzes kommunizieren die Akteure durch gegenseitiges Senden Mitteilungen. Schauspieler sind im Gegensatz zu Threads so konzipiert, dass sie leichtgewichtig sind. Akteure können sich auf demselben Computer oder auf verschiedenen Computern befinden, und die Abstraktion der Nachrichtenübermittlung funktioniert für beide. Eine einfache Implementierung von WhatsApp könnte sein: Jeder Benutzer/Gerät wird als Akteur dargestellt. Dieser Akteur ist dafür verantwortlich, den Posteingang des Benutzers zu verwalten, wie er auf die Festplatte serialisiert wird, welche Nachrichten der Benutzer sendet und welche Nachrichten der Benutzer empfängt. Nehmen wir an, Alice und Bob sind Freunde auf WhatsApp. Es gibt also einen Alice-Schauspieler und einen Bob-Schauspieler.

Verfolgen wir eine Reihe von Nachrichten, die hin und her fließen:

Alice beschließt, Bob eine Nachricht zu schicken. Das Telefon von Alice stellt eine Verbindung zum WhatsApp-Server her und es wird festgestellt, dass diese Verbindung definitiv vom Telefon von Alice stammt. Alice sendet nun über TCP die folgende Nachricht: "Für Bob: Ein riesiges Monster greift die Golden Gate Bridge an." Einer der WhatsApp-Front-End-Server deserialisiert diese Nachricht und übermittelt sie an den Schauspieler rief Alice an.

Alice, der Schauspieler, beschließt, diese zu serialisieren und in einer Datei namens "Alice's Sent Messages" zu speichern, die auf einem replizierten Dateisystem gespeichert ist, um einen Datenverlust aufgrund unvorhersehbaren Ungeheuers zu verhindern. Alice, der Schauspieler, beschließt dann, diese Nachricht an Bob, den Schauspieler, weiterzuleiten, indem er die Nachricht "Msg1 von Alice: Ein riesiges Monster greift die Golden Gate Bridge an" weiterleitet. Alice, der Schauspieler, kann es mit exponentiellem Backoff erneut versuchen, bis Bob, der Schauspieler, den Empfang der Nachricht bestätigt.

Bob, der Schauspieler, erhält schließlich die Nachricht von (2) und beschließt, diese Nachricht in einer Datei mit dem Namen "Bobs Posteingang" zu speichern. Sobald diese Nachricht dauerhaft gespeichert wurde, bestätigt Bob, der Schauspieler, den Empfang der Nachricht, indem er Alice eine eigene Nachricht mit der Aufschrift "Ich habe Nachricht1 erhalten" sendet. Alice, die Schauspielerin, kann nun die Wiederholungsversuche einstellen. Bob, der Schauspieler, prüft dann, ob Bobs Telefon eine aktive Verbindung zum Server hat. Bob, der Schauspieler, sendet diese Nachricht per TCP an das Gerät.

Bob sieht diese Nachricht und antwortet mit "Für Alice: Lass uns riesige Roboter bauen, um sie zu bekämpfen". Dies wird nun von Bob, dem Schauspieler, empfangen, wie in Schritt 1 beschrieben. Bob, der Schauspieler, wiederholt dann die Schritte 2 und 3, um sicherzustellen, dass Alice schließlich die Idee erhält, die die Menschheit retten wird.

WhatsApp verwendet tatsächlich das XMPP-Protokoll anstelle des überlegenen Protokolls, das ich oben skizziert habe, aber Sie verstehen, worum es geht.

30
alok srivastava

Meines Wissens ist Ejabberd ( http://www.ejabberd.im/ ) der übergeordnete Server. Dies ist ein XMPP-Server, der recht gute Open Source-Funktionen bietet. Whatsapp verwendet eine modifizierte Version von Facebook Messaging verwendet auch eine geänderte Version davon. Einige weitere Chat-Anwendungen wie Samsung's ChatOn, Nimbuzz Messenger verwenden alle Ejabberd-basierte und Erlang-Lösungen haben auch eine modifizierte Version dieses Ejabberd, von dem sie behaupten, dass sie hoch skalierbar und mit mehr Leistungsverbesserungen gut getestet und in MongooseIM umbenannt sind.

Ejabberd ist der Server, auf dem die meisten Features im Vergleich zu anderen implementiert sind. Da es in Erlang erstellt wurde, ist es horizontal hoch skalierbar.

27
Marutha