0 ansichten

Instagram Architecture & Database – Wie werden Milliarden von Bildern gespeichert und durchsucht?

Instagram Architecture & Database – Wie werden Milliarden von Bildern gespeichert und durchsucht?

Instagram ist heute das beliebteste fotoorientierte soziale Netzwerk der Welt. Mit über einer Milliarde Benutzern ist es zur ersten Wahl für Unternehmen geworden, um ihre Marketingkampagnen durchzuführen.

Dieser Artikel ist ein tiefer Einblick in die Plattformarchitektur und befasst sich mit Fragen wie: Welche Technologien verwendet es im Backend? Welche Datenbanken nutzt die Plattform? Wie speichert es Milliarden von Fotos, die Millionen von dienen QPS (Anfragen pro Sekunde)? Wie sucht es nach Inhalten in den riesigen Datenmengen, die es hat? Lass es uns herausfinden.

Verteilte Systeme
Eine vollständige Liste ähnlicher Artikel zu verteilten Systemen und realen Architekturen finden Sie hier

1. Welche Technologie verwendet Instagram im Backend?

Der serverseitige Code wird von Django Python unterstützt. Alle Web- und Async-Server laufen in einer verteilten Umgebung und sind zustandslos.

Das folgende Diagramm zeigt die Architektur von Instagram:

Instagram-Architektur scaleyourapp.com

Das Backend verwendet verschiedene Speichertechnologien wie z Kassandra, PostgreSQL, Memcache, Redis um den Benutzern personalisierte Inhalte bereitzustellen.

Asynchrones Verhalten

RabbitMQ und Celery erledigen asynchrone Aufgaben wie das Senden von Benachrichtigungen an die Benutzer und andere Hintergrundprozesse des Systems.

Celery ist eine asynchrone Aufgabenwarteschlange, die auf verteilter Nachrichtenkommunikation basiert und sich auf Echtzeitoperationen konzentriert. Es unterstützt auch die Planung. Der empfohlene Nachrichtenbroker für Sellerie ist RabbitMQ.

RabbitMQ hingegen ist ein beliebter Open-Source-Nachrichtenbroker, der mit dem AMQP Advanced Messaging Queuing Protocol geschrieben wurde.

Gearman wird verwendet, um Aufgaben auf mehrere Knoten im System zu verteilen und für die asynchrone Aufgabenbearbeitung wie Medien-Uploads usw. Es ist ein Anwendungsframework zum Verteilen von Aufgaben auf andere Maschinen oder Prozesse, die besser geeignet sind, diese bestimmten Aufgaben auszuführen. Es hat eine breite Palette von Anwendungen, die von hochverfügbaren Websites bis zum Transport von Datenbank-Backup-Ereignissen reichen.

Webanwendung und Softwarearchitektur 101
Beherrschen Sie die Grundlagen der Webarchitektur und großer Systeme

> Beherrschen Sie die Konzepte, die mit dem Design der Architektur einer Webanwendung verbunden sind.
> Lernen Sie, die richtige Architektur und den richtigen Technologie-Stack für einen Anwendungsfall auszuwählen.
> Heben Sie sich von Ihren Mitbewerbern durch ein klares Verständnis der Softwarearchitektur ab.

Berechnung von Trend-HashTags auf der Plattform

Das Trending-Backend ist eine Stream-Verarbeitungsanwendung, die vier Knoten/Komponenten enthält, die linear verbunden sind.

Instagram-trendige Hashtag-Architektur

Die Rolle der Knoten besteht darin, einen Strom von Ereignisprotokollen zu konsumieren und die Rangliste der Trendinhalte, d. h. Hashtags und Orte, zu erstellen.

Vorprozessorknoten

Der Vorprozessorknoten hängt die notwendigen Daten an, die zum Anwenden von Filtern auf die Originalmedien erforderlich sind, an die Metadaten angehängt sind.

Parser-Knoten

Der Parser-Knoten extrahiert alle mit einem Bild verknüpften Hashtags und wendet Filter darauf an.

Scorer-Knoten

Der Scorer-Knoten verfolgt die Zähler für jeden Hashtag basierend auf der Zeit. Alle Zählerdaten werden im Cache gespeichert und auch dauerhaft gespeichert.

