Skip to content

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;           //是否上报节点负载信息,默认上报
}

基于 VitePress 构建