标签(空格分隔): nginx 过滤器 监听器
目录.png
背景:一个朋友问到这个问题,自行百度整理大体解决的思路,都是参考大神的文档,目前这里不做深究。
前期相关准备
1.网站的运行环境
一般情况下,使用的是linux+tomcat+jdk+mysql,要是查看具体版本的话,连接linux后进入需要查看的tomcat路径下的bin内,直接输入: sh version.sh
要是其他的搭建方式,我就不太了解了。
2.预估最高访问量
可以参考之前的统计数据进行大体的评估。
针对问题的描述
公司有类似答题竞赛的活动,访问量在一个月时间内,会比较高。
方案一
限制IP访问,针对单机模式
实现方式有很多,我只大体说下两种方式:
- 1.要是网站代码框架使用的是SSH,或是SpringMVC,可以通过过滤器,或是监听器的方式手动写代码实现,限制某一段时间内同一ip访问数,或是限制并发连接数,这种方式比较繁琐,复杂
- 2.搭建nginx,进行相应的配置,这种方式较为简单,访问 nginx中如何限制某个IP同一时间段的访问次数 了解详情。
方案二
针对多机模式
经过验证,系统对大用户量使用的响应方面,Apache+3Tomccat集群> Apache+2Tomcat集群> Apache集成Tomcat >单个Tomcat。
于是可以增加多个应用服务器,同时搭建nginx做负载均衡。按照预估最高访问量,进行评估需要搭建几个应用服务器。基本上两个就够用了。
方案三
tomcat应用服务器的并发访问优化
要是应用服务器使用的是tomcat,官方文档指出基本在2000左右,实际测试同一时刻的承受稳定访问量在250左右。
数据来源,参考文档Tomcat能够稳定支持的最大用户并发数 。
解决方法
参考文档tomcat 高并发配置 与优化 。
总之:
要是网站搭建在tomcat应用服务器的话,基本按照方案三的解决方案,可以应对大部分场景,同时这种也是最为简单的解决方式,给出如下配置方案:
1.修改tomcat中catalina.sh的配置,在文件开始处加
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true"
2.修改tomcat中server.xml
<Connector port="80" protocol="HTTP/1.1"
maxThreads="600"
minSpareThreads="100"
maxSpareThreads="500"
acceptCount="700"
connectionTimeout="20000"
redirectPort="8443" />
备注:对于并发量的优化,还要看数据库及程序性能,顺便说一句,不要忘记改os的最大文件句柄数等等