Snapchat ist unter Tweens und Teenagern bekannt. Sie sind wahrscheinlich über 25, wenn Sie nicht herausfinden können, wie es funktioniert. Snapchat, eine der beliebtesten Social-Media-Anwendungen, bietet Kindern und Jugendlichen genau das, was sie wollen: eine einfache Methode, um alltägliche Ereignisse zu teilen und sie gleichzeitig cool erscheinen zu lassen.
Im Gegensatz zu Facebook und Twitter, die alles aufzeichnen und veröffentlichen, was Sie tun, verwendet Snapchat Nachrichten, die verschwinden sollen (sehen Sie, wie sie es nicht tun).
Es gibt viel über Snapchat, und wenn Sie ein Entwickler sind, ist es sogar noch mehr. Dieser Beitrag gibt Ihnen also einen allgemeinen Überblick über Snapchat System-Design und viele weitere Einblicke.
Einleitung
Snapchat ist ein in den USA ansässiges Unternehmen Social-Networking App, mit der Benutzer sofort eine Verbindung herstellen, Bilder teilen und vieles mehr können.
- Nachrichten und Bilder (oder Schnappschüsse) haben ein Zeitlimit von 24 Stunden. Ermutigt Menschen, ihre Geschichten in Gruppen zu teilen.
- Mit Snap Map können Benutzer auf einer Karte sehen, wo sich ihre Freunde befinden.
- Erinnerungen erinnern Benutzer an Fotos, die sie ein Jahr später gespeichert oder geteilt haben.
- Snapchat ist bei jüngeren Generationen, insbesondere Teenagern, sehr beliebt. Es gibt 319 Millionen aktive Benutzer in der App und 5.4 Milliarden Schnappschüsse werden jeden Tag gesendet.
Wichtige Designbegriffe
Monolithische Architektur – Eine einschichtige Anwendung, die unabhängig von anderen Anwendungen arbeitet, wird als Monolith (monolithische Architektur) bezeichnet. Ein Monolith ist so konzipiert, dass er alle Aktivitäten ausführt und handhabt, die zum Abschließen einer Aufgabe erforderlich sind. Die Anwendung führt alle Funktionen von Anfang bis Ende aus.
Microservices – Es ist das genaue Gegenteil von Monolithen. Microservices ist ein architektonischer Ansatz, der eine Anwendung als Sammlung von Diensten organisiert. Diese Dienste werden verwendet, um viele Aspekte einer Anwendung zu steuern. Ein Kunde gibt eine Bestellung auf, ein Kellner nimmt sie entgegen und liefert sie aus, und ein Koch bereitet sie zu. In diesem Beispiel funktioniert jede Komponente unabhängig und getrennt von den anderen; niemand weiß genau, was die anderen tun, und niemand hat Zugriff auf die gleichen Informationen.
JSON: Es ist ein textbasiertes Format, das verwendet werden kann, um JavaScript-Objekte, Literale, Arrays und Daten anzuzeigen. Dieses textbasierte Format soll einfach zu lesen und zu schreiben sowie von Software verdaulich sein. JSON wird häufig verwendet, um Daten und Informationen zwischen Servern und Online-Anwendungen zu übertragen.
Besetzung: Die Technik zur Automatisierung vieler Vorgänge wird als Orchestrierung bezeichnet. Diese Jobs umfassen die Konfiguration, Koordination und Verwaltung von Computersystemen und Software.
Proxy: Ein Proxy fungiert als Vermittler zwischen einem Client, der nach einer Ressource sucht, und dem Server, der sie bereitstellt.
Mesh: Ein Service Mesh ist ein Softwarearchitekturmuster, das einer Infrastrukturschicht eine Schicht hinzufügt, um eine regulierte, beobachtbare und sichere Kommunikation zwischen Diensten über einen Proxy zu ermöglichen.
Hochwertiges Design
Monolithische Probleme
Snapchat entstand als Cloud-basierter Monolith auf Basis der Google App Engine. Als das Programm jedoch immer beliebter wurde und mehr Benutzer und Daten gewann, wurde die Skalierbarkeit zu einem Problem.
Darüber hinaus waren bei einem riesigen Explosionsradius innerhalb des Monolithen systemweite Störungen eher möglich. Eines der Probleme von Snapchat wurde als „Tragödie der Allmende“ definiert, in der Funktionen um den Zugriff auf Ressourcen konkurrierten; Funktionen wurden zum Zeitpunkt des App-Starts geladen, sodass bestimmte Funktionen schneller, andere jedoch langsamer geladen werden konnten.
Ingenieure strebten außerdem eine klare Sichtbarkeit, Trennung und Eigentümerschaft ihrer Komponenten aus Entwicklungssicht an, damit der Service flexibel und effizient sein konnte.
Transformation
Als Snapchat expandierte, erkannte das Unternehmen, dass es seine monolithische Infrastruktur in kleinere, effizientere Teile zerlegen musste. Um die Latenz zu verringern, beschloss das Unternehmen, ein auf Microservices basierendes Design zu entwickeln.
Um diese Ziele zu erreichen, entschied sich Snapchat für die Aktualisierung seiner Software mit Amazon DynamoDB, einem skalierbaren NoSQL-Datenbankdienst. Als Ergebnis seiner Bemühungen konnte das Unternehmen die mittlere Latenzzeit um 20 % reduzieren.
Die App wurde vom Unternehmen in zahlreiche kleinere Anwendungen umgeschrieben. Snapchat begann mit zahlreichen Anwendungen, darunter eine Kamera, ein Chat, Erinnerungen, Bildbearbeitung, Inhaltskonsum und eine Karte. Obwohl die Integration dieser Programme in einen einzigen Monolithen für die Verbraucher praktisch war, stellte sie ein schwerwiegendes technisches Problem dar, wenn es darum ging, eine gute Leistung aufrechtzuerhalten.
Für eine Neufassung legte das Unternehmen viele Grundregeln fest. Nicht vorladen; Jede Funktion sollte eine eigene App sein und schnell sein. Snapchat stoppte Änderungen an mehreren Stellen, um das Umschreiben zu ermöglichen, was es zu einer rein technischen Aufgabe machte.
Integration zusätzlicher Funktionen
Die Kamera-App von Snapchat verfügt unter anderem über Linsen, Filter, Bitmojis und die Möglichkeit, Augmented-Reality-Animationen hinzuzufügen. Die Chat-App von Snapchat ermöglicht es Benutzern auch, Fotos zu speichern, Gespräche zu speichern, Emoticons hinzuzufügen und vieles mehr.
Die Karte von Snapchat ermöglicht es Ihnen unter anderem, Freunde zu überwachen, wenn sie dies wünschen. Erinnerungen, Fotobearbeitung und Inhaltskonsum sind alles separate Snapchat-Apps mit ihren einzigartigen Fähigkeiten.
Erinnerungen ermöglichen es Ihnen, Fotos oder Videos für die spätere Verwendung zu speichern oder zu ändern sowie sie hochzuladen oder zu versenden. Benutzer können auch die Bildbearbeitung verwenden, um Filme zu schneiden, Text hinzuzufügen, Aufkleber hinzuzufügen und vieles mehr.
Der externe Inhaltskonsum von Snapchat bezieht sich auf das, was es Benutzern basierend auf einer Reihe von Parametern zeigt.
Microservices
Das Programm war damals stark von JSON abhängig, um Netzwerkabfragen durchzuführen. Das Parsen von JSON war jedoch zeitaufwändig und ineffizient. Snapchat verwendete eine zentralisierte Netzwerkverwaltungs-API, um die Verwendung von JSON als Implementierungsdetail zu maskieren, um dieses Problem anzugehen.
Microservices führen zu den Herausforderungen der Verwaltung des Anwendungszustands, der Dienstkommunikation und der Fehlerverwaltung. Snapchat verwendete Open-Source-Technologien wie Temporal, um Orchestrierungsschwierigkeiten zu überwinden und ein starkes und zuverlässiges System aufzubauen.
Aus diesem Grund entschied sich die Organisation für die Verwendung eines Service-Mesh-Entwurfsmusters. Snapchat verwendete Envoy, ein weiteres Open-Source-Tool, das als Proxy fungiert, um dieses Muster zu erreichen. Envoy verwaltete den Fluss des Serviceverkehrs über die Infrastruktur und verschaffte Entwicklern Einblick in potenzielle Schwierigkeiten.
Snapchat hat innerhalb des Service Mesh eine interne App namens Switchboard erstellt. Switchboard diente als Bedienfeld für die Dienste von Snap und ermöglichte es Benutzern, den Datenverkehr zu verschieben, Dienstabhängigkeiten zu verwalten (eine Funktion, mit der ein Dienst abhängig vom Zustand anderer verwaltet werden kann) und Regionen zu entleeren.
Um die Komplexität potenzieller Konfigurationen innerhalb von Diensten zu vereinfachen, wurde Switchboard verwendet, anstatt die gesamte Envoy-API offenzulegen. Snap hat dank des Service Mesh ein gemeinsames internes und regionales Netzwerk für seine Microservices.
Dienste innerhalb derselben Region könnten sich ohne Verwendung des öffentlichen Internets miteinander verbinden, und kein externer Netzwerkverkehr könnte mit internen Netzwerkteilen kommunizieren.
Nur die Gateways wären berechtigt, sich aus Sicherheitsgründen dem Internet auszusetzen. Die API-Gateways könnten beispielsweise leicht als Vordertüren dienen, um Anfragen von Clients/Benutzern zu verarbeiten und sie zusammen mit dem Netzwerk weiterzuleiten.
Netzwerk- und API-Gateway
Alle Abfragen vom Snapchat-Client kommen über das API-Gateway. Es verwendet dasselbe Envoy-Image und verbindet sich mit derselben Steuerungsebene wie unsere internen Microservices. Unsere Kontrollebene ermöglicht es uns, benutzerdefinierte Envoy-Filter zu aktivieren.
Die Authentifizierungssysteme von Snapchat sowie unsere Ratenbegrenzungs- und Lastabwurftechnologien werden von diesen Filtern verarbeitet. Envoy verwendet das Service Mesh, um Anfragen an den relevanten Microservice weiterzuleiten, nachdem die Filterkette abgeschlossen ist.
Zusammenfassung
Das API-Gateway von Snapchat leitet externen Datenverkehr an die vielen Funktionen der App weiter. Benutzeranfragen zum Ändern von Konfigurationszuständen werden von Servern verwaltet, die dann Daten bereitstellen und Informationen zurück zu den zahlreichen Diensten der App.
Insgesamt kann das derzeitige Design von Snapchat mit mehreren Programmen verglichen werden, die auf einem einzigen Betriebssystem laufen, was in diesem Fall die Snapchat-App ist. Ich habe mich sehr bemüht, Ihnen einen allgemeinen Überblick über das Snapchat-Systemdesign zu geben. Ich hoffe, Sie fanden es nützlich.
Hinterlassen Sie uns einen Kommentar