Frage

Vor kurzem habe ich einige Load-Balancing-Fähigkeiten, um ein Stück Software hinzugefügt, die ich geschrieben habe. Es ist eine Netzwerk-Anwendung, die einige Daten Knirschen tut basierend auf einer Eingabe von einer SQL-Datenbank kommen. Da das Knirschen recht intensiv sein können habe ich die Fähigkeit hinzugefügt mehrere Instanzen dieser Anwendung haben auf verschiedenen Servern ausgeführt werden, die Last zu teilen, aber da es nun das Load-Balancing ist eine manuelle Handlung. Ein Benutzer muss angeben, welche Instanzen nehmen, welchen Teil der Eingangsdomäne.

Ich möchte, dass auf die nächste Stufe zu nehmen und die Instanzen so programmieren, dass automatisch das Tauchen auf der Eingangsdaten zu verhandeln und zu erkennen, wenn einer von ihnen „verschwindet“ (abgestürzt oder wurde ausgeschaltet), so dass die verbleibende Instanzen auf der ausgefallenen Instanz der Arbeitsbelastung erfolgen können.

Um dies zu implementieren ich angesichts bin ein einfaches Heartbeat-Protokoll zwischen den Instanzen verwenden, um zu bestimmen, wer online ist und wer nicht, und während diese nicht sehr kompliziert ist würde ich gerne wissen, ob es irgendwelche etablierten Heartbeat-Netzwerk-Protokolle (basierend auf UDP, TCP oder beides).

Natürlich geschieht dies viel in der Netzwerkwelt mit Clustering, Failover und Hochverfügbarkeits-Technologien, damit ich am Ende denke, ich würde gerne wissen, ob vielleicht irgendwelche etablierten Protokollen oder Algorithmen, die ich bewusst sein sollten oder implementieren.

Bearbeiten

Es scheint, auf den Antworten basiert, dass entweder gibt es keine gut Protokolle Herzschlag festgestellt oder dass niemand weiß über sie (was bedeuten würde, dass sie nicht so gut, nachdem alle etablierten), in dem Fall, dass ich bin nur würde meine eigene Rolle.

Während keine der Antworten angeboten, was ich gesucht habe gesagt, ich werde für Antwort Matt Davis da es in der Nähe und er zeigte eine gute Idee heraus Multicast zu verwenden.

Vielen Dank für Ihre Zeit ~

War es hilfreich?

Lösung

Distribued Interactive Simulation (DIS), die unter IEEE Standard-1278, verwendet einen Standard-Herzschlag von 5 Sekunden über UDP-Broadcast. Ein DIS Herzschlag ist im Wesentlichen eine Entitätsstatus PDU, die vollständig den Zustand definiert, einschließlich der Position, der gegebenen Einheit. Aufgrund seiner Anwendung innerhalb der Simulation Community, DIS verwendet auch ein Konzept als Dead-Reckoning bezeichnete höhere Frequenz Herzschläge zu liefern, wenn die Ist-Position, beispielsweise außerhalb einer bestimmten Schwelle von seiner vorhergesagten Position ist.

In Ihrem Fall wäre ein DIS Entitätsstatus PDU Overkill. Ich erwähne es nur, um die Tatsache zur Kenntnis, die Herzschläge in der Frequenz abhängig von den Umständen variieren können. Ich weiß nicht, dass Sie so etwas wie dies für die Anwendung benötigen würden Sie beschrieben, aber man weiß ja nie.

Für Herzschlag, verwenden UDP, nicht TCP. Ein Herzschlag ist, von der Natur, ein verbindungsloses contrivance, so geht es weiter, dass UDP (verbindungslos) als TCP mehr relevant ist hier (verbindungsorientiert).

Die Sache im Auge über UDP-Broadcasts zu behalten ist, dass eine Broadcast-Nachricht an der Broadcast-Domain . Kurz gesagt, wenn Sie Computer, die durch eine Schicht-3-Gerät getrennt werden, beispielsweise ein Router, dann Sendungen werden nicht zur Arbeit gehen, weil der Router nicht Broadcast-Nachrichten von einer Broadcast-Domain zu einem anderen übertragen. In diesem Fall würde ich mit Multicast empfehlen, da es die Broadcast-Domänen erstrecken wird, die Time-to-Live (TTL) Wert Bereitstellung hoch genug eingestellt. Es ist auch ein automatisierter Ansatz als gerichtet Unicast, die den Absender erfordern würden die IP-Adresse des Empfängers kennen, um die Nachricht zu senden.