Ranker-Knoten

Die Rolle des Ranglistenknotens besteht darin, die Trendbewertungen von Hashtags zu berechnen. Die Trends werden von einem Read-Through-Cache bereitgestellt, der Memcache ist, und die Datenbank ist Postgres.

Verwendete Datenbanken @Instagram

PostgreSQL ist die primäre Datenbank der Anwendung, sie speichert die meisten Daten der Plattform wie Benutzerdaten, Fotos, Tags, Meta-Tags usw.

Als die Plattform immer beliebter wurde und die Daten im Laufe der Zeit enorm wuchsen, dachte das Ingenieurteam von Insta über verschiedene skalierbare NoSQL-Lösungen nach und entschied sich schließlich, die vorhandene PostgreSQL-Datenbank zu teilen, da sie ihren Anforderungen am besten entsprach.

Apropos Skalierung der Datenbank über Sharding und andere Mittel, dieser Artikel YouTube-Datenbank – Wie speichert sie so viele Videos, ohne dass der Speicherplatz knapp wird? ist eine interessante Lektüre.

Der Hauptdatenbankcluster von Instagram enthält 12 Replikate in verschiedenen Zonen und umfasst 12 vierfach extra große Speicherinstanzen.

Hive dient der Datenarchivierung. Es handelt sich um eine Data-Warehousing-Software, die auf Apache Hadoop für Datenabfrage- und Analysefunktionen aufbaut. Ein geplanter Batch-Prozess wird in regelmäßigen Abständen ausgeführt, um Daten aus der PostgreSQL-DB in Hive zu archivieren.

Vmtouch , ein Tool zum Kennenlernen und Verwalten des Dateisystemcaches von Unix- und Unix-ähnlichen Servern, wird verwendet, um In-Memory-Daten zu verwalten, wenn Sie von einer Maschine auf eine andere wechseln.

Die Verwendung von Pgbouncer zum Poolen von PostgreSQL-Verbindungen bei der Verbindung mit dem Backend-Webserver führte zu einer enormen Leistungssteigerung.

Redis, eine In-Memory-Datenbank, wird zum Speichern des Aktivitäts-Feeds, der Sitzungen und der Echtzeitdaten anderer Apps verwendet.

Memcache, ein Open-Source-Caching-System für verteilten Speicher, wird für das Caching im gesamten Dienst verwendet.

Datenmanagement im Cluster

Daten im gesamten Cluster sind letztendlich konsistent, Cache-Ebenen befinden sich zusammen mit den Webservern im selben Rechenzentrum, um Latenz zu vermeiden.

Wenn Sie Datenkonsistenzmodelle, CAP-Theorem und mehr verstehen möchten. Sehen Sie sich hier meinen Webarchitektur-Kurs an.

Die Daten werden in globale und lokale Daten eingeteilt, was dem Team bei der Skalierung hilft. Globale Daten werden in verschiedenen Rechenzentren über geografische Zonen hinweg repliziert. Andererseits sind die lokalen Daten auf bestimmte Rechenzentren beschränkt.

Wenn Sie verstehen möchten, wie die Cloud Workloads global über Verfügbarkeitszonen und Rechenzentren hinweg bereitstellt, wie Cluster funktionieren und mehr. Schauen Sie sich meinen plattformunabhängigen Cloud-Computing-Kurs an.

Das Backend der App wurde zunächst auf AWS gehostet, später aber in Rechenzentren von Facebook migriert. Dies erleichterte die Integration von Instagram mit anderen Facebook-Diensten, verkürzte die Latenz und ermöglichte es ihnen, die Frameworks, Tools für groß angelegte Bereitstellungen, die vom Facebook-Engineering-Team entwickelt wurden, zu nutzen.

Der Backend-Code von Instagram wird von #Django #Python unterstützt. #PostgreSQL ist die primäre #Datenbank der Anwendung. Erfahren Sie hier mehr #verteiltesysteme #softwarearchitektur

Überwachung

Bei so vielen Instanzen, die den Dienst unterstützen, spielt die Überwachung eine Schlüsselrolle bei der Gewährleistung des Zustands und der Verfügbarkeit des Dienstes.

