文章目录
监控器组件
主要功能就是监控进程的一些运行信息,进程重启
基于pomelo-admin
master监控器
具体文件是:pomelo/lib/common/components/master.js
组件加载后写入app中 app.components.__matser__
master的配置文件是在config/master.json中
可以发现就是生成了一个master对象,pomelo/lib/master/master.js
Server.prototype.start = function(cb) {
moduleUtil.registerDefaultModules(true, this.app, this.closeWatcher);
moduleUtil.loadModules(this, this.masterConsole);
var self = this;
// start master console
this.masterConsole.start(function(err) {
生成一个admin-masterConsole,然后加载模块,看一下具体有哪些模块:
masterwatcher
处理masterConsole的注册、断开、重连消息
封装watchdog类,处理monitor(普通监控器)的四个消息
var masterMethods = {
'subscribe': subscribe,
'unsubscribe': unsubscribe,
'query': query,
'record': record
};
watchdog
存储注册过来的monitor(普通监控器),广播消息等
watchServer
在pomelo-admin/lib/modules中,下同
这里就是处理master和monitor之间的通用性的消息
详情查看pomelo-admin/lib/modules/watchServer.js中的monitorHandler和clientHandler
systemInfo
master主动请求或者monitor主动反馈的一些系统信息
nodeInfo
master主动请求或者monitor主动反馈的一些node进程信息
monitorLog
master向monitor发送请求收集日志信息
scripts
master在monitor上执行脚本
profiler
v8-profiler
看回master.js在start中:
this.masterConsole.start(function(err) {
if(err) {
process.exit(0);
}
moduleUtil.startModules(self.modules, function(err) {
if(err) {
utils.invokeCallback(cb, err);
return;
}
if(self.app.get(Constants.RESERVED.MODE) !== Constants.RESERVED.STAND_ALONE) {
starter.runServers(self.app);
}
utils.invokeCallback(cb);
});
});
看到会用starter这个模块启动服务器:
在starter.js中可以发现,会根据你设置在app上的type来选择启动哪些服务器。对于master来说就是不启动任何东西。
而对于选择了具体服务器id的就会读取该server的配置,设置一些启动参数并已子进程的方式启动
再往下看,处理了masterConsole的‘disconnect’消息
在这里根据一些策略:
ping几次超时,端口占用等,进行进程的重启
普通监控器
具体文件是:pomelo/lib/common/components/monitor.js
组件加载后写入app中 app.components.__monitor__
普通监控器很简单,就是启动一个pomelo-admin的monitorConsole连接到masterConsole上
加载的模块唯一不用就是
monitorwatcher
提供有几个操作:
var monitorMethods = {
'addServer': addServer,
'removeServer': removeServer,
'replaceServer': replaceServer,
'startOver': startOver
};
连接后直接发送record消息给master
唯一需要注意的就是,RPC的服务器信息是在这个组件中控制的:
var addServers = function(self, servers) {
if(!servers || !servers.length) {
return;
}
self.app.addServers(servers);
};
var removeServers = function(self, ids) {
if(!ids || !ids.length) {
return;
}
self.app.removeServers(ids);
};
var replaceServers = function(self, servers) {
self.app.replaceServers(servers);
};
总结
主要就是用于master进程和子进程之间的一些监控,子进程注册到master上,并把其他注册在master上的子进程写到rpc中,用于服务器进程间的rpc通信