问题背景
在做苏宁易购拍卖平台的时候,设计了一套推送服务器,只有一个只读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;
看图
具体的配置文件,也在附件中,供参考。
陷阱
proxy_read_timeout 1;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
这个设置和上面的结论就差个timeout,这样设置的话,假设一个nginx后面挂了40个tomcat,那么浏览器要等40秒才能超时!切记。
参考文章
http://bbs.51cto.com/thread-1137613-1.html
http://myhat.blog.51cto.com/391263/1117381/
http://my.oschina.net/greki/blog/109643
http://onlyzq.blog.51cto.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
- 大小: 498.4 KB
分享到:
相关推荐
主要介绍了Nginx服务器中配置超时时间的方法,同时也对Nginx中的时间管理机制作了详细的介绍,需要的朋友可以参考下
两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...
nginx中的超时设置,请求超时、响应等待超时等: nginx timeout 配置 全局timeout 局部timeout web timeout nginx比较强大,可以针对单个域名请求做出单个连接超时的配置. 比如些动态解释和静态解释可以根据业务的...
nginx 配置跨域不生效 如下配置 server { listen 80; server_name localhost; # 接口转发 location /api/ { # 允许请求地址跨域 * 做为通配符 add_header 'Access-Control-Allow-Origin' '*'; # 设置请求...
nginx的内部结构是由核心部分和一系列的功能模块所组成。这样划分是为了使得每个模块的功能相对简单,便于开发,同时也便于对系统进行功能扩展。这样的模块化设计类似于面向对象中的接口类,它增强了nginx源码的...
nginx替代apache,nginx替代方案,nginx代替apache与jbos,nginx+jboss结合
nginx系列教程 nginx从入门到熟练,包括高级应用等
Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。 keepalive_timeout HTTP 是一种无状态协议,客户端向服务器发送一个 ...
Nginx中http请求处理过程 有不少地方不是很明白 ,还望大家共同交流
Nginx系列经典Markdown面试题
第5章 Nginx与JSP、ASP.NET、Perl的安装与配置.pdf 第6章 Nginx HTTP负载均衡和反向代理的配置与优化.pdf 第7章 Nginx的Rewrite规则与实例.pdf 第8章 Nginx模块开发.pdf 第9章 Nginx的Web缓存服务与新浪网的开源N...
nginx 离线安装包nginx 离线安装包
nginx.conf nginx-1.20.1.tar.gz 这是关于centos8的nginx 和nginx 的配置https文件
nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源
此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件...
3.找到D:\nginx\conf下nginx.conf文件用记事本打开 在文段末尾大括号前加上 include proxy.conf;(就是加载刚刚新建的那个文件(注意路径)) 4.进入cmd 进入D盘: d: 进到nginx文件夹下:cd nginx 启动nginx.exe:...
Nginx 1.22.0 Linux 版本,解压安装。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型...