作者:周益
我们在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个步骤:
获得除了自己之外的在线服务器ip地址。
通过 RPC 调用直接修改其它服务器的内存数据 Instance1–rpc–>Instance2 修改其内存数据
Instance1–rpc–>Instance3 修改其内存数据。
RPC 调用都成功后,再将数据写入mysql数据库中,否则对外报告失败了。
仅由当前的Instance1下发配置信息到agent。
容器之间的通迅可以使用golang 原生的rpc-json 来实现peer to peer调用
每个instance 都作为服务器,又都作为客户端。
1.instance 启动时,监听着7771端口。
2.instance 在需要的同步数据的地方直接调用。
cluster_server.go
cluster_client.go