{"action":"closed","issue":{"url":"https://api.github.com/repos/srotya/sidewinder/issues/29","repository_url":"https://api.github.com/repos/srotya/sidewinder","labels_url":"https://api.github.com/repos/srotya/sidewinder/issues/29/labels{/name}","comments_url":"https://api.github.com/repos/srotya/sidewinder/issues/29/comments","events_url":"https://api.github.com/repos/srotya/sidewinder/issues/29/events","html_url":"https://github.com/srotya/sidewinder/issues/29","id":223286420,"number":29,"title":"Add basic clustering framework","user":{"login":"ambud","id":9707358,"avatar_url":"https://avatars2.githubusercontent.com/u/9707358?v=3","gravatar_id":"","url":"https://api.github.com/users/ambud","html_url":"https://github.com/ambud","followers_url":"https://api.github.com/users/ambud/followers","following_url":"https://api.github.com/users/ambud/following{/other_user}","gists_url":"https://api.github.com/users/ambud/gists{/gist_id}","starred_url":"https://api.github.com/users/ambud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ambud/subscriptions","organizations_url":"https://api.github.com/users/ambud/orgs","repos_url":"https://api.github.com/users/ambud/repos","events_url":"https://api.github.com/users/ambud/events{/privacy}","received_events_url":"https://api.github.com/users/ambud/received_events","type":"User","site_admin":false},"labels":[{"id":520697933,"url":"https://api.github.com/repos/srotya/sidewinder/labels/Help%20Wanted","name":"Help Wanted","color":"fbca04","default":false},{"id":588641086,"url":"https://api.github.com/repos/srotya/sidewinder/labels/New%20Feature","name":"New Feature","color":"0052cc","default":false}],"state":"closed","locked":false,"assignee":{"login":"ambud","id":9707358,"avatar_url":"https://avatars2.githubusercontent.com/u/9707358?v=3","gravatar_id":"","url":"https://api.github.com/users/ambud","html_url":"https://github.com/ambud","followers_url":"https://api.github.com/users/ambud/followers","following_url":"https://api.github.com/users/ambud/following{/other_user}","gists_url":"https://api.github.com/users/ambud/gists{/gist_id}","starred_url":"https://api.github.com/users/ambud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ambud/subscriptions","organizations_url":"https://api.github.com/users/ambud/orgs","repos_url":"https://api.github.com/users/ambud/repos","events_url":"https://api.github.com/users/ambud/events{/privacy}","received_events_url":"https://api.github.com/users/ambud/received_events","type":"User","site_admin":false},"assignees":[{"login":"ambud","id":9707358,"avatar_url":"https://avatars2.githubusercontent.com/u/9707358?v=3","gravatar_id":"","url":"https://api.github.com/users/ambud","html_url":"https://github.com/ambud","followers_url":"https://api.github.com/users/ambud/followers","following_url":"https://api.github.com/users/ambud/following{/other_user}","gists_url":"https://api.github.com/users/ambud/gists{/gist_id}","starred_url":"https://api.github.com/users/ambud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ambud/subscriptions","organizations_url":"https://api.github.com/users/ambud/orgs","repos_url":"https://api.github.com/users/ambud/repos","events_url":"https://api.github.com/users/ambud/events{/privacy}","received_events_url":"https://api.github.com/users/ambud/received_events","type":"User","site_admin":false}],"milestone":null,"comments":0,"created_at":"2017-04-21T06:07:51Z","updated_at":"2017-06-26T01:51:08Z","closed_at":"2017-06-26T01:51:08Z","body":"#### Summary:\r\nCreate a basic framework that can be expanded to provide sophisticated clustering for Sidewinder.As a part of this feature, create a clustering project and provide the following capabilities to it:\r\n\r\n- [x] Node discovery mechanism\r\n- [x] Cluster RPC mechanism\r\n- [x] Internode protocols\r\n- [x] Basic data routing system\r\n\r\n### Description:\r\n\r\n**Node discovery mechanism**\r\nNode discovery allows machines to automatically discover nodes in a cluster allowing for simpler maintenance of the system using a seed machine. Providing multiple implementations for the same to allow end users to configure if they would like manual or automated discovery. Selecting Atomix project as the clustering engine / discovery engine for the same since it provides Raft based consensus and leader election in an embedded setup which can be extended for sharding and scaling features in future.\r\n\r\n**Cluster RPC mechanism**\r\nThis provides simple framework for nodes to communicate with each other. GRPC is selected at the moment for this purpose that uses protocol specs written in protobuf (see next section) and HTTP for actual transport layer. Reason for selecting GRPC is to allow simplicity of transport mechanism and provide the ability to support authentication and authorization at the protocol layer without extensive effort. GRPC doesn't provide very high performance compared to other transports however the engineering effort, amortized time cost using batch calls justifies it's current use. A future enhancement would be to evaluate performance differences between GRPC and other transports to see if it's worth changing the system.\r\n\r\n**Internode protocols**\r\nInternode protocols are a more efficient mechanism for nodes to communicate with each other compared to the client facing interface. Internode protocols are written in Google Protobuf to allow simple definition of protocols that can later be translated to provide clients in other languages as well.\r\n\r\n**Basic data routing system**\r\nBasic routing system provides a way data points can be routed to multiple machines that are member of the Sidewinder cluster. The reason for supporting this is to allow simple, light weight clients the ability to leverage a Sidewinder cluster. This routing engine will provide ability for nodes to proxy requests from clients to the appropriate machines in the cluster.\r\n\r\n\r\n"}}
{"actor":{"display_login":"ambud"}}