Nacos架构与原理 - 寻址机制

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


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


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

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

前提

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

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

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


设计

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

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

MemberLookup

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

202404151921588842.png

    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 <a href="mailto:liaochuntao@live.com">liaochuntao</a>
     */
    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<Member> members);
        
        /**
         * Addressing mode closed.
         *
         * @throws NacosException NacosException
         */
        void destroy() throws NacosException;
        
        /**
         * Some data information about the addressing pattern.
         *
         * @return {@link Map}
         */
        default Map<String, Object> info() {
            return Collections.emptyMap();
        }
        
    }
  • ServerMemberManager 存储着本节点所知道的所有成员节点列表信息,提供了针对成员节点的增删改查操作,同时维护了⼀个 MemberLookup 列表,方便进行动态切换成员节点寻址方式。
  • MemberLookup 接口非常简单,核心接口就两个— <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值