web高并发访问404问题

#web高并发404

场景: 某一业务线是web项目,后端通过rpc框架调别的服务,由于调的某一服务执行较慢,导致web端业务有大量404。

问题分析:

为什么会出现大量404? 一般出现404的原因是因为web服务无法及时响应访问请求导致的。那为什么会出现无法及时响应请求的情况呢?引起这个的原因可能有多方面常见的有 1、请求连接超过web容量 2、web业务异常(jvm溢出,业务异常等) 3、web业务限制(有些业务线为了防止服务压力过大宕机,会做一些保护机制,比如说:请求大于一定数量时,新的请求直接抛弃等)

上面第3点跟业务确定后可以排除。

业务方提供的日志中有大量的调用服务超时。并且并发比较大。

通过 netstat/ss -na|grep web服务监听端口 |grep ESTAS 查看,有大量的连接与服务端连接。因此可以判断是业务线访问量较大,超过了web容量,导致了大量的404。

为什么调别的服务超时会引发该类问题呢? 通过日志排查发现出现问题当天的访问量超过以往访问量的n倍,由于后端调用的一个服务执行较慢,导致web层在一定的时间内堆积了大量的请求而无法及时访问,又由于访问量暴增,直接导致超出web容量,导致404。后面跟业务线确定是因为业务被攻击导致的。

如何防止该类问题发生呢?个人认为有几个点需要考虑: 1、web业务端要做容量规划 确定web抗压能力是多少,在达到瓶颈前做自我保护机制,可以抛弃部分请求,让主要的请求不受影响。抗压能力在上线前要做充分测试(tcpcopy),或者用预估的方式 2、防刷机制 web要有防攻击机制,可以根据ip一段时间访问次数做限制,当然防刷又是一门学问了,后期专门写一篇文章说明吧。 3、后端业务机制 由于当前案列用了rpc客户端去调服务端,可以缩短远程超时时间,比如说原来请求超时时间为5s,可以设置为3s,尽早超时可以放在后端任务堆积。当然这个超时时间要做权衡,不能因为防止堆积而引起大量的超时。

blog comments powered by Disqus