Node-übergreifendes Locking

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 Spalte ID.
  • 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.

Fertig. Sehr simpel. Wirkt Node-übergreifend. Klappt sogar Sprach-unabhängig.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.