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

[经验分享] 增加tomcat的性能和稳定性

[复制链接]
YunVN网友  发表于 2018-12-3 08:51:53 |阅读模式
  为了增加tomcat的性能和稳定性,我们一般采用balance和session同步机制。 下图列出了我们常用也是最简单的解决方案。

  balance和session
  1、 balance
  负载均衡我们一般采用Apache proxy和Apache+mod_jk方式
  所使用软件:Apache2.2.19  http://httpd.apache.org/download.cgi#apache22;
  Tomcat7           http://tomcat.apache.org/download-70.cgi
  proxy、proxy_blancer和mod_jk的比较
  proxy的缺点是,当其中一台tomcat停止运行的时候,apache仍然会转发请求过去,导致502网关错误。但是只要服务器再启动就不存在这个问题。
  mod_jk方式的优点是,Apache 会自动检测到停止掉的tomcat,然后不再发请求过去。
  缺点就是,当停止掉的tomcat服务器再次启动的时候,Apache检测不到,仍然不会转发请求过去。
  proxy和mod_jk的共同优点是.可以只将Apache置于公网,节省公网IP地址资源。
  可以通过设置来实现Apache专门负责处理静态网页,让Tomcat专门负责处理jsp和servlet等动态请求。
  共同缺点是:如果前置Apache代理服务器停止运行,所有集群服务将无法对外提供。
  proxy和mod_jk对静态页面请求的处理,都可以通设置来选取一个尽可能优化的效果。
  mod_proxy_balancer和mod_jk都需要修改tomcat的配置文件配合
  
  这三种Tomcat集群方式对实现最佳负载均衡都有一定不足,mod_proxy_balancer和mod_jk相对好些,mod_jk的设置能力更强些。lbfactor参数来分配请求任务。
  apache自带mod_proxy功能模块中目前只可以实现两种不同的负载均衡集群实现方式,第一种是分工合作的的形式,通过各台主机负责不同的任务而实 现任务分工。第二种是不同的机器在担任同样的任务,某台机器出现故障主机可以自动检测到将不会影响到客户端,而第一种却不能实现但第一种实现方式的优点在 于他是主服务器负担相应没第二种大因为台只是提供跳转指路功能,形象的说他不给你带路只是告诉你有条路可以到,但到了那是否可以看到你见的人他已经不会去管你了。相比之下第二种性能要比第一种会好很多;但他们都有个共同点都是一托N形式来完成任务的所以你的主机性能一定要好。
  2、 session同步
  对于tomcat的集群有两种方式,这个主要是针对session而言的。一种就是sticky模式,即黏性会话模式;另外一种就是session复制模式了。
  2.1 sticky模式
  利用负载均衡器的sticky模式的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群 中各个tomcat节点上,实现负载均衡的能力。这样做的缺点是没有灾难恢复的能力。一旦一个节点发生故障,这个节点上所有的session信息全部丢 失;
  这种方式其实是由前端balancer实现的,基本不需要webServer做任何改动(只需要修改jvmRoute="tomcat1")
  同一用户同一session只和一个webServer交互,一旦这个webserver发生故障,本次session将丢失,用户不能继续使用
  2.2 复制模式
  利用Tomcat session复制的机制使得所有session在所有Tomcat节点中保持一致。当一个节点修改一个session数据的时候,该节点会把这个 session的所有内容序列化,然后广播给所有其它节点。这样当下一个用户请求被负载均衡器分配到另外一个节点的时候,那个节点上有完备的 session信息可以用来服务该请求。这种做法的问题是对session哪怕有一点点修改,也要把整个sessions数据全部序列化 (serialize),还要广播给集群中所有节点,不管该节点到底需不需要这个session。这样很容易会造成大量的网络通信,导致网络阻塞。一般采 用这种方式,当Tomcat节点超过4个时候,整个集群的吞吐量就不能再上升了;
  此方式是通过tomcat本身提供的功能,只需要修改server.xml文件
  (1)修改Engine节点信息:
  (2)去掉  的注释符
  (3)web.xml中增加
  2.3 Terracotta模式
  另一种方式就是利用开源软件Terracotta。Terracotta的基本原理是对于集群间共享的数据,当在一个节点发生变化的时 候,Terracotta只把变化的部分发送给Terracotta服务器,然后由服务器把它转发给真正需要这个数据的节点。这样对网络的压力就非常小, 各个节点也不必浪费CPU时间和内存进行大量的序列化操作。把这种集群间数据共享的机制应用在session同步上,相当于对tomcat第二种集群实现 机制进行了优化,既避免了对数据库的依赖,又能达到负载均衡和灾难恢复的效果。在对比测试中,采用Terracotta搭建Tomcat集群,节点达到8 个时候,整个集群的吞吐量还一直是线性增长的。
  2.4 三种模式比较
  sticky模式最大的缺点就是不支持failover,一旦某一个webServer发生故障则此节点上的session就会丢失,因此不建议使用。
  复制模式可以保证个别节点发生故障不丢失session,但是复制时需要序列化数据这会影响到系统的性能。
  另外性能随着服务器增加急剧下降,而且容易引起广播风暴。经测试当Tomcat节点超过4个时候,整个集群的吞吐量就不能再上升了。
  需要修改server.xml和web.xml文件
  使用第三方软件Terracotta进行session同步,配置对原来的web应用完全透明,原有程序不用做任何修改。。
  数据不需要序列化,也不占用webServer的内存,执行效率高。
  terracotta本身支持HA,增加了系统的稳定性。
  Terracotta是开源的,并且可以集成在很多主流的开源软件中,如Jetty、Tomcat、Spring、Geronimo和EHCache等。


运维网声明 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.yunweiku.com/thread-642612-1-1.html 上篇帖子: Linux下安装配置 Jdk1.6+Tomcat6+Apache2.2.x+jk_mod1.2 详解 下篇帖子: mac下tomcat的安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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