码迷,mamicode.com
首页 > 其他好文 > 详细

nacos 中的服务和实例

时间:2019-12-29 18:24:09      阅读:442      评论:0      收藏:0      [点我收藏+]

标签:其他   数据保存   mes   set   对象   请求转发   value   core   efault   

service 对应的概念

用 namespace, group, serviceName 标识一个服务

从该属性可以看出服务的层级

// Map<namespace, Map<group::serviceName, Service>>
com.alibaba.nacos.naming.core.ServiceManager#serviceMap

服务和实例的对应关系

service, cluster, instance

从 2 个方法可以看出实例的层级

// com.alibaba.nacos.naming.core.Service#allIPs()
public List<Instance> allIPs() {
    List<Instance> allIPs = new ArrayList<>();
    for (Map.Entry<String, Cluster> entry : clusterMap.entrySet()) {
        allIPs.addAll(entry.getValue().allIPs());
    }

    return allIPs;
}

// com.alibaba.nacos.naming.core.Cluster#allIPs()
public List<Instance> allIPs() {
    List<Instance> allInstances = new ArrayList<>();
    // private Set<Instance> persistentInstances = new HashSet<>();
    allInstances.addAll(persistentInstances);
    // private Set<Instance> ephemeralInstances = new HashSet<>();
    allInstances.addAll(ephemeralInstances);
    return allInstances;
}

但是服务还有另外一种扁平的数据结构

以临时服务为例
DistroConsistencyServiceImpl
DataStore 使用 Map<String, Datum> 存储 Datum。
Datum 封装了 key 和 value,实际使用时 value 是 Instances

服务对应一个 key,如下是一个临时实例的 key:

com.alibaba.nacos.naming.iplist.ephemeral.public##DEFAULT_GROUP@@service-consumer

层级的数据结构响应客户端请求,扁平的数据结构在 nacos 节点之间用作数据传输。

 

一个 naming 客户端绑定一个 namespace

 

@CanDistro 注解

修改服务实例的 Controller method,会打上 CanDistro 注解,表明这个请求由固定节点处理

FilterBase 类,利用发射生成请求 URL 到 Controller Method 的映射:

private ConcurrentMap<String, Method> methodCache = new ConcurrentHashMap<>();

在 DistroFilter.doFilter 中,
1. 根据请求 URL 获取 Controller Method
2. 如果该 Method 对象有 CanDistro 注解,同时对 group + serviceName 哈希取模,决定处理请求的 nacos 节点
3. 如果当前 service 由其他节点负责,则把请求转发给其他节点

实例数据保存在本地内存后,产生 2 个异步动作:
1. 推送服务信息给 naming 客户端,由 Notifier 执行
2. 广播给集群中的其他节点,由 TaskDispatcher 执行

 

总结:某个 service 的修改请求由指定的 nacos 节点处理,修改之后数据会同步给其他 nacos 节点。所有的 nacos 节点保存全量的服务元数据。

nacos 中的服务和实例

标签:其他   数据保存   mes   set   对象   请求转发   value   core   efault   

原文地址:https://www.cnblogs.com/allenwas3/p/12115582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!