Andere Tipps

Broadcast-Herzschlag jedes t UDP verwendet wird; wenn Sie nicht von einer Maschine in mehr als k * t gehören, dann ist davon ausgegangen, nach unten. Achten Sie darauf, dass die aggregierte Bandbreite nicht eine Belastung für die Ressourcen verwendet wird. Sie können IP-Broadcast-Adressen verwenden, oder eine Liste der spezifischen IP-Adressen halten Sie Arbeit für tun.

Stellen Sie sicher, dass der Herzschlag ein „reboot count“ sowie „Geräte-ID“ enthält, so dass Sie vorherigen Serverzustand kennen, ist nicht in der Nähe.

Ich würde empfehlen, MapReduce mit wenn sie paßt. Es würde eine Menge Arbeit sparen.

Ich bin mir nicht sicher, dass dies die Frage beantworten, aber Sie könnten durch die Art und Weise Weblogic Server-Clustering Arbeit unter der Haube interessiert sein. Aus dem Buch Mastering BEA WebLogic Server :

  

[...] WebLogic Server Clustering bietet eine lose Kopplung des Servers im Cluster. Jeder Server im Cluster ist unabhängig und beruht nicht auf einem anderen Server für alle grundlegenden Operationen. Auch wenn Kontakt mit jedem anderen Server verloren geht, wird jeder Server weiterhin in der Lage laufen und sein, um die Anforderungen zu verarbeiten es empfängt. Jeder Server im Cluster unterhält eine eigene Liste von anderen Servern im Cluster durch regelmäßige Herzschlag-Nachrichten. Alle 10 Sekunden sendet jeder Server eine Herzschlagnachricht an die anderen Server im Cluster sie wissen, es ist immer noch am Leben zu lassen. Herzschlag-Nachrichten werden mit IP-Multicast-Technologie in die JVM gebaut gesendet, so dass dieser Mechanismus effizient und skalierbar wie die Anzahl der Server in dem Cluster groß wird. Jeder Server empfängt diese Heartbeat-Nachrichten von anderen Servern und nutzt sie ihre aktuelle Clustermitgliedschaft Liste zu halten. Wenn ein Server-Misses in Folge von einem anderen Server zu drei Herzschlag-Nachrichten empfängt, nimmt sie diesen Server aus der Mitgliedschaftsliste, bis es eine anderen Herzschlag-Nachricht von dem Server empfängt. Diese Herzschlag-Technologie ermöglicht es Servern dynamisch hinzugefügt werden und fielen aus dem Cluster ohne Auswirkungen auf den vorhandenen Server Konfigurationen.

Cisco Content-Switches ist eine Hardware-Lösung für dieses Problem. Sie implementieren eine virtuelle IP-Adresse als Frontend zu mehreren realen Servern, deren reale IP-Adressen sind mit dem Schalter bekannt. Der Switch sendet periodisch HTTP HEAD-Anforderungen an die Web-Server, sie laufen noch, um zu überprüfen (die der Switch-Software ein „Keep-Alive“ nennt, obwohl dies den Server nicht halten sich am Leben). Der Cisco-Switch übernimmt den Verkehr auf der virtuellen IP und leitet sie an den tatsächlichen Web-Server, konfigurierbare Lastenausgleich wie Round-Robin oder benutzerdefinierte Lastausgleich.

Dieser Schalter Einzelhandel im Bereich 3-10K $, obwohl mein Geschäftspartner eines gepflückt für etwa 300 $ vor einem Jahr auf eBay. Wenn Sie es sich leisten können, stellen sie eine bewährte Hardware-Lösung auf die Frage, wie ein Dienst haben transparent über mehrere Server verteilt. Redhat verfügt über eine integrierte in Port-Konfiguration, so dass Sie Ihre eigenen Cisco-Switch mit einem billigen RedHat Box implementieren könnte. Google für "virtuelle IP-Adresse" und "Cisco Content-Router" für weitere Informationen.

Neben Hardware-Load-Balancer zu versuchen, können Sie auch eine Frei Open-Source-Load-Balancing-Software-Anwendung versuchen, wie

scroll top