Nacos封装节点状态在com.alibaba.nacos.naming.cluster.ServerStatus,主要包括:UP、DOWN、STARTING、PAUSED、WRITE_ONLY和READ_ONLY。
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:节点只能读
Nacos支持三种集群管理模式:AP、CP和MIXED,枚举类位于:com.alibaba.nacos.naming.cluster.ServerMode
public enum ServerMode {
/**
* AP mode
*/
AP,
/**
* CP mode
*/
CP,
/**
* Mixed mode
*/
MIXED
}
从CAP分布式理论角度去看,一个系统只能满足全局CP或者AP,所以Nacos为了能够满足不同的业务场景,支持AP和CP以及混合模式,用户在启动集群的时候可以通过配置灵活切换。
按照Nacos设计的初衷不同模式具备如下语义:
节点类为com.alibaba.nacos.naming.cluster.servers.Server,基本信息如下:
/**
* 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类型
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靠这个监听器来通知集群中的其它节点变更集群信息,至于怎么完成分布式监听,后续文章会一一阐述。
如果要理解Nacos的集群管理,从源码层次必须要知道集群状态机、集群管理模式、节点基础信息以及ServerChangeListener,这些也算是入坑的基础。