{"action":"created","issue":{"url":"https://api.github.com/repos/dgraph-io/dgraph/issues/12","labels_url":"https://api.github.com/repos/dgraph-io/dgraph/issues/12/labels{/name}","comments_url":"https://api.github.com/repos/dgraph-io/dgraph/issues/12/comments","events_url":"https://api.github.com/repos/dgraph-io/dgraph/issues/12/events","html_url":"https://github.com/dgraph-io/dgraph/issues/12","id":121554266,"number":12,"title":"Discovery and clustering","user":{"login":"pires","id":1752631,"avatar_url":"https://avatars.githubusercontent.com/u/1752631?v=3","gravatar_id":"","url":"https://api.github.com/users/pires","html_url":"https://github.com/pires","followers_url":"https://api.github.com/users/pires/followers","following_url":"https://api.github.com/users/pires/following{/other_user}","gists_url":"https://api.github.com/users/pires/gists{/gist_id}","starred_url":"https://api.github.com/users/pires/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pires/subscriptions","organizations_url":"https://api.github.com/users/pires/orgs","repos_url":"https://api.github.com/users/pires/repos","events_url":"https://api.github.com/users/pires/events{/privacy}","received_events_url":"https://api.github.com/users/pires/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/dgraph-io/dgraph/labels/feature","name":"feature","color":"5319e7"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":7,"created_at":"2015-12-10T19:00:19Z","updated_at":"2015-12-14T09:09:11Z","closed_at":null,"body":"For clustering to be achieved automatically, a discovery mechanism needs to be implemented. Multicast-based discovery mechanisms are always prefered because it requires zero-configuration, but since most, if not all cloud providers block multicast traffic I propose the adoption of a [gossip protocol](https://en.wikipedia.org/wiki/Gossip_protocol) like the one implemented by [`Serf`](https://www.serfdom.io/).\r\n\r\nBy doing so, there's only one requirement in order to form a cluster, at least one node must exist and it must be reachable by any new nodes. Every new node (member) does a full state sync with the existing member and begins gossiping its existence to the cluster.\r\n\r\nGossip allows to keep an eventually-consistent view of the cluster at any given node.\r\n\r\nThoughts?"},"comment":{"url":"https://api.github.com/repos/dgraph-io/dgraph/issues/comments/164383931","html_url":"https://github.com/dgraph-io/dgraph/issues/12#issuecomment-164383931","issue_url":"https://api.github.com/repos/dgraph-io/dgraph/issues/12","id":164383931,"user":{"login":"pires","id":1752631,"avatar_url":"https://avatars.githubusercontent.com/u/1752631?v=3","gravatar_id":"","url":"https://api.github.com/users/pires","html_url":"https://github.com/pires","followers_url":"https://api.github.com/users/pires/followers","following_url":"https://api.github.com/users/pires/following{/other_user}","gists_url":"https://api.github.com/users/pires/gists{/gist_id}","starred_url":"https://api.github.com/users/pires/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pires/subscriptions","organizations_url":"https://api.github.com/users/pires/orgs","repos_url":"https://api.github.com/users/pires/repos","events_url":"https://api.github.com/users/pires/events{/privacy}","received_events_url":"https://api.github.com/users/pires/received_events","type":"User","site_admin":false},"created_at":"2015-12-14T09:09:11Z","updated_at":"2015-12-14T09:09:11Z","body":"> What new technologies would existing solution bring in?\r\n\r\nNot sure I follow the question, but basically something like `serf` would allow for:\r\n* Gossip discovery\r\n* Cluster membership management\r\n* Cluster messaging\r\n* [Network tomography](https://en.wikipedia.org/wiki/Network_tomography)\r\n\r\n>  How hard would it be to write our own solution with net/rpc and flatbuffers\r\n\r\nThe discovery process should be pretty doable. The membership management and messaging would be tricky. The network tomography should be hard."}}