"Distributed locks aren't real," "Anyone who's trying to sell you a distributed lock is selling you sawdust and lies." This may sound rather bleak, but it doesn't say that locking, itself, is impossible in a distributed system: It's just that some like to remind us that all of the system's components must participate in the protocol. This blog post is the story of how we implemented a distributed locking protocol that gives your components a straightforward way of joining in.
The coordinating component of the protocol is an object that extends the semantics of java.util.concurrent.locks.Lock
. We call it FencedLock
, following the naming used in Martin Kleppmann's 2016 post "How to Do Distributed Locking."