设为首页 收藏本站
查看: 525|回复: 0

[经验分享] nginx系列(八)nginx失效转移与超时处理

[复制链接]

尚未签到

发表于 2016-12-24 08:30:55 | 显示全部楼层 |阅读模式
问题背景
在做苏宁易购拍卖平台的时候,设计了一套推送服务器,只有一个只读json接口。原理是使用了发布订阅模式,所有数据都缓存到了tomcat中,向推送服务器写入数据走的是另外一套业务系统,并不是从推送服务器写入。每次请求到来不需要任何远程读取,tomcat中直接返回。在虚拟机上(4c)上做了性能测试,TPS在7000#/sec左右波动,响应时间是平均4ms。理论上这是一个很强大的模块,或者说是系统。但是生产通过监控平台发现,有个别请求用了200多秒,让人费解。问题跟踪了很久,也尝试过很多办法,例如tomcat的超时时间等,都没有效果。最后定位到问题,通过设置nginx的失效策略,等待后端app服务器超时解决。

处理办法
反向代理
    将apache更换成nginx,推送服务器只有一个只读json接口,切换后调试方便,出错概率极低。
失效策略
    服务器500错误的参考文章:http://jingyan.baidu.com/article/63f2362812cc600208ab3dce.html
    如果后端tomcat服务器处理超时,则nginx不请求下一个tomcat节点,而是直接返回。nginx默认,会重复尝试所有的节点以后,才会返回给浏览器错误。例如:在location设置参数(默认值也是如此):
proxy_next_upstream http_502 http_504 error timeout invalid_header;
其中有一个参数值 timeout,这个参数代表如果超时,则尝试其他节点。因此要去掉这个参数,修改后如下
proxy_next_upstream http_502 http_504 error invalid_header;

超时时间
    因为通过性能测试,响应平均时间是4ms,因此设置1s的等待时间足矣。所以后端一旦出现超时,雪崩效应即将产生,转发给别的节点也是没用的,所以此处的降级方案启动,直接返回错误即可。在location设置参数:proxy_read_timeout;
    这个参数表示nginx等待单个后端应用服务器响应的等待时间。最终配置如下
proxy_read_timeout 1;

最终结论
proxy_read_timeout 1;
proxy_next_upstream http_502 http_504 error invalid_header;
看图
DSC0000.png
具体的配置文件,也在附件中,供参考。

陷阱
proxy_read_timeout 1;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
这个设置和上面的结论就差个timeout,这样设置的话,假设一个nginx后面挂了40个tomcat,那么浏览器要等40秒才能超时!切记。

参考文章
http://bbs.iyunv.com/thread-1137613-1.html
http://myhat.blog.iyunv.com/391263/1117381/
http://my.oschina.net/greki/blog/109643
http://onlyzq.blog.iyunv.com/1228/557848/
nginx的超时设置
http://blog.csdn.net/liujiyong7/article/details/18228915
http://www.cnblogs.com/discuss/articles/1866851.html
tomcat超时时间
http://www.360sdn.com/tomcat/2014/0221/2387.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-318605-1-1.html 上篇帖子: 深入浅出Nginx之五【nginx与tomcat整合】 下篇帖子: nginx 0.6.32 release
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表