Go - Gossip 协议

Gossip 协议

一种共识算法,具体的原理建议给位小伙伴自行谷歌

Gossip 协议包引入

$ go get github.com/hashicorp/memberlist@v0.1.5

测试

// gossip.go
package main

import(
    "fmt"
    "github.com/hashicorp/memberlist"
)

func main(){
    // 使用 Create 方法创建一个成员实例, 这个成员实例就代表着一群的机器
    list, err := memberlist.Create(memberlist.DefaultLocalConfig())
    if err != nil{
        panic(err)
    }

    // 使用 Join 方法加入一个已经存在的机器群
    // 这里的参数是一个 string 切片,只要填写这个集群中的一台机器即可,
    // gossip 协议会将这个“流言”散播给机器群的所有机器
    
    _, err = list.Join([]string{"0.0.0.0"})
    if err != nil{
        panic(err)
    }

    for _, node := range list.Members(){
        fmt.Println(node.Name, node.Addr)
    }
}
$ go run gossip.go
2022/10/20 00:28:52 [DEBUG] memberlist: Initiating push/pull sync with: 127.0.0.1:7946
2022/10/20 00:28:52 [DEBUG] memberlist: Stream connection from=127.0.0.1:32970
634abb028f5466864d91f4a1 192.168.42.6

你可能感兴趣的:(gogossip)