Ich habe eine REST-WebAPI mit dem Services-Modul entwickelt. Es funktioniert gut. Ich habe einen Client dieser API mit projizierter Nutzung, für den ich meine Drupal-Instanz horizontal skalieren muss. Beachten Sie, dass ich aufgrund der Art meiner API, die erhebliche CPU- und GPU-Ressourcen erfordert, keine Cloud-Server verwenden kann. Aufgrund der Art meiner API müssen die Drupal-Instanzen auch unter Windows ausgeführt werden. (Für meine Anwendung ist Software erforderlich, die nur unter Win64 verfügbar ist.) Ich habe jetzt einen ziemlich leistungsfähigen Server an einem gemeinsamen Standort, und für diesen ehrgeizigen Client plane ich, meine Hardware auf folgende Weise horizontal zu skalieren:
- Ein CentOS-Server, auf dem HaProxy als Front-End-Load-Balancer ausgeführt wird.
- Zwei zu Beginn, weitere werden nach Bedarf hinzugefügt: Windows Server 2008 R2-Server, auf denen Drupal gehostet wird.
- Ein CentOS-Datenbankserver, der eine einzelne Datenbank für mehrere Drupal-Instanzen bereitstellt.
- Ein CentOS-Datenbankserver, der im Replikationsmodus ausgeführt wird, falls DB-Server 1 ausfällt.
Meine Fragen haben damit zu tun, wie der HaProxy Load Balancer funktioniert. Ich gehe davon aus, dass die von den Drupal-Instanzen erstellten Sitzungs-IDs voneinander eindeutig sind. Überprüft der Load Balancer die Sitzungs-ID und leitet alle Anforderungen an denselben Server weiter, der diese Sitzungs-ID erstellt hat? Wie würde eine REST-WebAPI-Kommunikation funktionieren, wenn der Lastenausgleich dazu führen würde, dass jede API-Anforderung an einen anderen Server gesendet wird? Müssen alle Daten, auf die von der WebAPI verwiesen wird, in der Datenbank gespeichert werden, da ich nicht sicherstellen kann, dass mehrere API-Anforderungen für dieselbe Ressource an dieselbe Drupal-Instanz weitergeleitet werden?