Eureka的注册表并发访问和Nacos对比学习

1、eureka的注册流程

1.1 客户端注册到服务端是通过http请求的

1.2 涉及到多级缓存

1.3 register注册表

2.源码流程(文字分析)

在拉取注册表的时候

  • 首先从ReadOnlyCacheMap里查缓存的注册表。
  • 若没有,就找ReadWriteCacheMap里缓存的注册表。
  • 如果还没有,就从内存中获取实际的注册表数据。

在注册表发生变更的时候

  • 会在内存中更新变更的注册表数据,同时过期掉ReadWriteCacheMap。
  • 此过程不会影响ReadOnlyCacheMap提供人家查询注册表。
  • 默认每30秒Eureka Server会将ReadWriteCacheMap更新到ReadOnlyCacheMap里
  • 默认每180秒Eureka Server会将ReadWriteCacheMap里是数据失效
  • 下次有服务拉取注册表,又会从内存中获取最新的数据了,同时填充各级缓存。

多级缓存机制的优点

  • 尽可能保证了内存注册表数据不会出现频繁的读写冲突问题。
  • 并且进一步保证对Eureka Server的大量请求,都是快速从纯内存走,性能极高(可以稍微估计下对于一线互联网公司,内部上千个eureka client实例,每分钟对eureka上千次的访问,一天就是上千万次的访问)

2.Nacos

没有考虑使用多级缓存的思想,读写并发的时候主要依靠CopyOnWrite(写时拷贝)技术来实现,因为Nacos底层的注册表是个多层的Map结构(Map<namespace,Map<Service,?>>),如果考虑加锁的话,全局锁可能并发性能就会很差,局部锁的话也很难维护,所以更新的时候,从原来的map中拷贝一个新的map,然后将更新的结果通过CAS拷贝给原来的map。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yunson.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值