Stat(调用统计):统计业务服务上报的各种调用信息,比如总流量、平均耗时、超时率等,以便对服务出现异常时进行告警;
Property(业务属性):统计业务自定义上报的属性信息,比如内存使用大小、队列大小、cache命中率等,以便对服务出现异常时进行告警;
Notify(异常信息):统计业务上报的各种异常信息,比如服务状态变更信息、访问db失败信息等,以便对服务出现异常时进行告警;
考虑到各种故障以及容灾特性,Node只会对满足启动条件的服务进行发送启动命令。
这里采用的策略是:
1.服务的当前状态处于过渡状态的不允许重启,即处于“Activating”,“Deactivating”,“Destroying”,“Loading”,“Patching”,“BatchPatching”等状态。
2.有可能服务通过运维界面停止的,即人为停止该服务,此时服务的“内部工作状态”会被设置为false,在这种情况下,不允许Node监控线程去启动服务。
3.有些服务可能确实出现系统性问题,导致无法启动成功。为了防止频繁的去重启这些服务,Node监控程序采用了“服务重启惩罚时间”的策略:即服务每次重启都会被记录重启次数和重启时间点,在X秒内最多重启N次,如果重启超过N次后,服务还是启动失败,则以Y秒的频率去尝试重启服务。
目前框架中的默认值是:60秒内最多启动10次,达到10次启动仍失败后,每隔600秒再重试一次。
cpp
struct ServerLimitInfo
{
bool bEnableCoreLimit; //资源属性开关
bool bCloseCore; //core属性的状态,屏蔽:true,打开:false
EM_CoreType eCoreType; //服务core的当前屏蔽方式
int iMaxExcStopCount; //最大服务异常停止个数
int32_t iCoreLimitTimeInterval; //时间间隔内core的限制,单位是分钟
int32_t iCoreLimitExpiredTime; //core关闭的持续时间,单位为分钟
int32_t iMonitorIntervalMs; //keepalive监控时间间隔
int iActivatorMaxCount; //最大启动次数
int iActivatorTimeInterval; //时间
int iActivatorPunishInterval; //惩罚受限时间间隔
bool bReportLoadInfo; //是否上报节点负载信息,默认上报
}