Munin ist ein Open-Source-Tool zur Ressourcen-, Netzwerk- und Infrastrukturüberwachung, das von Instagram verwendet wird, um Metriken über den Dienst zu verfolgen und über Anomalien benachrichtigt zu werden.

StatsD, ein Netzwerk-Daemon, wird verwendet, um Statistiken wie Zähler und Timer zu verfolgen. Zähler bei Instagram werden verwendet, um Ereignisse wie Benutzeranmeldungen, Anzahl der Likes usw. zu verfolgen. Timer werden verwendet, um die Generierung von Feeds und anderen Ereignissen, die von Benutzern in der App ausgeführt werden, zeitlich zu steuern. Diese Statistiken sind nahezu in Echtzeit und ermöglichen den Entwicklern, die System- und Codeänderungen sofort zu bewerten.

Dogslow, eine Django-Middleware, wird verwendet, um die laufenden Prozesse zu überwachen, und es wird ein Snapshot von jedem Prozess erstellt, der länger als die von der Middleware festgelegte Zeit dauert, und die Datei wird auf die Festplatte geschrieben.

Pingdom wird für die externe Überwachung der Website verwendet, um die erwartete Leistung und Verfügbarkeit sicherzustellen. PagerDuty wird für Benachrichtigungen und die Reaktion auf Vorfälle verwendet.

Kommen wir nun zur Sucharchitektur.

Wie führt Instagram eine Suche nach Inhalten durch Milliarden von Bildern durch?

Instagram verwendete zunächst Elasticsearch für seine Suchfunktion, migrierte aber später zu Unicorn, einer von Facebook intern entwickelten Social-Graph-aware-Suchmaschine.

Unicorn unterstützt die Suche auf Facebook und ist auf Indizes mit Billionen von Dokumenten skaliert. Es ermöglicht der Anwendung, Standorte, Benutzer, Hashtags usw. und die Beziehung zwischen diesen Entitäten zu speichern.

In Bezug auf die Suchinfrastruktur von Insta wurden Datenspeicher für Benutzer, Standorte, Hashtags, Medien usw. denormalisiert.

Diese Datenspeicher können auch als Dokumente bezeichnet werden, die in Mengen gruppiert werden, um durch effiziente Mengenoperationen wie UND-ODER und NICHT verarbeitet zu werden.

Die Suchinfrastruktur verfügt über ein System namens Slipstream, das die vom Benutzer hochgeladenen Daten zerlegt, sie durch eine Firehose streamt und sie den Suchindizes hinzufügt.

Die von diesen Suchindizes gespeicherten Daten sind eher suchorientiert als die reguläre Persistenz hochgeladener Daten in die PostgreSQL-Datenbank.

Unten sehen Sie das Diagramm der Sucharchitektur

Instagram-Sucharchitektur scaleyourapp.com

Wenn Sie Hive, Thrift, Scribe nicht kennen. Gehen Sie diese Beschreibung durch, welche Datenbank verwendet Facebook? Ein tiefer Tauchgang. Sie erhalten einen Einblick, wie Facebook Nutzerdaten speichert.

Instagram verwendete zunächst #Elasticsearch für seine Suchfunktion, migrierte aber später zu #Unicorn, einer von Facebook intern entwickelten Social-Graph-Aware-Suchmaschine. #verteiltesysteme #softwarearchitektur

Handverlesene Ressourcen zum Erlernen der Softwarearchitektur und des Designs verteilter Systeme im großen Maßstab
Ich habe eine Liste von Ressourcen (Online-Kurse + Bücher) zusammengestellt, die meiner Meinung nach sehr hilfreich sind, um eine solide Grundlage in der Softwarearchitektur aufzubauen und groß angelegte verteilte Systeme wie Facebook, YouTube, Gmail, Uber usw. zu entwerfen. Hör zu.

Wenn Ihnen der Artikel gefallen hat, teilen Sie ihn im Web. Sie können scaleyourapp.com in den sozialen Medien folgen, Links unten, um über die neuen veröffentlichten Inhalte informiert zu bleiben. Ich bin Shivang, Sie können hier über mich lesen!

votes
Article Rating
Verwandter artikel:  Er stand für die Kellnerin auf und wusste nicht, dass sie Instagram war
Ссылка на основную публикацию
0
Would love your thoughts, please comment.x
Adblock
detector