Inhaltsverzeichnis[Ausblenden][Zeigen]
WhatsApp ist ein Social-Messaging-Programm, das es Benutzern ermöglicht, Nachrichten miteinander auszutauschen.
Haben Sie schon einmal darüber nachgedacht, wie WhatsApp funktioniert?
Welche Konzepte liegen seiner Entstehung und seinem Betrieb zugrunde?
Dieser Artikel behandelt die Grundlagen von WhatsApp System-Design.
Wir werden auch die allgemeine Architektur von WhatsApp durchgehen, die zum Erstellen jeder Art von Chat-Software verwendet werden kann.
Werfen wir also ohne weiteres einen Blick auf das Systemdesign von WhatsApp!
1. Schlüsselanforderungen
WhatsApp ist eine hochskalierbare Technologie, die von vielen Menschen auf der ganzen Welt verwendet wird. Daher sollte es so konzipiert sein, dass es praktisch immer zuverlässig und funktionsfähig ist.
Daher ist die Bestimmung der kritischen Anforderungen des Systems von entscheidender Bedeutung.
Das sind die Mindestanforderungen für den WhatsApp-Messenger:
- In der Lage, Eins-zu-eins-Interaktionen zu erleichtern.
- Nachrichtenbestätigung und zuletzt gesehen sind beide möglich (Gesendet, Zugestellt und Gelesen).
- Ende-zu-Ende-Verschlüsselung und Medienunterstützung (Bilder/Videos) zulassen.
Lassen Sie uns herausfinden, wie viel Kapazität unser notwendiger Service benötigt.
2. Schätzung der Kapazität
Unser Ziel ist es, eine Plattform zu schaffen, die eine große Menge an Traffic bewältigen kann. Gehen Sie davon aus, dass täglich 10 Milliarden SMS verschickt werden. Wir haben:
- Jeden Tag werden 10 Milliarden SMS von einer Milliarde Menschen verschickt.
- Bei Spitzenverkehr (pro Sekunde) waren 700,000 Personen aktiv (6x Durchschnitt)
- Während der Spitzenauslastung werden 40 Millionen Nachrichten pro Sekunde übertragen.
- Die durchschnittliche Länge einer Nachricht beträgt 160 Zeichen: 10B * 160 = 1.6 TB Daten werden jeden Tag generiert.
- Nehmen wir als Beispiel zehn Dienstjahre: 10 * 1.6 Mrd. * 365 PB
- Die gesamte Anwendung wird aus Microservices bestehen, von denen jeder eine spezialisierte Aufgabe ausführt. Angenommen, das Senden einer Nachricht dauert 20 Millisekunden und es gibt 100 gleichzeitige Verbindungen pro Server. Als Ergebnis ist die erwartete Anzahl erforderlicher Chat-Server = (Chat-Nachrichten pro Sekunde Latenz)/ gleichzeitige Verbindungen pro Server = 40 Mio. * 20 ms / 100 = 8000 Server.
3. High-Level-Architektur
Dieses System basiert auf zwei Kerndiensten. Chat-Dienst und Übergangsdienst zum Beispiel. Der Chat-Dienst wickelt den gesamten Datenverkehr ab, der durch die Online-Nachrichten der Benutzer generiert wird. Gleichzeitig verarbeitet der temporäre Dienst den Datenverkehr, wenn der Benutzer offline ist.
Wenn der Benutzer online ist, ist der Chat-Dienst für die Zustellung von Nachrichten zuständig.
Es wird überprüft, ob der Empfänger der Nachricht online ist oder nicht; wenn der Empfänger online ist, stellt dieser Dienst die Nachricht sofort zu; Wenn der Empfänger nicht online ist, sendet der Übergangsdienst die Nachricht an ihn, wenn er wieder online ist.
Der vorübergehende Dienst behält einen separaten Speicherbereich zum Aufbewahren von vorübergehend zugänglichen Daten, bis der Offline-Benutzer sich wieder verbindet.
Entwerfen von High-Level-APIs
Dieser Dienst verfügt über zwei funktionierende APIs auf hoher Ebene zum Senden und Lesen von Nachrichten. Das System kann unter Verwendung der REST-Architektur implementiert werden.
Parameter zum Senden von Nachrichten
Diese API wird verwendet, um Nachrichten zwischen zwei Benutzern zu übertragen.
Gesprächsparameter
Diese API wird verwendet, um Thread-Chats anzuzeigen. Betrachten Sie dies als das erste, was Sie sehen, wenn Sie WhatsApp öffnen. Wir möchten nur wenige Nachrichten für einen Benutzer in einer einzigen API-Abfrage erhalten. Um dies zu handhaben, werden die Parameter offset und message count benötigt.
Was sind die Funktionen von Features wie „Zuletzt gesehen“, „Einfaches Häkchen“ und „Doppeltes Häkchen“?
Die wichtige Rolle bei der Bereitstellung dieser Dienste ist der Bestätigungsdienst. Diese Funktionen wurden entwickelt, da dieser Dienst weiterhin Bestätigungsantworten generiert und überprüft.
- Einzelne Zecke: Wenn eine Nachricht von Benutzer A Benutzer B erreicht, sendet der Server einen einzelnen Tick, der bestätigt, dass die Nachricht übertragen wurde.
- Doppeltes Häkchen: Nachdem die Nachricht des Servers über die richtige Verbindung an Benutzer B gesendet wurde, bestätigt Benutzer B den Empfang der Nachricht an den Server. Der Server stellt Benutzer A dann eine weitere Bestätigung bereit. Als Ergebnis erscheint ein doppeltes Häkchen.
- Blaues Häkchen: Benutzer B sendet nach Überprüfung der Nachricht eine weitere Bestätigung an den Server. Der Server sendet dann Benutzer A eine zusätzliche Bestätigungsnachricht. Danach erscheint auf dem Bildschirm von Benutzer A ein blaues Häkchen.
- Zuletzt gesehen: Der Heartbeat-Mechanismus ist vollständig für das zuletzt gesehene Feature verantwortlich. Alle 5 Sekunden wird ein Herzschlag an den Server übertragen, der den zuletzt gesehenen Status jedes Benutzers in einer Tabelle verfolgt, auf die jeder andere Benutzer leicht zugreifen kann.
4. Entwerfen von Schlüsselfunktionen
Personalisierte Interaktion
Dies ist ein notwendiger Teil des Chat-Dienstes. Ein Benutzer kann mit diesem Dienst einfach Nachrichten an einen anderen Benutzer senden. Schauen wir uns an, wie das funktioniert:
Angenommen, Jay möchte mit Aayush kommunizieren. Jay ist mit einem Chatserver verbunden, mit dem er die Nachricht erhält. Jay erhält vom Chatserver eine Bestätigung, dass die Nachricht versendet wurde. Der Chat-Server fordert nun vom Datenspeicher Informationen über den Chat-Server an, mit dem Aayush verbunden ist. Jays Chatserver übermittelt nun die Nachricht an Aayushs Chatserver und Aayush erhält die Nachricht über einen Push-Mechanismus. Aayush sendet nun eine Bestätigung an Jays Chatserver, der Jay benachrichtigt, dass die Nachricht zugestellt wurde. Wenn Aayush die Nachricht erneut las, erhielt Jay eine neue Bestätigung, dass die Nachricht gelesen worden war.
Status der Benutzeraktivität
Das letzte Mal, wann eine Person aktiv war, ist ein regelmäßiges Merkmal von Instant Messengern.
In diesem Diagramm ist ein System zum Aufrechterhalten einer Verbindung zwischen dem Client und dem Server dargestellt. Web-Sockets wurden verwendet, um eine bidirektionale Verbindung zwischen dem Server und dem Client herzustellen. Diese Verbindungen senden Heartbeats, die zur Überwachung des Aktivitätsstatus des Benutzers verwendet werden.
End-to-End-Datenschutz
Ende-zu-Ende-Verschlüsselung ist eine Schlüsselfunktion, die sicherstellt, dass nur die sich unterhaltenden Benutzer die Kommunikation lesen können. Ein öffentlicher Schlüssel wird von allen an der Kommunikation beteiligten Benutzern geteilt und ist entscheidend für die Aufrechterhaltung der End-to-End-Verschlüsselung. Angenommen, es gibt zwei Benutzer auf dem Kanal, Jay und Aayush, die miteinander kommunizieren.
Jay hat den öffentlichen Schlüssel von Aayush und Aayush hat den öffentlichen Schlüssel von Jay sowie ihren nicht geteilten privaten Schlüssel. Wenn Jay die Nachricht überträgt, verschlüsselt er sie daher mit Aayushs öffentlichem Schlüssel, der nur mit Aayushs privatem Schlüssel entschlüsselt werden kann.
Ebenso wird Jay nur Aayushs Kommunikation entschlüsseln können. Infolgedessen können nur Jay und Aaysuh die Kommunikation des anderen sehen, und der Server fungiert während des gesamten Prozesses nur als Gateway.
5. Engpässe
Jedes System ist anfällig für Störungen. Um ein so großes Verkehrsaufkommen zu bewältigen, muss der Dienst jederzeit betriebsbereit und fehlertolerant bleiben, um Engpässe zu vermeiden. Da unser Dienst vollständig auf Chat- und Transient-Server angewiesen ist, müssen wir alle Probleme lösen, die sich aus ihrem Betrieb ergeben.
Ausfall des Chat-Servers: Das ist das Herzstück unseres Systems. Wenn Benutzer online sind, ist es für die Verwaltung und Zustellung von Nachrichten verantwortlich. Infolgedessen hält dieses System Verbindungen zu seinen Benutzern aufrecht.
Wenn dieser Dienst ausfällt, leidet folglich die gesamte Architektur. Es gibt zwei Ansätze, um den Ausfall des Chat-Servers zu verwalten. Eine Methode besteht darin, TCP-Verbindungen auf einen anderen Server zu verschieben, während eine andere darin besteht, Benutzern zu ermöglichen, Verbindungen im Falle eines Verbindungsverlusts automatisch zu starten.
Ausfall der Zwischenspeicherung: Eine weitere fehleranfällige Komponente, die letztendlich den gesamten Dienst beschädigen kann, ist die vorübergehende Speicherung. Nachrichten auf dem Weg zu Offline-Benutzern gehen verloren, wenn dieser Dienst ausfällt.
Wir können den Verlust von Nachrichten verhindern, indem wir den temporären Speicher jedes Benutzers replizieren. Als Ergebnis kann die Replik verwendet werden, um die Funktionen zu verarbeiten, wann immer der Benutzer online zurückkehrt. Wenn auf den ursprünglichen Server zugegriffen werden kann, werden sowohl die ursprüngliche als auch die Replikatinstanz des vorübergehenden Speichers des Benutzers in einem einzigen Speicher kombiniert.
6. Optimierungstechniken
Latency: Um ein nahtloses und verbessertes Kundenerlebnis zu bieten, muss der Messenger-Dienst in Echtzeit verfügbar sein. Infolgedessen muss die Latenz verringert werden, indem ein Teil der Daten, auf die häufig zugegriffen wird, zwischengespeichert wird. Mit einem verteilten Cache wie Redis können wir den Aktivitätsstatus der Benutzer und die letzten Konversationen im Speicher zwischenspeichern.
Verfügbarkeit: Unser Service muss die meiste Zeit verfügbar sein. Unser System muss fehlertolerant sein, daher können wir mehrere Kopien vorübergehender Nachrichten aufbewahren, damit jede verlorene Nachricht schnell aus ihren Duplikaten wiederhergestellt werden kann. Dadurch kann die Verfügbarkeit des Systems nicht gefährdet werden.
Zusammenfassung
Unser System unterstützt jetzt nur wenige Funktionen, aber wir können es leicht erweitern, um Gruppenchats hinzuzufügen, um Nachrichten an mehrere Personen zu verteilen. Sie können auch Video- und Telefonanruffunktionen bereitstellen. Dieses System kann auch so entwickelt werden, dass Benutzer Status-Updates oder Erzählungen veröffentlichen und sich gegenseitig lesen können.
Ich habe hart daran gearbeitet, Ihnen einen allgemeinen Überblick über das Design des WhatsApp-Systems zu geben. Ich hoffe es hat euch gefallen und ihr werdet es gut gebrauchen.
Hinterlassen Sie uns einen Kommentar