Entschuldigen Sie, dass ich so eine hochtrabende Frage stelle. Ich verstehe die Grundlagen des Server-Load-Balancing, aber das Konzept, 30.000 Server zu verwalten, ist mir etwas fremd. Handelt es sich wirklich um dasselbe Konzept wie beim Balancing von 2 oder 3 Servern, nur 10.000-mal so hoch?
In welcher Beziehung steht dies zu Dingen wie Memcached, SQL/MySQL, Suchmaschinen usw.?
Handelt es sich um ein hierarchisches System mit „Controller“-Servern und Slave-Servern, die die Daten auf dieser Grundlage bereitstellen? Wie wird mit Redundanz umgegangen?
Vielen Dank für alle Informationen oder Hinweise zu einem Artikel zu diesem Thema.
BEARBEITENDanke für die Antworten, Leute. Mein Beitrag wurde geschlossen, aber ich habe den Titel überarbeitet. Hoffentlich wird er wieder geöffnet, da ich den Problemlösungsprozess, der mit diesen hochrangigen Datenlösungen verbunden ist, faszinierend finde und derzeit eine API baue, die eine grundlegende Lastverteilung erfordert, daher die Frage.
Antwort1
Der Großteil des Software-Stacks, den Google auf seinen Servern verwendet, wurde selbst entwickelt. Um die Auswirkungen unvermeidbarer Hardwarefehler zu verringern, ist die Software fehlertolerant konzipiert.
Quelle:Google Platform
Nach dem Lesen des Artikels gehe ich davon aus, dass es sich um dasselbe Konzept handelt wie das Ausbalancieren der Last zwischen wenigen Servern, die auf über 1.000 Server hochskaliert werden, indem ein intern entwickelter Software-Stack auf Basis von Linux verwendet wird. Beispiel:GFS(Google File System),Großer Tisch- Strukturiertes Speichersystem basierend auf GFS
DasDer Link beschreibt, wie sie die Netzwerklast ausgleichen.
Sie benutzenLastausgleichsschalterum die Last zu verteilen. Alle Anfragen für die Website kommen bei einer Maschine an, die die Anfrage dann an einen der verfügbaren Server weiterleitet. Der Switch kann anhand der Server herausfinden, welcher am wenigsten ausgelastet ist, sodass alle die gleiche Arbeitslast haben.
Googles Netzwerktopologielautet wie folgt:
Wenn ein Client-Computer versucht, eine Verbindung zu Google herzustellen, lösen mehrere DNS-Server www.google.com über die Round-Robin-Richtlinie in mehrere IP-Adressen auf. Darüber hinaus fungiert dies als erste Ebene des Lastenausgleichs und leitet den Client an verschiedene Google-Cluster weiter. Ein Google-Cluster verfügt über Tausende von Servern, und sobald der Client eine Verbindung zum Server hergestellt hat, wird ein zusätzlicher Lastenausgleich durchgeführt, um die Abfragen an den am wenigsten ausgelasteten Webserver zu senden.
Antwort2
Das Problem ist, wenn die Software nicht skalierbar ist, wie soll sie es dann sein? Eine der größten Einschränkungen von Facebook ist derzeit beispielsweise die Abhängigkeit von MySQL. Sie konnten das Problem umgehen, indem sie immer mehr Rechner darauf setzten, aberIhr eigener Ingenieur nennt es „ein Schicksal, das schlimmer ist als der Tod“.
Normalerweise müssen Sie in der Lage sein, Anfragen auszugleichen – und viele Projekte, ob Open Source oder andere, sind dafür ausgelegt. Aber das bringt Mehraufwand mit sich, darunter das Schreiben von Protokollen, verzögerte Schreibvorgänge und „eventually consistent“-Architekturen. Mit anderen Worten: Skalierung ist nicht billig.
Dinge wie Webserver, die statische Inhalte bereitstellen, können also problemlos parallelisiert werden. Memcached und andere Caching-Systeme können problemlos lastenausgeglichen werden. Aber wie ändern Sie einzelne Fehlerquellen? Wie skaliert Ihre einzelne, große relationale Datenbank? Was ist mit Dateispeichern? Im Wesentlichen ist dies ein ganzer Forschungszweig ... nichts, was mit einer einzigen Frage beantwortet werden kann.
Antwort3
Ich denke, die gleichen Konzepte sollten gleich sein und der entscheidende Punkt ist, wie Sie die Last und die Daten auf die verfügbaren Ressourcen verteilen und wie Sie Ihre Daten lokalisieren.
Eine Möglichkeit ist die geografische Verteilung der Server. Jeder Benutzer wird zum nächstgelegenen Server weitergeleitet.
Zum Abrufen der angeforderten Daten kann ein registrierungsähnlicher Dienst verwendet werden.
Denken Sie an die Implementierung eines DNS-Dienstes. Dieser enthält eine sehr große verteilte Datenbank. Stammknoten leiten Benutzer zu anderen Knoten auf niedrigerer Ebene weiter und so weiter, bis Sie den zuständigen Knoten erreichen, der Ihre Abfrage beantworten kann.