七叶笔记 » golang编程 » 技术漫谈|集群中容器间的通迅

技术漫谈|集群中容器间的通迅

作者:周益

我们在k8s中启动3个restful api service实例。当对外提供的服务的时候,这个api service 可能出现实例的内存数据不一致的情况。

原本consul作为服务发现是最佳的。为了进一步减少组件,我们使用redis来完成服务发现的功能。

APService 3个实例如下

  • Instance1 192.168.0.101

  • Instance2 192.168.0.102

  • Instance3 192.168.0.103

1.instance 启动之后,每秒发送一次心跳数据包。如果3秒之类没有发起,redis自动过期。

我们可以认为instance下线了。

2.获得在线的服务器列表

Response:

  • Instance1

  • Instance2

  • Instance3

3.获得真实的

Response:

  • 192.168.0.101

  • 192.168.0.102

  • 192.168.0.103

当外部客户端调用如果Instance 有写入数据的操作,有以下的4个步骤:

  1. 获得除了自己之外的在线服务器ip地址。

  2. 通过 RPC 调用直接修改其它服务器的内存数据 Instance1–rpc–>Instance2 修改其内存数据

    Instance1–rpc–>Instance3 修改其内存数据。

  3. RPC 调用都成功后,再将数据写入mysql数据库中,否则对外报告失败了。

  4. 仅由当前的Instance1下发配置信息到agent。

容器之间的通迅可以使用golang 原生的rpc-json 来实现peer to peer调用

每个instance 都作为服务器,又都作为客户端。

1.instance 启动时,监听着7771端口。

2.instance 在需要的同步数据的地方直接调用。

cluster_server.go

cluster_client.go

相关文章