> @jordan
> I'm really interested in your observation about the Consul herding.  Could 
> you elaborate on the herding argument? Perhaps we should write a post about 
> it...

Here's their recipe for Leader Election (which is the same as a lock in this 
case): https://www.consul.io/docs/guides/leader-election.html 
<https://www.consul.io/docs/guides/leader-election.html>

curl -X PUT -d <body> http://localhost:8500/v1/kv/<key>?acquire=<session> 
<http://localhost:8500/v1/kv/%3Ckey%3E?acquire=%3Csession%3E>
Note that a given session can not hold the same lock more than once. ZooKeeper 
is better here - a single client can have multiple threads participating in the 
same lock
If you don't get the lock via the first call, you start "Watching for changes 
... via a blocking query against <key>."
In their API, the way you watch for changes is to use what they call "blocking 
queries": https://www.consul.io/api/index.html#blocking-queries 
<https://www.consul.io/api/index.html#blocking-queries> - whereby "the HTTP 
request will "hang" until a change in the system occurs, or the maximum timeout 
is reached. ". In other words, when the lock is released all watchers are 
notified - i.e. a herd (also not fair). ZooKeeper is superior here because of 
sequential ephemeral nodes. A client waiting for a lock only watches the node 
the precedes him. This has the benefit of being fair and not causing a herd.

-JZ

Reply via email to