Gossip基本操作演示
场景:任意客户端和任意服务器
- 客户端会通过请求更改一个服务端的数据
- 服务端通过Gossip协议维持服务端间数据的一致性
实现主要细节
- 架构设计标准
- 使用了Java RMI完成服务器之间的交互
- 完全实现了Gossip协议:
- 简单地来说,在一个服务器数据发生变化时,向其临近的服务器发送一个带有时间戳的包含数据变更的信息,然后临近服务器也向其他临近服务器发送同样的信息,这样经过一段时间之后整个服务器集群的信息就能达到同步
- 这个协议的实现来自于时间戳的巧妙设计,显然,在分布式的系统中,时间同步是一个非常的问题,因此这里的时间戳不是一般意义的系统时间戳系列,而是一个向量,向量中包含每个值的最新版本
- 这样避免分布式系统中难以完全一致的时间同步,仅使用一个整数代表每个值的版本数,即可表达最新的时间戳,因为最新时间戳向量范数一定大于或等于当前服务器老的时间戳
- 设计了负载均衡的LoadBalancer,设置了访问一个服务器不成功时,选择替换服务器的模拟
演示1-单客户端-多服务端演示
演示2-多客户端同时操作