Es ist ziemlich einfach, wenn Dinge gruppiert und Proxy sind. Weil Sie viele Knoten haben, die denselben Job ausführen können (oder mehrere bei Datenrepositorys wie Suchmaschinen, Hadoop-Dateisystemen usw.)
Führen Sie eine Websuche durch. Sie schlagen www.altavista.com. Der DNS-Eintrag listet ein halbes Dutzend IP-Adressen auf und Ihr Client trifft zufällig eine. Jede IP ist ein Cisco-Router, der Fans auf einen zufälligen von 8 physischen Front-End Servern (insgesamt 48) mit internen IP-Adressen überträgt. Dieser Server normalisiert Ihre Abfrage (entfernt Leerzeichen usw.) und verwendet dann einen MD5-Hash davon. Der MD5 entscheidet, an welchen von 300 Proxyservern diese Abfrage gesendet wird. Diese Abfrage wird über ein Standardprotokoll wie SOAP an den Proxy weitergeleitet.
Die Front-End-Server sind austauschbar, da sie nur vorübergehende Anforderungen einer einzelnen Abfrage verarbeiten. Außerhalb des schlimmsten Falls wird die Anfrage eines Kunden gelöscht. Sie verwenden RRD-Daten oder andere Datenerfassungen, um zu überwachen, wann ein Front-End-Server ausfällt, und leiten seinen Datenverkehr an einen Standby-Server um. Gleiches gilt für die Cisco-Router.
Der Proxy überprüft zunächst seinen Cache . Bei einem Cache-Treffer wird die Lokalisierung gemischt und die Antwort zurückgesendet. erledigt. Wenn es sich um einen "Cache-Fehler" handelt, fächert der Proxy die Abfrage an die Suchcluster auf.
Wenn ein Proxy ausfällt, kann erneut ein anderer physischer Computer gegen diesen Proxy ausgetauscht werden. Es ist jetzt etwas kritischer, da die Proxys nicht austauschbar sind. Jeder "besitzt" einen kleinen Ausschnitt aus dem Suchergebnisspektrum. Wenn also die 0x0000-0x00d9-Maschine ausfällt, muss der Ersatz wissen, dass er für diesen Bereich eingreifen muss. Schlimmer noch, dieser Ersatzcomputer hat einen leeren Cache, sodass jede Suchabfrage ein Cache-Miss ist. Dadurch wird die Belastung der Suchcluster richtig um ein winziges Bit pro ausgefallenem Proxy erhöht. Das heißt, wenn Sie alle Proxys gleichzeitig bouncen, tun Sie dies nicht während der Hauptsuchzeiten !
Die Suchcluster weisen eine ähnliche Schichtung auf und Redundanz natürlich, und jedes Segment der Suchdatenbank befindet sich auf mehreren Knoten. Wenn also ein Knoten ausfällt, können andere Knoten diesen Teil der Ergebnisse bedienen.
Ich konzentriere mich auf den Proxy als Beispiel. Die Kommunikation erfolgt über SOAP, die Kommunikation über SOAP erfolgt über ein ähnliches Protokoll auf hoher Ebene. Daten, die ein- und ausgehen, sind vorübergehend, mit Ausnahme des Caches, der für den Ausgleich der Suchmaschinenclusterlast wichtig ist. Der Punkt ist, dass es jederzeit sofort ausgetauscht werden kann, mit dem schlimmsten Fall, dass einige Suchvorgänge abgelaufen sind. Dies würde der Front-End-Server bemerken und könnte seine Abfrage einfach erneut senden. Zu diesem Zeitpunkt wäre der neue Proxy aktiv.
Wenn Sie also 300 Proxys haben, dauert dies eine halbe Stunde Wenn ein Proxy seinen Cache wiederherstellt und die Suchmaschinenlast um 20% erhöht werden kann, können Sie alle 30 Sekunden einen Proxy austauschen. In einem gleitenden Zeitraum von 30 Minuten erstellen 60 Proxys (20%) Caches neu. Vorausgesetzt, es besteht sogar die dringende Notwendigkeit, so schnell zu gehen.
Die Einführung dieses Beispiels dauert 2 1/2 Stunden. Wenn für eine aufkommende Bedrohung eine schnellere Reaktion erforderlich ist, müssen Sie entweder mehr Cache-Fehler hinnehmen oder Ihren Dienst lange genug herunterfahren, um Patches zu erstellen (jedoch bei der Suche) Beispiel für eine Engine: Die Cache-Fehler sind immer noch ein Problem, wenn Sie wieder hochfahren. Ich habe die RRD-Diagramme nach einem Notfall-DB-Neuladen und dem erforderlichen Cache-Flush gesehen. Es ist etwas zu sehen.)
Natürlich normalerweise Der Prozess kann ohne vollständigen Neustart gepatcht, gestoppt und neu gestartet werden. Ich habe eine Betriebszeit von 2 Jahren auf Produktionsknoten gesehen.