How to do distributed locking — Martin Kleppmann’s blog