egg 实践与问题探讨
发布于 4 年前 作者 bqxu 2991 次浏览 来自 问答

背景:

  日均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 回复
  1. 第一个的负载是 nginx 分配给 egg 的?
  2. 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 ,运维的小伙伴。有专门的统计脚本,下午看统计结果就可以了

回到顶部