0 背景
经历过多次半夜被电话叫醒,因为大量用户访问服务慢。所以在此写一写解决思路。
环境是:分布式架构,服务端由linux上的C++写的进程组成。服务器是公有云。
case 网络波动
网络波动,就是Flipping,一般在广域网才会提到,是由于线路的不稳定,出现时通时断或瞬断的现象。Flipping一般都是运营商造成,是会经常出现、不可避免的。
有的架构是跨机房的,前后端是在两个机房,机房之间的网路延迟决定服务质量。如果在监控图表(zabbix)上出现峰值,就会出现前后端通信问题,影响客户端体验。
有时架构是在一个机房的,但是机房网络波动出入口也会出问题,这个一般可以向公有云服务商确认。
手动确认方式:
ping:查两点之间的延迟
traceroute/tracert:查CS之间的路由链路,看哪个节点出现高延迟。
case DDos攻击
DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击。
DDoS攻击,对服务器突发性地输入大量无效或慢速的访问请求,导致服务器流量需求激增,导致带宽超限、服务器卡死。
DDoS攻击不但会造成目标服务器瘫痪,还会影响机房内网正常运作。机房防火墙检测到这种情况,将直接封停服务器IP。
公有云服务商有高防IP业务,就是把攻击流量引到高防IP,使业务正常。特点是贵。
解决办法:
前端部分负载均衡器配置高防
case 进程死循环
由于程序内部问题导致cpu占用过高,只要马上kill服务重启,然后排查程序内部问题。
服务器压力减少I,则客户端访问正常
case debug log拖死服务器
如果进程的debug log模式日志输出量特别大,相较于info模式,cpu占用会成倍上升,动态调整日志等级即。服务器压力减少I,则客户端访问正常。