Nacos架构与原理 - 寻址机制

 作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题


代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等


联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等

释放21集全网最深ConcurrentHashMap的vip视频,复现每一行源码 

前提

Nacos 支持单机部署以及集群部署

  • 针对单机模式,Nacos 只是自己和自己通信;
  • 对于集群模式,则集群内的每个 Nacos 成员都需要相互通信。

因此这就带来⼀个问题,该以何种方式去管理集群内的 Nacos 成员节点信息,而这,就是 Nacos 内部的寻址机制。


设计

无论是单机模式,还是集群模式,其根本区别只是 Nacos 成员节点的个数是单个还是多个

  • 要能够感知到节点的变更情况:节点是增加了还是减少了;
  • 当前最新的成员列表信息是什么;
  • 以何种方式去管理成员列表信息;
  • 如何快速的支持新的、更优秀的成员列表管理模式等等。

MemberLookup

针对上述需求点,抽象出了⼀个 MemberLookup 接口

Nacos架构与原理 - 寻址机制_第1张图片

    package com.alibaba.nacos.core.cluster;
    
    import com.alibaba.nacos.api.exception.NacosException;
    
    import java.util.Collection;
    import java.util.Collections;
    import java.util.Map;
    
    /**
     * Member node addressing mode.
     *
     * @author liaochuntao
     */
    public interface MemberLookup {
        
        /**
         * start.
         *
         * @throws NacosException NacosException
         */
        void start() throws NacosException;
        
        /**
         * is using address server.
         *
         * @return using address server or not.
         */
        boolean useAddressServer();
        
        /**
         * Inject the ServerMemberManager property.
         *
         * @param memberManager {@link ServerMemberManager}
         */
        void injectMemberManager(ServerMemberManager memberManager);
        
        /**
         * The addressing pattern finds cluster nodes.
         *
         * @param members {@link Collection}
         */
        void afterLookup(Collection members);
        
        /**
         * Addressing mode closed.
         *
         * @throws NacosException NacosException
         */
        void destroy() throws NacosException;
        
        /**
         * Some data information about the addressing pattern.
         *
         * @return {@link Map}
         */
        default Map info() {
            return Collections.emptyMap();
        }
        
    }
  • ServerMemberManager 存储着本节点所知道的所有成员节点列表信息,提供了针对成员节点的增删改查操作,同时维护了⼀个 MemberLookup 列表,方便进行动态切换成员节点寻址方式。
  • MemberLookup

你可能感兴趣的:(nacos专题,架构,nacos,中间件)