In einer Umgebung mit mehreren Nodes (im Cluster z.B.) will man schonmal verhindern, dass Code-Teile mehrfach parallel laufen. Node-Lokale Dinge wie Javas „synchronized“ oder explizite Speicher-Semaphoren helfen dabei natürlich nicht.
Idee mit Hilfe einer DB-Tabelle, auf die alle zugreifen können:
- Tabelle
Locks
mit nur einer SpalteID
. - jeder zu schützende Code-Bereich hat eine ID und eine Zeile, die einmalig irgendwo angelegt werden muss.
- Der eigentlich Lock erfolgt dann folgendermaßen:
- Der Bereich beginnt mit
SELECT ... FOR UPDATE
. - Damit wird auf DB-Ebene ein Write-Lock angelegt, der bis zum Ende der Transaktion gilt.
- Der Bereich beginnt mit
Fertig. Sehr simpel. Wirkt Node-übergreifend. Klappt sogar Sprach-unabhängig.