高并发(5000)+tomcat+nginx+seesion共享------记一次应急后分享

高并发(5000)+tomcat+nginx+seesion共享
背景
公司最近紧急开发一款应急程序,前期由于使用人数不是很多,最大并发人数一个tomcat即可应付,后来由于公司本部,分公司,子公司等加入使用,使用人数急剧增大,高峰时段经常报502,tomcat IOE异常,当时我们就意识到请求过多,服务器无法及时应答,需要负载。

方案:
1.首先想到的方案便是 Nginx+memcached+tomcat,因为我们不想修改代码,需求紧急,先考虑最快实现方式。memcached用于解决session共享问题。前期搭建过程曲折,tomcat版本,memcached的版本,MSMjar包版本,等等,各种版本问题,启动tomcat 各种报错,网上一查基本是版本冲突。后来搭建成功发现本地测试没问题,压测一下2000并发立马seesion 失效,网上关于memcached 解决方案太少,放弃了。毕竟对memcached不熟。需要的jar包,我这可以提供一下,方便后续研究。
链接 Nginx+memcached+tomcat7 所需要的jar
2.后来,我的思路转向redis,之前项目有用过,也比较熟。
具体方案是:Nginx+redis+tomcat7 ;
两台服务器,8核,16G—虚拟机,windows server 2012 ;
两个tomcat7,nginx负载。
其实最先应该优化单个tomcat,提高tomcat最大性能,我看网上说极限是2000并发,经过几次调优,压测1000并发会有20% 机率丢失,

    

主要就是maxThreads 和 protocol 非阻塞 方式调优。

由于我们是web项目(非maven),我们想在改最少代码情况下,将session存取到redis,我由此想到是基于xml 的springSession 方案解决。

applicationContext.xml redsi注入bean


        
    
    
    
        
        
        
        
        
    

web.xml 对springSession 过滤


	springSessionRepositoryFilter
	org.springframework.web.filter.DelegatingFilterProxy


	springSessionRepositoryFilter
	/*

需要注意的是过滤的路径 可能会无法正常访问页面。

所需要的jar 在这:
springsession+ redis jar

经过四轮压测,由2000 - 3000 -4000 -5000并发,网址秒开,后台无异常报错。

实际部署后上线,毫无压力,一致好评。

你可能感兴趣的:(java工具类,java,windows,负载均衡器,redis,memcached)