问题背景
在做苏宁易购拍卖平台的时候,设计了一套推送服务器,只有一个只读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的配置过程中,为了确保服务器能够稳定、高效地处理来自客户端的请求,我们需要合理设置与代理相关的超时参数。这些参数包括但不限于`proxy_connect_timeout`、`proxy_send_timeout`以及`proxy_read_timeout`...
**Nginx-Windows版与Redis热点缓存详解** Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于Web服务器领域,尤其以其轻量级、高并发处理能力而著称。在Windows环境下,Nginx同样能提供稳定的服务,支持静态文件...
- 当一个节点失效一段时间(`fail_timeout`)后,如果其他所有节点也都处于失效状态,Nginx将尝试恢复所有节点,并重新开始监控它们的状态。 - 如果所有节点都不可用,则Nginx将尝试重新启用这些节点,并持续检查...
### Nginx+Keepalived+Tomcat+Redis 高可用与负载均衡架构解析 #### 架构概览 为了确保Web服务器的稳定运行及高效处理能力,采用Nginx+Keepalived+Tomcat+Redis的技术组合进行系统构建。这一架构通过多个组件的...
配置Nginx处理二级域名也是一个重要的知识点。通过配置server_name指令,可以将二级域名添加到Nginx中。使用正则表达式可以捕获特定请求头,并使用变量存储二级域名和请求URI,从而在rewrite指令中使用这些变量,...
* proxy_connect_timeout:与服务器连接的超时时间,默认60s * fail_timeout:当该时间内服务器没响应,则认为服务器失效,默认10s * max_fails:允许连接失败次数,默认为1 这里我们所需等待时间 = proxy_...
**Nginx与Session Sticky** 为了保持用户会话在一个特定的Tomcat服务器上,可以使用Nginx的"session sticky"功能。这将确保来自同一用户的请求被定向到最初处理该用户会话的服务器。在Nginx配置中添加以下指令: ``...
在Nginx+Tomcat的架构中,Tomcat作为实际处理业务逻辑的应用服务器,负责处理Nginx转发过来的HTTP请求。 3. **Redis数据库**: Redis 是一个内存中的数据结构存储系统,支持多种数据类型(如字符串、哈希、列表、...
这部分主要配置Nginx的工作进程数以及每个工作进程的最大连接数,根据实际情况调整这些参数可以提高Nginx的并发处理能力。 2. **HTTP核心模块配置**: ```nginx http { include mime.types; // 包含MIME类型...
通过分析抓取到的心跳包内容,可以了解心跳包的发送与接收过程,以及TCP协议如何处理keepalive事件。 五、nginx keepalive配置优化 在nginx中,可以通过配置文件对keepalive进行更细粒度的控制。常见的配置参数包括...
通过这种方式,nginx服务器实现了负载均衡和故障转移,提高了服务的可用性和稳定性。 总之,keepalived结合nginx是一种高效且可靠的高可用性解决方案,它利用VRRP协议的特性,确保了在网络故障或服务器宕机时,服务...
Nginx以事件驱动的方式编写,提供了高度的可扩展性,与传统服务器程序相比,可以在更少的资源消耗下支持更多的并发连接。而PHP-FPM(FastCGI Process Manager)是一个FastCGI的管理器,用于对PHP进行管理,能够为...
本报告详细探讨了灰度系统在不同阶段的性能表现,包括引入缓存和缓存超时失效机制后的影响,以及进一步优化的cache lock机制。 **二、灰度系统的开发与优化过程** 2.1 **灰度系统初步性能测试** 在系统初步部署后...
LuaRestyLock缓存失效风暴测试代码部分,讲解了如何在高并发的环境下处理缓存失效的问题,这通常涉及到锁机制和分布式缓存设计。 在性能优化方面,本书提供了关于火焰图的讨论,这是一种性能分析工具,用于可视化...
OpenResty是一款集成了Nginx和LuaJIT的服务器软件,能够以高效的事件驱动模型处理高并发请求。在OpenResty中,开发者可以利用Lua脚本来实现复杂的业务逻辑,同时使用其内置的高性能缓存机制来提升应用程序的性能。 ...
**1.6 失效转移** 当检测到服务失败时,可以将请求转移到另一个健康的实例上来继续提供服务。这种方式有助于提高系统的整体稳定性。 **1.7 超时重试** 当请求出现超时情况时,可以选择重新发送请求。不同层级的...
- 高可用架构的关键在于服务的资源隔离、限流与过载保护、熔断、优雅降级、容错、超时控制及监控运维。通过这些技术,可以确保系统在面对异常时仍能稳定运行。 本课程通过大白话解释和实际操作演示,旨在帮助...