文章目录
目录
1.Nacos 配置更新的工作流程:
Nacos 是采用长轮询的方式向 Nacos Server
端发起配置更新查询的功能
长轮询:
客户端发起一次轮询请求到服务端,当服务端配置没有任何变更
的时候,这个连接一直打开,直到服务端有配置或者连接超时后返回
可能存在的问题:
Nacos Client
端需要获取服务端变更的配置,前提是要有一个比较,也就是拿客户端本地的配置信息和服务端的配置信息进行比较。一旦发现和服务端的配置有差异,就表示服务端配置有更新,于是把更新的配置拉到本地。
在这个过程中,有可能因为客户端配置比较多,导致比较的时间较长,使得配置 同步较慢的问题
Nacos的优化:
Nacos
针对这个场景,做了两个方面的优化
一方面:
客户端把需要进行比较的配置进行分片
减少网络通信的数据量,客户端把需要进行比较的配置进行分片,每一个分片大小是 3000
,也就是说,每次最多拿
3000
个配置去
Nacos Server
端进行比较
另一方面:
客户端把这
3000
个配置的
key
以及对应的
value
值的
md5
拼接成一个字符串,然后发送到Nacos Server
端进行判断,服务端会逐个比较这些配置中 md5
不同的
key
,把存在更新的
key
返回给客户端
客户端拿到这些变更的
key
,循环逐个去调用服务单获取这些
key
的 value 值
这两个优化,核心目的是减少网络通信数据包的大小,把一次大的数据包通信拆分成了多次小的数据包通信。虽然会增加网络通信次数,但是对整体的性能有较大的提升
最后,再采用长连接这种方式,既减少了
pull
轮询次数,又利用了长连接的优势,很好的实现了配置的动态更新同步功能
2.Nacos和Eureka的区别
服务启动方式的区别:
Eureka服务就类似微服务中的用户服务或者订单服务,需要自己创建springboot项目,然后启
动服务,然后部署项目。
而Nacos服务就类似redis那样,直接从阿里巴巴nacos的官网下载jar包,启动服务就ok了
提供者和注册中心之间
(1)Eureka中会定时向注册中心发送心跳,如果在短期内没有发送心跳,则就会直接剔除。
(2)Nacos也会向注册中心发送心跳,但是它的频率要比Eureka快。在Nacos中又分为临时实例和非临时实例。如果是临时实例的话,短期内没有发送心跳,则会直接剔除。但是如果是非临时实例长时间宕机,不会直接剔除,并且注册中心会直接主动询问并且等待非临时实例。
消费者和注册中心之间。
(1)Eureka会定时向注册中心定时拉取服务,如果不主动拉去服务,注册中心不会主动推送。
(2)Nacos中注册中心会定时向消费者主动推送信息 ,这样就会保持数据的准时性。
总结:Eureka是从注册中心拉取过来,而Nacos是注册中心主动向各个服务推