distributed lock

前幾天看到一篇distributed lock的中文文章[1],細看發現是很久以前就有討論的,有關redis用於lock的討論[2]。


dist-lock的應用類型

對於effciency,lock失效不會帶來太大的問題,所以可議的部分在於correctness。


甚麼時候鎖會失效

假設我們想透過鎖保護某項資源的存取,如果使用lock,可能在很多地方隱藏著fail:

結論是根本無法確保執行的順序(不同client間)

如何解決:

給每個request一個increse only access token。


為什麼redis不適合

redlock根據”時間”的假設來設計演算法,而時間是不可靠的,因為有delay,而且無法預估。

他假設

選用其他更穩健的consensus algo: raft, zab, paxos。


[1] http://lday.me/2018/11/18/0022_how_to_do_distributed_lock/
[2] https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html