I'm jumping on a plane right now (a couple hours) but I'd be happy to answer any questions related to Serf once I land. Just leave them here and I'll give it my best shot! We've dreamt of something like Serf for quite awhile and I'm glad it is now a reality.<p>Some recommended URLs if you're curious what the point is:<p>"What is Serf?" <a href="http://www.serfdom.io/intro/index.html" rel="nofollow">http://www.serfdom.io/intro/index.html</a><p>"Use Cases" <a href="http://www.serfdom.io/intro/use-cases.html" rel="nofollow">http://www.serfdom.io/intro/use-cases.html</a><p>Comparison to Other Software: <a href="http://www.serfdom.io/intro/vs-other-sw.html" rel="nofollow">http://www.serfdom.io/intro/vs-other-sw.html</a><p>For the CS nerds, the internals/protocols/papers behind Serf: <a href="http://www.serfdom.io/docs/internals/gossip.html" rel="nofollow">http://www.serfdom.io/docs/internals/gossip.html</a><p>Also, I apologize the site isn't very mobile friendly right now. Unfortunately I can write a lamport clock implementation, but CSS is just crazytown.
Looks like this might be loosely related to Mitchell Hashimoto [1], who makes Vagrant.<p>[1] <a href="https://twitter.com/mitchellh" rel="nofollow">https://twitter.com/mitchellh</a>
The title needs to be improved. "A decentralized, highly available, fault tolerant solution..." for what? The title should include "for service discovery and orchestration".
It seems serf and etcd are both trying to solve service discovery but are attacking it using different approaches. Which is pretty cool!<p>Serf looks to be eventually consistent and event driven. So you can figure out who is up and send events to members. This gives you a lot of utility for the use cases of propagating information to DNS, load balancers, etc.<p>But, you couldn't use serf for something like master election or locks and would need etcd or Zookeeper for that. Serf and etcd aren't mutually exclusive systems in any sense just solving different problems in different ways.<p>They have a nice write-up on the page here: <a href="http://www.serfdom.io/intro/vs-zookeeper.html" rel="nofollow">http://www.serfdom.io/intro/vs-zookeeper.html</a>
This would really benefit from a "how does this relate to zookeeper". I think this is an entirely new service, with different technical insides, and trying to provide a higher level solution to what people usually cobble together with ZK.<p>But I'd be interested in comments from someone knowledgeable.<p>Edit: I see this is addressed at <a href="http://www.serfdom.io/intro/vs-zookeeper.html" rel="nofollow">http://www.serfdom.io/intro/vs-zookeeper.html</a> but it would be nice to have something more "just the facts" rather than arguing the serf is good.
The package documentation for the `serf` library[1] looks really exciting. I've been wanting to make a distributed file synchronization tool, and perhaps this would be an excellent library to build it on.<p>Question: as a relative networking idiot, how does NAT traversal fit into all of this?<p>[1] - <a href="http://godoc.org/github.com/hashicorp/serf/serf" rel="nofollow">http://godoc.org/github.com/hashicorp/serf/serf</a>
How does security work in a system like this. If this is used in a shared hosting system, can a user inject false messages into Serf with for example PHP?
This is actually very cool and is something incredibly handy for managing failover/membership.<p>What I unfortunately don't understand is that there doesn't seem to be a library I can use to take advantage of this in my own application. If I have a program (in Go) am I expected to spin up my own serf process then communicate with it via socket? Is there an option for me to have serf live inside my application?
What happens to your cluster when your network experiences intermittent packet loss and your random UDP messages get lost? Nodes just start going down and up randomly? (For those of you going "So what, that's normal", this not a quality of an HA system)
This isn't much of a solution when it involves putting a binary on every host. Clearly, the best solution is a service framework at the platform level, not a separate, unmodifiable blob thrown on your hardware.