JVM-level clustering

本文介绍了使用Terracotta实现JVM级集群的方法,包括其工作原理、实现的功能及如何简化Java企业应用的部署。同时探讨了Terracotta在HTTP会话复制、分布式缓存等方面的应用,并分析了其在项目中的集成效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


网站: JavaEye 作者: devilbaby 发表时间: 2007-06-09 13:07 此文章来自于 http://www.iteye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://www.iteye.com/topic/88466

    前段时间一直在运用memcached来保存session的集群方案,这的确是实现HAHP的一个好方案。但是在实现上还存在不少的bug。我和大家分享另外一种HA方案:JVM堆级群集。<o:p>


    JVM-level clustering主要是通过terracotta来实现,terracotta2003年成立,代码是最近才开源的,license对企业也没有太大的限制,据相关的报道,terracotta正努力劝服sun,让JVM-level clustering成为标准,嵌入到JDK中。然后它的企业版应用主要是靠服务攒钱,它的战略有点象Redhat。在这里我先介绍一下Terracotta<o:p>


Terracotta到底是什么呢?官方是这样定义的:Open Terracotta is an enterprise-class, open-source, JVM-level clustering solution. JVM-level clustering simplifies enterprise Java by enabling applications to be deployed on multiple JVMs, yet interact with each other as if they were running on the same JVM. Terracotta extends the Java Memory Model of a single JVM to include a cluster of virtual machines such that threads on one virtual machine can interact with threads on another virtual machine as if they were all on the same virtual machine with an unlimited amount of heap.


<o:p>


 Terracotta实现了什么?<o:p>


1)  堆级的复制:集群时需要拷贝的对象在堆之间进行<o:p>


2)  超大的虚拟堆:由于是JVM层次的集群,所以堆要比单个JVM大很多<o:p>


3)  多种集群锁语法:distributed wait/notify and synchronized<o:p>


4)  运行实时监控<o:p>


5)  无需序列化实现集群<o:p>


6)  Find-Grained Changes:由于集群时,terracotta不要求序列化,所以对象拷贝可以细化到对象中的每一个field,就是说在进行replication的时候,当对象发生变化的时候,不需要整个对象进行拷贝,只需要拷贝发生变化的那个fieldP.s.这点也是我最喜欢的,这对于性能的提高会有明显的效果<o:p>


<o:p> </o:p>


Terracotta能给我们做什么?(这个很简单,我也不做翻译了)<o:p>



  • HTTP Session Replication - Tomcat, Weblogic, Websphere <o:p>
  • Distributed Cache - from java.util.Hashmap to OSCache, we support it, <o:p>
  • Work/Manager Distributed Queries - Coordination is easy with Terracotta. We even have code to get you started on the Terracotta Forge <o:p>
  • POJO Clustering/Spring integration- Everything from Spring Beans to java.util.HashMap <o:p>
  • Collaboration/Coordination - Use a queue, use distributed wait/notify, or even Cyclic Barrier(We love Cycle Barrier) with Terracotta coordination across VMs is as easy as coordination across threads <o:p>

p.s. tomcat现在支持的版本有5.0,5.5,6.0;weblogic官方测试过的只有8.1websphere只支持CE6.1预计会在今年夏季测试完成,估计就是最近,如今还支持LucenceWicket的集群。具体可以查看他的官方网站<o:p>


如果实习AOP的人应该对Terracotta的工作原理很容易理解。Terracotta一个很重要的概念是bytecode instrumentation,这种对字节流监控的技术在很多AOP的项目中都用到,例如AspectJAspectWerkz


Terrocotta的介绍到此为止。



作为一个HA方案的设计者,在运用一项新技术的时候必须评估它给现有项目带来的风险,特别是terrcotta还没有足够的成熟。


1)               如果运用了terracotta,我们现有的项目需要有哪些方面的修改,这点我估计也是大家最关心的。由于terracotta运用了bytecode instrumentation的技术,所以我们现有的项目基本上不需要做任何修改。Terracotta提供一个配置文件tc-config.xml,我们只需要在这个配置文件里配置一些必须参数就可以实现集群(p.s.官方提供了pojospringtomcatweblogic的预配置模版;这点比用memcached来保存session要简单,而且考虑的问题要少,毕竟官方就支持用terracotta来管理session)。我现在的项目是在tomcat下跑,需要做集群,众所周知,tomcat集群的replication性能是非常非常低的,但是如果运用sticky模式的话就不能完全实现failuer-over。在这个时候terracotta就解决了这个问题,我用terracotta来管理我的session,由于它不需要序列话和它find grained changes的机制,所以不存在大对象拷贝的问题,例如我有十个点,其中一个点发生了变化,它不会立刻把变化拷贝到所有点上,只会当某个点需要变化的时候才把变化发送到该点上。我从一些监控工具里面发现,terracotta捕获了所有httpsessionterracottasessiondata中,你会发现根本不存在httpsessionterracotta相当于一个代理,当httpsession getAttribute的时候,代理会从sessiondata中取到相对应的值,然后付给httpsession,具体的实现有兴趣的可以看看源代码


2)               性能的变化,把terracotta集成到项目后性能是否能有明显的提升?在官方文档中,对terracotta http session clusteringweblogic8.1 http session clustering做了一个比较(如果大家感兴趣的话,我可以以后配合实际再写篇有关terracotta方面性能测试的文章),结果让人比较让人惊讶






















Measure<o:p>



Gain from Terracotta<o:p>



Throughput<o:p>



67% increase in TPS<o:p>



Memory Use



6-7 x reduction in garbage collection cycles<o:p>



Latency



Ø 50% reduction<o:p>


Ø Queue depth never exceeds 125, vs. 280-<o:p>


560 for WebLogic<o:p>



3)               Terracotta的扩展性。Terracotta是纯java编写的,源码开源,可以自己修改源代码进行扩展。而且terracotta很活跃,从它的策略来看,会有不错的发展和不久就会流行起来。


4)               从这点来看Terracotta相当一个中央服务器,那会不会terracotta出现single-point的问题呢?terracotta server本身支持集群



    好像写得太多了。说说我现在项目的HA方案吧,我正在实现和测试的方案是这样的:


Apache5 tomcat2 terrcotta server cluster2 mysql cluster,在这个方案中还是存在单点问题,就是apache,我曾经考虑过用四层交换机来代替apachebalance




感兴趣的同学,欢迎对JVM-level Clustering和我的HA方案进行讨论




《 JVM-level clustering 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>

推荐相关文章:
   纯java 的javascript引擎:rhino
   应用层缓存 VS ORM缓存




JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值