新闻资讯
Eureka Server数据存储
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
回复列表