PA
MyMembers
An implementation of the SWIM protocol in Go.
Note: This is a learning project and is not designed for production use.
Node Architecture
Example
// Create node 1
node1Config := DefaultConfig()
node1Config.Name = "node1"
node1Config.BindAddr = "127.0.0.1"
node1Config.BindPort = 6969
node1, _ := Create(node1Config)
// Create node 2
node2Config := DefaultConfig()
node2Config.Name = "node2"
node2Config.BindAddr = "127.0.0.1"
node2Config.BindPort = 6970
node2, _ := Create(node2Config)
// Node 2 joins node 1
node2.Join([]string{"127.0.0.1:6969"})
// Check members
fmt.Println(len(node1.Members())) // 2
fmt.Println(len(node2.Members())) // 2
// Graceful leave
node2.Leave()
node2.Shutdown()Learning Resources
- SWIM Paper: SWIM: Scalable Weakly-consistent Infection-style Process Group Membership Protocol
- memberlist (HashiCorp): https://github.com/hashicorp/memberlist
- ringpop-go (Uber): https://github.com/uber/ringpop-go/tree/master/swim
Contact
Pawan Mehta — arowpk@gmail.com