![DigitalOcean Load Balancer-Integritätsprüfungen überfluten meine CodeIgniter-Sitzungen](https://rvso.com/image/726398/DigitalOcean%20Load%20Balancer-Integrit%C3%A4tspr%C3%BCfungen%20%C3%BCberfluten%20meine%20CodeIgniter-Sitzungen.png)
Ich versuche schon seit einiger Zeit, das herauszufinden, aber bisher ohne Erfolg. Nachdem ich den DigitalOcean-Support ein paar Mal kontaktiert habe, bin ich noch ratloser.
Ich habe das folgende Setup: Die Domäne verweist auf einen DO-Loadbalancer, der sich vor zwei App-Droplets befindet, die meine auf Codeigniter erstellte App hosten. Ein drittes Droplet enthält meinen Datenbankserver. Die App-Server sind PHP7 mit PHP+FPM.
Da für App-Droplets ein Lastenausgleich erfolgt, verwalte ich Sitzungen auf der Datenbank, was aus Benutzersicht gut funktioniert.
Die LB-Integritätsprüfungen sind so konfiguriert, dass sie alle 10 Sekunden über HTTP ausgeführt werden und das Ziel eine von Codeigniter generierte Seite ist.
Zusammenfassung bisher: Da alle 10 Sekunden (6 pro Minute) Integritätsprüfungen an 2 Droplets weitergeleitet werden, würde ich insgesamt 12 Integritätsprüfungen pro Minute erwarten. Da DO stillschweigend über ein automatisches Failover verfügt, können wir davon ausgehen, dass diese Zahl tatsächlich 24 Prüfungen pro Minute betragen würde (wenn sie auch Prüfungen vom Failover-LB senden würden), also 1440 pro Stunde. Die „doppelten“ Prüfungen sind tatsächlich Realität, da meine Sitzungstabelle eine gleiche Menge an Datenverkehr von zwei unterschiedlichen und aufeinanderfolgenden IPs im privaten Bereich aufweist.
Das Problem: Ich sehe tatsächlich genau viermal so viele Sitzungen, wie ich von den Lastverteilern erwarten würde (anstelle von ~1440 pro Stunde sehe ich durchgehend Zahlen von ~5760 Sitzungen pro Stunde). DigitalOcean konnte das nicht herausfinden.
Die Anzahl der Sitzungen ist kein wirkliches Problem, da ich eine Garbage Collection (in Ermangelung eines besseren Namens) habe, die leere Sitzungen mehrmals täglich löscht, um die Tabelle klein zu halten, aber das verwirrt mich. Ich weiß, dass ich die Integritätsprüfungen einfach etwas verteilen oder die Prüfungen auf eine URL verweisen könnte, die die Sitzungshandlerbibliothek nicht startet, aber beide Abhilfemaßnahmen verfehlen den Zweck.
Hat irgendjemand ein solches Verhalten schon einmal beobachtet? Irgendwelche Ideen? Ich bin jetzt schon seit ungefähr einem Monat hinter dem Thema her.
Antwort1
Ohne detaillierte Kenntnisse der internen Funktionsweise des Loadbalancers:
Ich vermute, dass Integritätsprüfungen im Namen jedes Einstiegspunkts und jedes Dienstes ausgeführt werden, der im Load Balancer definiert ist.
Wenn Sie sowohl einen HTTP- als auch einen HTTPS-Einstiegspunkt haben, die beide auf dasselbe Back-End verweisen, führt dies zu zwei einzelnen Integritätsprüfungen, wodurch sich die Anzahl der angezeigten Anfragen verdoppelt.