spring-cloud-Eureka的Peer To Peer

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

分布式系统多副本之间的复制有两种形式,主从复制和对等复制。
主从复制,即先更新主节点,然后将更新的内容复制到从节点。所以写操作只能由主节点来完成,从节点可以为主节点减轻读的压力。
对等复制,即Peer To Peer的模式,节点间不分主次,即每个节点都可以执行写操作,然后更新的节点向其他节点进行同步。由于每个节点都可以执行写操作,所以不存在写的压力,但是由于每个节点都可以同步数据,所以会出现数据同步时的冲突。
Eureka采用的就是Peer To Peer的复制方式,客户端可以同时配置多个服务端的地址:

eureka:
	client:
		serviceUrl:
			defaultZone:
				http://localhost:8880/eureka/,http://localhost:8881/eureka/

可以通过preferSameZoneEureka指定优先使用与应用实例在一个分区的Server,没有则默认使用defaultZone。
客户端使用quanrantineSet维护了一个不可用的Server列表,请求时优先使用可用列表,如果请求失败则切换到下一个Server重试,重试次数默认为3。
另外为了防止每个Client都按配置文件指定的顺序请求,造成Server节点请求不均衡,Client端有一个定时任务,默认5分钟一次,随机刷新Server列表。
在服务端,单个Server服务启动通过Client从已有的Server节点中获取信息复制到新的Server中。Server之间复制时使用HEADER REPLICATION的http header,与正常请求操作进行区分,复制到每个peer以后无需再转发以避免出现死循环。
对于Peer To Peer数据同步的冲突,Eureka使用lastDirtyTimestamp,与版本控制的原理一致。为了保证数据复制的成功,Eureka还通过心跳对同步的数据进行最终修复。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/a13662080711/article/details/108443365