假设两个client竞争一个锁,拿到锁的client有资格处理指定的资源。系统的设计目标是同一时刻只有一个client在处理资源。
假设当前client1拿到锁了,client2等待中。 client1正在处理指定资源。
这时client1断开,client2拿到锁,开始处理指定资源;但由于client1并不知道自己已经断开了,所以会继续处理资源,结果造成两个client都在处理同一个资源。
解决办法是每个client在处理时要时不时地轮询自己跟zk是否已经断开连接。
见:
http://stackoverflow.com/questions/14275613/concerns-about-zookeepers-lock-recipe