egg 实践与问题探讨
 发布于 8 年前  作者 bqxu  4707 次预览  最后一次回复是 8 年前  来自 问答 

背景:

  日均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 

遇到问题:

  1. 前期只是在 egg 中依次调用后台,效果不稳定,单次响应时间过长,导致 qps 上不去,后来使用 Promise All 进行优化,缩短单次响应时间,达到上线状态。 其他问题可以忽略。。。。

网站改版 已 2个月,遇到新的问题:

  1. 服务器 8核8G,有一台负载总是相对较高,一台75% + ,其他都是40%+ 如下图

    屏幕快照 2017-09-06 下午5.21.37.png

  2. egg 服务返回每小时会返回一定量的 503 的异常,期间已将程序主动 放回的状态码 修改为 501,502,505 等,下面是每天访问峰值的一小时的错误状态码数据 503 217910 502 1005 500 503 501 14

对以上问题, 期待有大神能给个解决方案、或者解决思路。

12 回复
atian25
  1. 第一个的负载是 nginx 分配给 egg 的?
  2. 503 是 egg 请求 java 服务? 这个没有具体查明原因? 打 log 啥的
popomore

异常看看 common-error.log 文件

i5ting

503是阿里云slb hang住了。它有一个流量限制

bqxu

@atian25 嗯,第一个的负载是 nginx 分配给 egg 的

503 是第一台nginx 的,可能是个乌龙。。。运维对高频ip 会 直接503 拒接掉一些,还要在看看 egg log 有没有503 的情况

bqxu

@popomore 是滴是滴,已经排除了这部分,没发现503 状态码的

bqxu

@i5ting 嗯,之前还出现因为加加了 slb ,封错IP了。把 slb 封了死了一大波~~~

bqxu

500,502 的错误已下降到 万分之三。。现在主要处理503 的了,先排除 egg 的,如果没有,那就是 nginx 自己拒绝掉的了。

atian25

egg 所有异常都会在 common-error.log

bqxu

@atian25 嗯嗯,是滴,还有一部分 405 的在 egg-web 里面

bqxu

估计是背了锅,让运维的小伙伴,改了统计策略,把nginx 拒接掉的,排除,等晚上看结果。 [笑哭]每小时,还是甄别 40w+的爬虫请求,真心不容易,还有一堆在egg 里面进行逻辑甄别的

atian25

http code 自己看啊,405 method not allow,要不是被攻击要不是你的 cors 啥的被 security 挡住了。

分析 access log 和 errorlog

bqxu

@atian25 取样看过了,大部分没到egg,被503回去的。剩下的,偷会懒,爬虫特多,一天 n 个 G的log ,运维的小伙伴。有专门的统计脚本,下午看统计结果就可以了