`
devilbaby
  • 浏览: 68527 次
  • 性别: Icon_minigender_1
  • 来自: 珠海->上海
社区版块
存档分类
最新评论

JVM-level clustering

阅读更多

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

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

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

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

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

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

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

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

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

<o:p> </o:p>

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

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

Gain from Terracotta<o:p></o:p>

Throughput<o:p></o:p>

67% increase in TPS<o:p></o:p>

Memory Use

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

Latency

Ø 50% reduction<o:p></o:p>

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

560 for WebLogic<o:p></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方案进行讨论

评论
26 楼 devilbaby 2007-10-20  
引用

dengyin2000     2007-09-21 18:13

xtcn 写道
性能会有问题,偶试了
在20多台tomcat,Session个数到达60万,TPS达到500多的时候
性能吃不消了~~

你这样的nodes 使用tomcat的集群的话 可能早就性能有问题了吧。


你要20多个tomcat,那还是换种server吧,本来tomcat做集群的性能就是很高。而且估计你是用session replication的方式,只是tc帮你拦截统一管理session而已,这种方式是通过组播来实现。我估计是tomcat的集群出问题而不是TC。你可以分开来测试一下嘛,看只用tomcat做cluster能撑到什么样
25 楼 xtcn 2007-09-22  
呵呵,是的,偶只有三台应用服务器的时候,试过tomcat的Session的集群,性能很差

不过,这不是主题,呵呵,TC的极限如果只到这样的话,离偶的期望还是有距离的:)
按其相关文档中说的关于几千个TPS还差很多呢~~ :)
24 楼 dengyin2000 2007-09-21  
xtcn 写道
性能会有问题,偶试了
在20多台tomcat,Session个数到达60万,TPS达到500多的时候
性能吃不消了~~


你这样的nodes 使用tomcat的集群的话  可能早就性能有问题了吧。
23 楼 xtcn 2007-09-21  
性能会有问题,偶试了
在20多台tomcat,Session个数到达60万,TPS达到500多的时候
性能吃不消了~~
22 楼 grantbb 2007-07-05  
这东西挺新鲜的,不知道如果节点多了性能会怎么样?比如100个以上的节点。

JBossCache也是基于field复制实现的集群。
21 楼 devilbaby 2007-06-25  
lllyq 写道
terracotta那个bug我也遇到了,不用session.invalidate就好,remove all attribute就可以了,session timeout也不影响的


session invalidate的bug已经修复了,可以下载最新的nightly build
20 楼 devilbaby 2007-06-19  
javaeye的bug,把我的回复提交了两次
19 楼 devilbaby 2007-06-19  
lllyq 写道
terracotta那个bug我也遇到了,不用session.invalidate就好,remove all attribute就可以了,session timeout也不影响的


这个只是其中一个bug,主要是他的处理和tomcat是不同的,就是respone commit的处理不同

就是因为这个bug,促进了liferay和terracotta的合作,这是件值得高兴的事情
18 楼 devilbaby 2007-06-19  
lllyq 写道
terracotta那个bug我也遇到了,不用session.invalidate就好,remove all attribute就可以了,session timeout也不影响的


这个只是其中一个bug,主要是他的处理和tomcat是不同的,就是respone commit的处理不同

就是因为这个bug,促进了liferay和terracotta的合作,这是件值得高兴的事情
17 楼 lllyq 2007-06-18  
terracotta那个bug我也遇到了,不用session.invalidate就好,remove all attribute就可以了,session timeout也不影响的
16 楼 跳舞老爹 2007-06-16  
devilbaby 写道
见附件

这个附件中的scale-out怎么翻译?
15 楼 melin 2007-06-13  
对spring集群有一个框架,cluster4spring
http://www.soft-amis.com/index.html?return=http://www.soft-amis.com/cluster4spring/index.html
不知道大家有没 有熟悉的,他和tc的实现 有什么不同
14 楼 JAVA_ED 2007-06-12  
如果真的是按field replicate 比我现在用的Tangosol Coherence好多了
13 楼 devilbaby 2007-06-12  
测试了两天找到了一个bug
http://forums.terracotta.org/forums/posts/list/280.page

不过活跃的开源项目有个好处,就是他们会fix bug,不用自己改,但是代价就是等待
12 楼 zzeric 2007-06-11  
同意lz的说法,需要根据实际出发,才能找出最适合的。之所以倾向于Memcached,主要还是因为它的简单,可控性更高。据说Terracotta有80多M,要理解都得花不少时间。所以只是为了实现分布式缓存的话,当Memcached方案不是落后Terracotta非常多的话,还是选择Memcached。我估计Memcached会比WebLogic的好些。

希望能看到白衣的测试结果。
11 楼 devilbaby 2007-06-11  
zzeric 写道
1)我更想知道Memcached方案和Terracotta的性能比较
2)Find-Grained Changes看上去很美,但bytecode instrumentation会不会加重应用服务器的压力?
3)因为是JVM级的集群,Terracotta服务器要处理的内容,比起Memcached只是维护一个MAP要复杂得多,那在相同的压力下,是否会需要更高级的或更多的服务器来支撑?再把Java与C的性能差异考虑进去呢?

另外,Sticky + Memcached可以实现FailOver


我没有在项目中去用memcached,所以这方面的性能测试可能无法做,但是在TPS上Terracotta会有优势。江南好像也在做这个测试,可以叫他分享一下。
由于Tc是用java做的,所以跑TC就等于跑一个java的应用。但是你要相信,性能是有代价的。
TC其实不单单是session方面,pojo也可以做cluster,而且这是一个很活跃的项目,它开发的目的和memcached是不同的。
p.s.我也不认为terracotta的方案是最好的,要从实际出发,找出的是最合适的方案,我这里只是提供一个参考

在最后我把官方的一份terracotta和weblogic之间的测试文档给大家share
10 楼 zzeric 2007-06-11  
1)我更想知道Memcached方案和Terracotta的性能比较
2)Find-Grained Changes看上去很美,但bytecode instrumentation会不会加重应用服务器的压力?
3)因为是JVM级的集群,Terracotta服务器要处理的内容,比起Memcached只是维护一个MAP要复杂得多,那在相同的压力下,是否会需要更高级的或更多的服务器来支撑?再把Java与C的性能差异考虑进去呢?

另外,Sticky + Memcached可以实现FailOver
9 楼 devilbaby 2007-06-09  
galaxystar 写道
开源的功能太强大,通用,性能往往不怎么样,有时间和精力,参看源码,抽其核心,自己写.


我这几天就发现一些bug,不过有一点好的就是tc的团队很热情,很多问题都能及时回复
8 楼 galaxystar 2007-06-09  
开源的功能太强大,通用,性能往往不怎么样,有时间和精力,参看源码,抽其核心,自己写.
7 楼 devilbaby 2007-06-09  
江南白衣 写道
性能,性能....特别TC自己也做群集的时候。


这个正是要测试的,所以方案是方案,到具体实施还要一定的时间。
不过好的是terracotta不对项目有什么影响,如果不行的话可以不启动。

我相信江南白衣你也对这个做过测试,能分享下测试结果吗?

相关推荐

    nginx-upstream-jvm-route-1.15

    【标题】"nginx-upstream-jvm-route-1.15" 涉及的核心知识点是Nginx的upstream模块与JVM路由的整合,特别针对Nginx 1.15版本。这个项目旨在解决在配置Nginx时遇到的特定错误提示“nginx: [emerg] invalid parameter ...

    nginx-upstream-jvm-route 和 nginx 对应版本,亲测可用

    此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件...

    基于jvm-sandbox-repeater重新开发的一款流量回放平台产品

    Moonbox(月光宝盒)是JVM-Sandbox生态下的,基于jvm-sandbox-repeater重新开发的一款流量回放平台产品。在jvm-sandbox-repeater基础上提供了更加丰富功能,同时便于线上部署和使用,更多对比参考。 使用场景 你...

    kotlinx-coroutines-io-jvm-0.1.1.jar

    kotlinx-coroutines-io-jvm-0.1.1.jar

    jvm-npm, 适用于JVM的兼容CommonJS模块加载器.zip

    jvm-npm, 适用于JVM的兼容CommonJS模块加载器 JVM上Javascript运行时中的NPM模块加载支持。 实现基于 http://nodejs.org/api/modules.html,应该完全兼容。 当然,不包括完整的node.js API,因此不要期望依赖于它的...

    JVM-SANDBOX基于JVM的实时无侵入AOP框架容器

    **JVM-SANDBOX:基于JVM的实时无侵入AOP框架容器** JVM-SANDBOX是一个强大的工具,它允许开发者在Java虚拟机(JVM)上实现无侵入的面向切面编程(AOP)框架,提供实时监控和干预应用程序的能力。这个框架的核心在于...

    metrics-jvm-3.1.5-API文档-中文版.zip

    赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...

    JVM-Sandbox,基于jvm的实时无创aop框架容器.zip

    JVM-Sandbox是一个开源项目,其核心理念是提供一个基于Java虚拟机(JVM)的实时、无侵入的面向切面编程(AOP)框架容器。它允许开发者在不修改原有代码的情况下,对运行中的Java应用进行动态的监控、拦截和处理。...

    metrics-jvm-3.1.5-API文档-中英对照版.zip

    赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...

    nginx-upstream-jvm-route nginx共享Session

    标题 "nginx-upstream-jvm-route nginx共享Session" 涉及到的是在使用Nginx作为反向代理服务器时,如何实现多个Java应用服务器(通常指的是JVM实例)之间的Session共享。这通常在构建高可用性和负载均衡的Web服务...

    jvm-mon基于控制台的JVM监视

    【jvm-mon基于控制台的JVM监视】 `jvm-mon`是一款实用的工具,它允许开发者通过控制台界面实时监控Java虚拟机(JVM)的状态。在Java开发过程中,性能分析是至关重要的,因为良好的性能能提升用户体验,降低服务器...

    nginx-upstream-jvm-route-1.12.0.tar.gz

    nginx_upstream_jvm_route 是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。 安装方法(进入Nginx源码目录): #patch -p0 &lt; /path/to/this/directory/jvm_route.patch # ./configure -...

    jvm-sandbox-repeater:基于JVM-Sandbox的Java服务器端记录和回放解决方案

    是生态体系下的重要模块,它具备了JVM-Sandbox的所有特点,插件式设计便于快速适配各种中间件,封装请求录制/回放基础协议,也提供了通用可扩展的各种丰富API。 目标人群 - 面向测试开发工程师 线上有个用户请求一直...

    nginx-upstream-jvm-route-0.1.tar.gz

    《Nginx、Upstream与JVM Route:构建高效集群Session复制方案》 在现代Web应用架构中,负载均衡和高可用性是不可或缺的组成部分。Nginx作为一款高性能的反向代理服务器,常被用于处理HTTP和HTTPS请求,通过Upstream...

    weilei-JVM-ppt.rar

    【标题】"weilei-JVM-ppt.rar"是一个压缩包文件,包含了关于JVM(Java虚拟机)的深入讲解。这个压缩包很可能是由个人精心整理并分享的,用于帮助学习者提升JAVA编程的高级知识,特别是关于JVM的部分。 【描述】提到...

    jvm-profiler,jvm分析器向kafka、控制台输出或自定义报告器发送度量.zip

    《JVM Profiler:深入解析与应用》 在IT领域,优化Java应用程序的性能是至关重要的,而JVM(Java虚拟机)作为Java程序运行的基础,其内部运作机制的了解和调优对于提升效率至关重要。"jvm-profiler"是一个开源项目...

    jvm-exporter.json

    说明:kubernetes集群监控jvm内存监控模板

    Python库 | jvm-0.4.0b2.zip

    在Python中,`jvm-0.4.0b2.zip`这个库显然是与Java虚拟机(JVM)相关的,可能是为了在Python环境中与Java进行交互或者调用Java的类库。下面我们将深入探讨Python中的Java接口、如何使用Python库与Java集成,以及`jvm...

    jvm-demo.zip

    《深入理解Java虚拟机——JVM-demo探索》 在Java编程世界中,Java虚拟机(JVM)扮演着至关重要的角色。"jvm-demo.zip"这个压缩包文件为我们提供了一个深入学习和实践JVM的平台。它包含了"jvm-demo"这个子文件夹,...

    jvm-tools, 用于 JVM troublshooting 监视和分析的小工具集.zip

    jvm-tools, 用于 JVM troublshooting 监视和分析的小工具集 瑞士Java刀片( SJK ) SJK是用于JVM诊断,故障诊断和分析的命令行 工具。SJK利用 JVM ( 例如 JMX,JVM附加和性能计数器)的标准诊断接口,并在上面添加更多...

Global site tag (gtag.js) - Google Analytics