当前位置:   article > 正文

Eureka Server集群同步机制和数据同步的批处理机制_eureka server默认是单向同步还是双向同步

eureka server默认是单向同步还是双向同步

1. Eureka Server集群同步机制

一般eureka server在部署的时候,都会选择集群部署,否则只用一个eureka server的话,万一出现了单点故障的话,那岂不是整个系统直接GG

同时eureka server的集群也不是类似主从的概念,所有的eureka server都保存了全部的注册表信息,但是大家的角色都是一样的,eureka server中的一个节点叫做一个peer,可以认为eureka server集群中的节点都是peer to peer的模式

将eureka的集群机制和zookeeper对比一下,zookeeper的集群一般将角色区分为leader和follower,只有leader才有写的权限,follower只能读,那么当需要数据同步的时候,就需要leader写入,然后将信息同步给其他所有的follower才算完成了数据同步。而eureka server集群则不是这样,集群中的eureka server都是一样的角色,服务可以向任意一个eureka server进行注册,然后由这个eureka server同步给集群中的其他eureka server

接下来我们来看看eureka server集群中添加一个eureka server的话,是怎么实现的

首先会初始化一个类叫做PeerEurekaNodes,这个类其实就是代表了eureka server的集群中的所有节点,里面包含了注册表,eureka server的配置等信息

当eureka server进行初始化的时候,会调用PeerEurekaNodes中的start()方法,先会从配置文件中读取到其他的eureka server的url地址,然后更新PeerEurekaNodes,将已经不存在的eureka server从集群中移除,同时加入新增的eureka server到其中

之后启动一个定时线程来跑,默认情况下10分钟执行一次,每次都重复执行上面说的更新PeerEurekaNodes的方法,保证每十分钟都能将eureka server集群的信息更新

接下来这个eureka server就会将自己作为一个eureka client注册到一个eureka server上(eureka server本质上也就是一个eureka client),这里有一个重试机制,默认最多重试5次,每次重试之间间隔30秒。当我们的eureka server成功注册到其他的eureka server上时,就可以通过那个eureka server获取到它的注册表,然后拉取到自己本地,作为自己的服务注册表了,此时我们的eureka server集群就多了一个eureka server能对外提供注册表的拉取了

2. 数据同步的批处理机制

当集群之间需要进行数据同步的时候,发送一个请求,这个请求会被封装为一个TaskHolder,里面包含了请求信息(是注册请求,还是心跳请求等等),实例信息,过期时间等,此时这个请求一开始会进入一个acceptorQueue中,这个队列中的数据并不会做任何的处理,请求来了之后,只是纯写入而已

下一步,因为acceptorQueue中的请求是杂乱无章的,所有的注册、心跳、下线请求都在一起,所以我们得整理一下,将不同的请求类型分类,然后加入到processingOrder这个队列中,此时请求都已经被归了类,存储在processingOrder中(实际上processingOrder只是存储了请求的id,实际的请求存放在了pendingTasks中,这里我们简化理解一下)

接下来是一个批处理的过程,processingOrder中的请求会被取出,打成一个个的batch,当请求的数量超过了10000个或者是距离请求提交的时间已经超过了500ms,就会被放入一个batch中,之后这些被批量处理的请求就会放入另外一个队列,batchWorkQueue,这里面存放的就是一个个的batch

最后会有其他的后台线程会负责将这些batch的请求发送到集群中的其他集群上,执行相对应的注册、心跳、下线请求

Eureka的数据同步采用了三层队列的方式,异步的进行了批处理,减少了网络开销,提高了请求处理的效率

如果感觉上面的说到太抽象的话,我这里举个例子,将数据同步比作寄快递
第一步,我们想要寄快递,可以使用上门取件或者其他的方式,快递就是请求,而上门取件就相当于我们将请求交给了acceptorQueue
第二步,快递进行分拣,就相当于acceptorQueue中的请求进入到了processingOrder,然后会进行分类合并
第三步,打包运输,快递分成不同的批次然后寄到我们的收件地址那里去,这一步就类似请求打成batch,放入batchWorkQueue中
第四步,快递小哥派件,这里就是实际执行请求的内容了

整个过程如下图所示,这个比喻不一定能完全符合三层队列批处理的具体步骤,只是起一个辅助理解的作用
Eureka三层队列批处理机制

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/395454
推荐阅读
相关标签
  

闽ICP备14008679号