Verwendung von ProjectSpaces
In DBAL (Doctrine Database Abstraction Layer) sind ProjectSpaces konfigurativ verwaltete Apps. Es ist also möglich Datenstrukturen in brandbox zu redaktionell zu pflegen und zu veröffentlichen.
Dazu steht ein zentraler Prozess zur Verfügung. Wenn nun eine Integration eine Datenbank-Struktur erzeugen möchte, wird das Event \Brandbox\Framework\Brandbox\Dbal\Lib\Event\OnBuildProjectSpace gefeuert. Der ProjectSpace wird dadurch erstellt und Doctrine rendert die Datenstruktur.
Um im Umfeld von Kubernetes mit mehreren Pods arbeiten zu können, müssen die ProjectSpaces zwischen den Pods synchronisiert werden. Dazu Synchronisierungszeitpunkt im POD mit dem Aktualisierungszeitpunkt der Datenstruktur abgeglichen. Mit jedem Request wird geprüft, ob sich eine Aktualisierung ergeben hat, die zu einem Resync führt. Alle PODs prüfen bei jedem Request in jedem Endpoint, ob sie aktuell sind. Falls nicht, wird die aktualisierte Datenstruktr bezogen und nach lokal synchronisiert. Siehe ProjectSpace::sync()
Umgang mit Redeploys
Wurde das System frisch deployed, wird dabei auch der Cache geleert. In dem Fall wird der ProjectSpace aus dem zuvor erstellten Backup (/temp/plugin/framework/dbal) bezogen. Es ist dadurch immer sichergestellt, dass bereits gerenderte Datenstrukturen wiederherstellbar sind, der Synchronisierungsprozess aber auch schnell bleibt.
Bei der Installation
Vor der Installation wird der ProjectSpace in den POD synchronisiert, sodasss sichergestellt ist, dass kein Datenverlust entsteht.