新闻资讯

新闻资讯 行业动态

Eureka Server数据存储

编辑:008     时间:2020-02-26

Eureka  Server的数据存储分为两层:数据存储层和缓存层。

数据存储层记录注册到 Eureka  Server上的服务信息,缓存层是经过包装后的数据,可以直接在 Eureka  Client调用时返回。

Eureka  Server的数据存储层是双层的ConcurrentHashMap,我们知道 ConcurrentHashMap  是线程安全高效的Map集合。

private final ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry= new ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>>();

第一层的ConcurrentHashMap的key=spring.application.name也就是客户端实例注册的应用名;value为嵌套的ConcurrentHashMap。

第二层嵌套的ConcurrentHashMap的key=instanceId也就是服务的唯一实例id,value为Lease对象,Lease对象存储着这个实例的所有注册信息,包括IP、端口、属性等。

根据这个存储结构我们可以发现,Eureka Server 第一层都是存储着所有的服务名,以及服务名对应的实例信息,也就是说第一层都是按照服务应用名这个维度来切分存储:

应用名1:应用1实例 Map 应该名2:应用2实例 Map ...

第二层是根据实例的唯一 ID 来存储的,那么按照这个结构最终的存储数据格式为:

:  应用1实例A:实例A的注册信息 
应用名1:应用1实例:  应用1实例B:实例B的注册信息 
                :  应用1实例C:实例C的注册信息
                :  .... -----------------  :  应用2实例F:实例F的注册信息 
应该名2:应用2实例:  应用2实例G:实例G的注册信息 
                :  ... 

...

数据存储层数据结构如下图所示:

当如服务的状态发生变更时,会同步 Eureka Server 中的 registry 数据信息,比如服务注册、剔除服务时。



原文链接:https://my.oschina.net/u/4006148/blog/3169283

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