Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
technik:loadbalancing [15.05.2021 - 17:10] – Erweiterung um Details Roland Volkmann | technik:loadbalancing [16.05.2021 - 13:35] (aktuell) – Formulierung geändert Roland Volkmann | ||
---|---|---|---|
Zeile 12: | Zeile 12: | ||
Jedes Gateway gibt für jedes bediente Segment eine Präferenz bekannt, deren Berechnung es selbst bestimmen kann, auch unterschiedlich für die einzelnen Segmente. Eine Präferenz ist eine Ganzzahl zwischen -∞ und 100. Je größer die Präferenz, desto mehr ist ein Gateway gewillt, neue Nodes aufzunehmen. Aktuell (Stand Mai 2021) verwenden alle Gateways denselben Algorithmus, | Jedes Gateway gibt für jedes bediente Segment eine Präferenz bekannt, deren Berechnung es selbst bestimmen kann, auch unterschiedlich für die einzelnen Segmente. Eine Präferenz ist eine Ganzzahl zwischen -∞ und 100. Je größer die Präferenz, desto mehr ist ein Gateway gewillt, neue Nodes aufzunehmen. Aktuell (Stand Mai 2021) verwenden alle Gateways denselben Algorithmus, | ||
- | Ziel ist, den durch die Nodes transportierten Gesamt-Traffic | + | Ziel ist, den durch die Nodes transportierten Gesamt-Traffic |
+ | |||
+ | Die Herausforderung bei der Präferenz-Bestimmung liegt nun darin, dass ein Gateway zum Zeitpunkt der Verbindungsanfrage eines Nodes nicht vorhersehen kann, welchen zusätzlichen Traffic das zur Folge hat. Darüber hinaus ist der Traffic auch von der Tageszeit und äusseren Umständen abhängig, die nicht kalkulierbar sind (siehe kurze Spitze gegen 22 Uhr in der nachfolgenden Grafik). | ||
+ | |||
+ | {{: | ||
Wir greifen derzeit auf den Verlauf des Traffics in den letzten 24 Stunden zurück, konkret auf das Maximum der letzten 24 Stunden-Mittelwerte, | Wir greifen derzeit auf den Verlauf des Traffics in den letzten 24 Stunden zurück, konkret auf das Maximum der letzten 24 Stunden-Mittelwerte, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Im obigen Beispiel sieht man sehr schön, dass ein Gateway eine sehr niedrige Präferenz haben kann, obwohl der aktuelle Traffic gar nicht am Maximalwert liegt (wäre hier 250 MBit/s). | ||
Jedes Gateway stellt seine Präferenz als JSON-Dokument per HTTP unter dem Pfad ''/ | Jedes Gateway stellt seine Präferenz als JSON-Dokument per HTTP unter dem Pfad ''/ | ||
Zeile 20: | Zeile 28: | ||
===== Der Verteilungsmechanismus ===== | ===== Der Verteilungsmechanismus ===== | ||
- | Erste Ideen zur Verteilung basierten darauf, dass sich ein Gateway unterhalb einer minimalen Präferenz aus dem DNS austrägt, und so beim VPN-Verbindungsaufbau für die Nodes nicht mehr erreichbar ist. Steigt die Präferenz dann wieder über einen Schwellwert, | + | Erste Ideen zur Verteilung basierten darauf, dass sich ein Gateway unterhalb einer minimalen Präferenz aus dem DNS austrägt, und so beim VPN-Verbindungsaufbau für die Nodes nicht mehr erreichbar ist. Steigt die Präferenz dann wieder über einen Schwellwert, |
Eine [[https:// | Eine [[https:// | ||
- | Wenn ein Node eine Verbindung zu einem Gateway aufbaut, schickt er Handshakes an die Gateways. Der Node stellt die Verbindung dann zu dem Gateway her, das zuerst auf den Handshake antwortet. Verzögert man also auf den Gateways die Antwort auf den initalen Handshake eines Nodes in Abhängigkeit der Präferenz - je niedriger die Präferenz ist, um so länger die Verzögerung der Antwort - dann lässt sich damit eine Verteilung realisieren, | + | Wenn ein Node eine Verbindung zu einem Gateway aufbaut, schickt er Handshakes an die Gateways. Der Node stellt die Verbindung dann zu dem Gateway her, das zuerst auf den Handshake antwortet. Verzögert man also auf den Gateways die Antwort auf den initalen Handshake eines Nodes in Abhängigkeit der Präferenz - je niedriger die Präferenz ist, um so länger die Verzögerung der Antwort - dann lässt sich damit eine Verteilung realisieren, |
Um Verzögerungen beim Verbindungsaufbau verwenden zu können, musste die fastd-Konfiguration auf den Gateways angepasst werden. Ursprünglich wurden den fastd-Instanzen die Dateien mit den Keys direkt zur Verfügung gestellt, so dass diese bei einer Verbindungsanfrage eigenständig ermitteln konnten, ob der Node zur Verbindung berechtigt ist. Will man statt dessen Einfluss auf den Verbindungsaufbau nehmen, so ist das durch die Nutzung eines Scriptes " | Um Verzögerungen beim Verbindungsaufbau verwenden zu können, musste die fastd-Konfiguration auf den Gateways angepasst werden. Ursprünglich wurden den fastd-Instanzen die Dateien mit den Keys direkt zur Verfügung gestellt, so dass diese bei einer Verbindungsanfrage eigenständig ermitteln konnten, ob der Node zur Verbindung berechtigt ist. Will man statt dessen Einfluss auf den Verbindungsaufbau nehmen, so ist das durch die Nutzung eines Scriptes " | ||
Zeile 34: | Zeile 42: | ||
Bei Tests hat sich gezeigt, dass die Verzögerung maximal 10 Sekunden betragen darf, damit überhaupt noch eine Verbindung zustande kommt. | Bei Tests hat sich gezeigt, dass die Verzögerung maximal 10 Sekunden betragen darf, damit überhaupt noch eine Verbindung zustande kommt. | ||
- | Wir haben außerdem beobachtet, dass fastd nicht alle Gateways gleichzeitig anfragt, sondern pro Gateway ein zufälliges Delay zwischen 0 und 3 Sekunden einfügt, um eine gleichmäßigere Verteilung zu erreichen. Da das mit unserem Verzögerungsmechanismus auf den Gateways im Konflikt steht, haben wir seit Firmware 2.3 einen [[https:// | + | Wir haben außerdem beobachtet, dass fastd nicht alle Gateways gleichzeitig anfragt, sondern pro Gateway ein zufälliges Delay zwischen 0 und 3 Sekunden einfügt, um eine gleichmäßigere Verteilung zu erreichen. Da das mit unserem Verzögerungsmechanismus auf den Gateways im Konflikt steht, haben wir seit Firmware 2.3 einen [[https:// |
Geeignete Verzögerungswerte aus den Präferenzen zu ermitteln, lässt sich über unterschiedliche Funktionen (Kennlinien) realisieren. | Geeignete Verzögerungswerte aus den Präferenzen zu ermitteln, lässt sich über unterschiedliche Funktionen (Kennlinien) realisieren. | ||
- | {{ : | + | |
+ | {{: | ||
Von uns wurde nach mehreren Versuchen die 50/ | Von uns wurde nach mehreren Versuchen die 50/ | ||
Zeile 48: | Zeile 57: | ||
===== Monitoring ===== | ===== Monitoring ===== | ||
- | Wir haben ein [[https:// | + | Wir haben ein [[https:// |
+ | Der Gesamt-Traffic im Freifunknetz und auf den Gateways wird [[https:// | ||
===== Implementierung ===== | ===== Implementierung ===== | ||
- | [[https:// | + | [[https:// |
+ | * Die Präferenz wird im Script [[https:// | ||
+ | * Die Prüfung des fastd-Keys und das Delay ist in [[https:// |