背景:
日均800w+ pv 的网站,原来是 angualr 的调 java api,因为产品页面涉及40+ 数据维度,首屏渲染一度接近8-12s
前端重构方案:
用 egg 服务端视图渲染层,在service 中使用 Promise All ,并发 调用 java http 服务。
在使用ejs 进行首屏渲染。 首屏渲染回归 1s ,且不在出现白屏loading 的情况。
另:整体架构是,阿里高防 ip 负载均衡到 ecs 上的公司部署的 nginx ,在由nginx 负载均衡到egg服务器, egg 服务请求另一个nginx 负载的java api
遇到问题:
- 前期只是在 egg 中依次调用后台,效果不稳定,单次响应时间过长,导致 qps 上不去,后来使用 Promise All 进行优化,缩短单次响应时间,达到上线状态。 其他问题可以忽略。。。。
网站改版 已 2个月,遇到新的问题:
-
服务器 8核8G,有一台负载总是相对较高,一台75% + ,其他都是40%+ 如下图
-
egg 服务返回每小时会返回一定量的 503 的异常,期间已将程序主动 放回的状态码 修改为 501,502,505 等,下面是每天访问峰值的一小时的错误状态码数据 503 217910 502 1005 500 503 501 14
对以上问题, 期待有大神能给个解决方案、或者解决思路。
- 第一个的负载是 nginx 分配给 egg 的?
- 503 是 egg 请求 java 服务? 这个没有具体查明原因? 打 log 啥的
异常看看 common-error.log 文件
503是阿里云slb hang住了。它有一个流量限制
@atian25 嗯,第一个的负载是 nginx 分配给 egg 的
503 是第一台nginx 的,可能是个乌龙。。。运维对高频ip 会 直接503 拒接掉一些,还要在看看 egg log 有没有503 的情况
@popomore 是滴是滴,已经排除了这部分,没发现503 状态码的
@i5ting 嗯,之前还出现因为加加了 slb ,封错IP了。把 slb 封了死了一大波~~~
500,502 的错误已下降到 万分之三。。现在主要处理503 的了,先排除 egg 的,如果没有,那就是 nginx 自己拒绝掉的了。
egg 所有异常都会在 common-error.log
@atian25 嗯嗯,是滴,还有一部分 405 的在 egg-web 里面
估计是背了锅,让运维的小伙伴,改了统计策略,把nginx 拒接掉的,排除,等晚上看结果。 [笑哭]每小时,还是甄别 40w+的爬虫请求,真心不容易,还有一堆在egg 里面进行逻辑甄别的
http code 自己看啊,405 method not allow,要不是被攻击要不是你的 cors 啥的被 security 挡住了。
分析 access log 和 errorlog
@atian25 取样看过了,大部分没到egg,被503回去的。剩下的,偷会懒,爬虫特多,一天 n 个 G的log ,运维的小伙伴。有专门的统计脚本,下午看统计结果就可以了