前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nacos源码分析系列之Naming模块-集群篇-理论概念

Nacos源码分析系列之Naming模块-集群篇-理论概念

作者头像
35岁程序员那些事
发布2020-05-27 09:21:36
1.2K0
发布2020-05-27 09:21:36
举报
文章被收录于专栏:35岁程序员那些事

1.集群状态机

Nacos封装节点状态在com.alibaba.nacos.naming.cluster.ServerStatus,主要包括:UP、DOWN、STARTING、PAUSED、WRITE_ONLY和READ_ONLY

代码语言:javascript
复制
public enum ServerStatus {
    /**
     * server is up and ready for request
     */
    UP,
    /**
     * server is out of service, something abnormal happened
     */
    DOWN,
    /**
     * server is preparing itself for request, usually 'UP' is the next status
     */
    STARTING,
    /**
     * server is manually paused
     */
    PAUSED,
    /**
     * only write operation is permitted.
     */
    WRITE_ONLY,
    /**
     * only read operation is permitted.
     */
    READ_ONLY
}

UP:节点已经上线,已经具备接收请求能力

DOWN:节点已经下线

STARTING:节点正在启动中,加载并初始化节点资源,还不具备接收请求能力

PAUSED:节点服务处于手动暂停状态

WRITE_ONLY:节点只能写

READ_ONLY:节点只能读

2.集群管理模式

Nacos支持三种集群管理模式:APCPMIXED,枚举类位于:com.alibaba.nacos.naming.cluster.ServerMode

代码语言:javascript
复制
public enum ServerMode {
    /**
     * AP mode
     */
    AP,
    /**
     * CP mode
     */
    CP,
    /**
     * Mixed mode
     */
    MIXED
}

CAP分布式理论角度去看,一个系统只能满足全局CP或者AP,所以Nacos为了能够满足不同的业务场景,支持APCP以及混合模式,用户在启动集群的时候可以通过配置灵活切换。

按照Nacos设计的初衷不同模式具备如下语义:

  • AP模式提供最终的一致性和网络分区容忍度,但数据持久性
  • CP模式提供了强一致性、数据持久性和网络分区容忍度
  • Nacos使用CAP理论来设置服务器模式,用户可以在运行时选择自己喜欢的模式
  • 混合模式为一些数据提供CP,为另一些数据提供AP
  • 服务级信息和集群级信息始终通过CP协议进行操作,因此在AP模式下,它们不能被编辑。

3.节点基础信息分析

节点类为com.alibaba.nacos.naming.cluster.servers.Server,基本信息如下:

代码语言:javascript
复制
/**
     * IP of member
     */
    private String ip;

    /**
     * serving port of member.
     */
    private int servePort;

    private String site = UtilsAndCommons.UNKNOWN_SITE;

    private int weight = 1;

    /**
     * additional weight, used to adjust manually
     */
    private int adWeight;

    private boolean alive = false;

    private long lastRefTime = 0L;

    private String lastRefTimeStr;

IP:节点IP地址

servePort:端口号

site:节点位置,暂时没有使用weight:节点权重

adWeight:添加权重

alive:是否存活,默认为false

lastRefTime:最后服务时间 long类型

lastRefTimeStr:最后服务时间 String类型

4.服务信息变化监听器ServerChangeListener

代码语言:javascript
复制
public interface ServerChangeListener {

    /**
     * If member list changed, this method is invoked.
     *
     * @param servers servers after change
     */
    void onChangeServerList(List<Server> servers);

    /**
     * If reachable member list changed, this method is invoked.
     *
     * @param healthyServer reachable servers after change
     */
    void onChangeHealthyServerList(List<Server> healthyServer);
}

这个是集群成员节点变更事件监听器,也就是说Nacos靠这个监听器来通知集群中的其它节点变更集群信息,至于怎么完成分布式监听,后续文章会一一阐述。

4 总结

如果要理解Nacos的集群管理,从源码层次必须要知道集群状态机、集群管理模式、节点基础信息以及ServerChangeListener,这些也算是入坑的基础。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构随笔录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.集群状态机
  • 2.集群管理模式
  • 3.节点基础信息分析
  • 4.服务信息变化监听器ServerChangeListener
  • 4 总结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档