在物联网行业,终端设备需要使用平台长连接服务实现随时与手机等控制设备的实时交互,而由于异常情况造成大量下线后,会迅速做出重新登录,极易达到高并发登录鉴权服务性能瓶颈,造成雪崩效应。
11月13日,晚7:40左右,我又经历了一次前端长连接服务器因为JAVA OOM造成整个长连接服务器异常,大量物联网设备掉线,而登录鉴权服务以及背后的内存数据库无法支撑大量登录鉴权请求,形成瓶颈,大量客户端无法上线。如果此时没有人为干预,将造成下线设备争前恐后登录鉴权上线(经验值1/20待登录总数量),而实际上谁也上不不。因为后面的内存数据库redis已经达到了处理瓶颈。
下图是简略架构图。
在ULB与微服务负载均衡之间加入自建HAProxy服务,增加高并发限速设置。在使用过程中,通过ULB控制台,关闭原有两个后端,开启限流措施,点开后过30秒~60秒就关闭,让集群充分消化当前压力。物联网设备上线后基本就稳定了,就会降低登录鉴权服务的压力。
该部分仅登录用户可见
下图是6台长连接服务器承载业务量曲线,其中1台因为JAVA OOM之后,曲线产生异常抖动。
在线业务量急剧下降,从18万左右直到约10万。想想一个飞机从万米高空直落离地面几千米的地方是多危险的事情。而且对于这个服务来说,接下来还要爬高,再爬到18万。
放开1分钟,关闭3分钟。
从19:47 - 20:40 将近1小时。
附件
7号机器异常中的部分TCP状态
该部分仅登录用户可见
redis压力
该部分仅登录用户可见
长连接服务器状态
该部分仅登录用户可见