摘要
本节开始,后面几节围绕单机服务器类ZooKeeperServer进行展开
ZooKeeperServer类图如下
本节讲解服务器启动器ServerStats源码,类图如下
主要讲解
内部类Provider完成服务器状态,队列数量,client存活数量等信息
属性,函数完成延迟,发送,接收量等信息
内部类
org.apache.zookeeper.server.ServerStats.Provider
Provider是一个接口,源码如下
public interface Provider {
public long getOutstandingRequests();//获取队列中还没有被处理的请求数量
public long getLastProcessedZxid();//获取最后一个处理的zxid
public String getState();//获取服务器状态
public int getNumAliveConnections();//获取存活的客户端连接总数
}
注意
Provider的实现类如下
其中,getOutstandingRequests,getLastProcessedZxid,getNumAliveConnections就一种默认实现,在
ZooKeeperServer类中
getState有5种实现,用于区分单机,集群不同server的状态
属性
private long packetsSent;//发送包个数
private long packetsReceived;//接收个数
private long maxLatency;//最长延迟
private long minLatency = Long.MAX_VALUE;//最短延迟
private long totalLatency = 0;//总延迟
private long count = 0;//延迟次数
private final Provider provider;//Provider对象,提供部分统计数据
函数
分为几种,构造函数,获取信息函数,设置,重置信息函数
获取信息类
// getters
synchronized public long getMinLatency() {
return minLatency == Long.MAX_VALUE ? 0 : minLatency;
}
synchronized public long getAvgLatency() {
if (count != 0) {
return totalLatency / count;
}
return 0;
}
synchronized public long getMaxLatency() {
return maxLatency;
}
public long getOutstandingRequests() {
return provider.getOutstandingRequests();
}
public long getLastProcessedZxid(){
return provider.getLastProcessedZxid();
}
synchronized public long getPacketsReceived() {
return packetsReceived;
}
synchronized public long getPacketsSent() {
return packetsSent;
}
public String getServerState() {
return provider.getState();
}
/** The number of client connections alive to this server */
public int getNumAliveClientConnections() {
return provider.getNumAliveConnections();
}
比较简单,不展开
其中,getOutstandingRequests,getLastProcessedZxid,getServerState,getNumAliveClientConnections都是通过provider完成
设置,重置信息函数
// mutators
synchronized void updateLatency(long requestCreateTime) {//更新延迟统计数据
long latency = System.currentTimeMillis() - requestCreateTime;
totalLatency += latency;
count++;
if (latency < minLatency) {
minLatency = latency;
}
if (latency > maxLatency) {
maxLatency = latency;
}
}
synchronized public void resetLatency(){//重置延迟数据
totalLatency = 0;
count = 0;
maxLatency = 0;
minLatency = Long.MAX_VALUE;
}
synchronized public void resetMaxLatency(){//重置max延迟
maxLatency = getMinLatency();
}
synchronized public void incrementPacketsReceived() {//接受次数+1
packetsReceived++;
}
synchronized public void incrementPacketsSent() {//发送次数+1
packetsSent++;
}
synchronized public void resetRequestCounters(){//重置请求量统计
packetsReceived = 0;
packetsSent = 0;
}
synchronized public void reset() {
resetLatency();
resetRequestCounters();
}
都比较好理解
构造函数
public ServerStats(Provider provider) {
this.provider = provider;
}
是指provider来完成getOutstandingRequests,getLastProcessedZxid等调用
思考
什么时候用到了ServerStats对应的信息
jmx中,不过jmx怎么用目前还不清楚,后面学习了再说