2010-07-10 5 views
5

Ich frage mich schon seit einer Weile; Wie können Websites wie Facebook Code mehrere Server haben?Schreiben Multi-Server-Code

Wie kann der Code berücksichtigen, dass mehrere Server denselben Code ausführen und mehr hinzufügen?

Oder geht der Webserver vielleicht unabhängig vom Code damit um?

Antwort

4

Durch Teilen und Netzwerken. Der Code sollte für einen oder mehrere Server identisch sein.

Sie können Daten über Datenbanken, Speicher mit Dingen wie Memcache, die Last mit einem Balancer, etc. teilen. Wenn Sie Server spezialisieren wie Google tut (einige holen URL, einige halten Daten, einige tun Zahlenknirschen, usw.) Hardware zur Hand kann besser genutzt werden.

Der Code kann Dispatch-Logik verwenden (normalerweise über eine API abstrahiert), so dass es funktioniert, wenn es einen Server oder Millionen von ihnen gibt.

IPC (Inter Process Communication) kann netzwerkfähig sein und eine engere Verbindung von Diensten ermöglichen. Google hat sogar ein protocol buffer Projekt, um dabei zu helfen.

Grundsätzlich müssen Server teilen, um echte Vorteile zu erhalten (über Failover/Backup hinaus), der Code muss eine Abstraktionsebene verwenden, um die Freigabe zu erleichtern. Die tatsächliche Freigabe verwendet normalerweise Round-Robin oder Map/Reduce Logik.

3

Das zugrunde liegende Architekturmuster ist "Shared-Nothing-Architektur". Die Idee besteht darin, die am stärksten genutzten Teile der Architektur so zu bauen, dass sie verteilt werden können und dass verteilte Peers nichts über andere Peers wissen müssen, so dass sie nicht miteinander kommunizieren müssen. Auf diese Weise können sie skaliert werden, indem andere Peers hinzugefügt werden.

Normalerweise erfordert dies eine Art von Verkehrsmessung (Load Balancing) zum Einspeisen der gemeinsam genutzten Komponenten und einige Persistenz und/oder Zustandssynchronisation.

Die "klassische" Architektur dafür sind ein oder mehrere Lastbalamcers, die den Verkehr auf mehrere "shared-nothing" -Anwendungsserver verteilen, die gegen eine gemeinsame Datenbank laufen. In der Regel ist die Appication-Server-Hardware eher günstig und die Datenbank-Hardware ist ein oder zwei große Eisen je nach Auslastung.

Heutzutage zerhacken immer mehr Lösungen auch die Datenbank in Stücke, um sie zu skalieren. Letztendlich führt dies zu verteilten, sharded Datenbanken, wo mehrere db-Knoten existieren und jeder Knoten nur eine Teilmenge der Daten enthält.