基于JVM的Java应用集群解决方案

上传人:平*** 文档编号:13116301 上传时间:2017-10-22 格式:DOC 页数:7 大小:303.41KB
返回 下载 相关 举报
基于JVM的Java应用集群解决方案_第1页
第1页 / 共7页
基于JVM的Java应用集群解决方案_第2页
第2页 / 共7页
基于JVM的Java应用集群解决方案_第3页
第3页 / 共7页
基于JVM的Java应用集群解决方案_第4页
第4页 / 共7页
基于JVM的Java应用集群解决方案_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《基于JVM的Java应用集群解决方案》由会员分享,可在线阅读,更多相关《基于JVM的Java应用集群解决方案(7页珍藏版)》请在金锄头文库上搜索。

1、 Terrocotta - 基于 JVM 的 Java 应用集群解决方案前言越来越多的企业关键应用都必须采用集群技术,实现负载均衡(Load Balancing) 、容错(Fault Tolerance)和灾难恢复(Failover) 。以达到系统可用性(High Availability)和可伸缩性(Scalability )的要求。关于 J2EE 集群技术的基本原理和常用实现方式,TheServerS 有一篇经典的文章:http:/ 上,陶建风先生在他的博客中也作了翻译:http:/ Java 集群技术,Terracotta。它采用了与众不同的手段,解决了传统集群技术面临的一些关键问题。可

2、以说为 Java 集群技术的实现吹来了一股新鲜的空气。Terracotta(http:/terracotta.org/)是一个开源的框架。他的创始人 Ari Zilka 原本是 W 的首席架构师。他于2003年成立 Terracotta 公司,并且将产品开源。该产品在2006年左右趋于成熟,在很多财富500强企业获得成功应用。2009年Terracotta 在该年度的 JavaOne 会议中获得 Duke 奖,并由 Java 创始人 James Gosling 先生亲自把该奖颁发给了 Ari Zilka 先生。本文着重介绍 Terracotta 技术的基本原理,尤其是它与其它集群技术的根本区别

3、之处。然后会用一个简单的例子说明Terracotta 的基本使用方式。在以后的文章里,我会陆续详细介绍 Terrocotta 的不同应用场景和技巧。基本原理Terracotta 最大的特点是它使用 Java 二进制代码增强的方式( binary code injection)截获集群节点对数据的修改和获取的请求,利用单独的 Terracotta 服务器调配数据的流向,以达到最高的网络效率。这两点可以说是与传统集群技术采用的序列化和网络广播机制在实现思路上的根本不同。另外从开发人员角度来说,Teraccotta 隐藏在 Java API 之后,开发人员不需要学习新的 API。只需要使用标准的 J

4、DK 数据结构(java.util.*, java.concurent.*等) 、内置 Java 协同、加锁机制(synchronized, object.wait, object.notify 等)开发代码,在 Terracotta 平台之上就可以把单机基于 POJO 的应用扩展到多机集群上。因此开发人员的学习曲线很短。Terracotta 集群方案由两部分组成:Terracotta 驱动器和 Terracotta 服务器: 其中驱动器部分(也称为 Terracotta 客户端)与应用程序执行在相同的 JVM 中。实际上应用程序是由 Terracotta 驱动器载入到内存中的。载入的同时,会

5、对 Java 二进制代码进行增强。用户提供 Terracotta 配置文件指定本地程序中哪些数据需要在集群中共享。这样 Terracotta 就可以通过增强的代码截获对这些共享数据的读写请求,并且与 Terracotta 服务器协作,实现共享数据在集群中的一致性。对于 Java 代码中使用的“锁”也是利用相同的机制实现全局协同;Terracotta 服务器则首先记录所有节点对共享数据和锁的访问信息,为读取数据的节点提供最新数据,把修改的数据通知给正在使用中这些数据的节点等等。服务器除了协调节点间数据的获取和变化通知以外,还利用其本地内存和硬盘实现共享数据的缓存和持久化。由于 Terracott

6、a 驱动器和服务器都有缓存数据的能力,有时我们也称 Terracotta 驱动器为一级缓存 L1,服务器为二级缓存L2。Terracotta 这一体系架构跟其它集群解决方案相比,有如下几点好处:1、避免 Java 序列化,只把被修改的字段的数据传递给服务器和使用节点,大大减少 CPU 和内存消耗;2、避免数据的广播,只把修改的数据通知给正在使用该数据的节点,大大降低了网络流量;3、利用服务器实现网络扩展内存,使得有限内存的客户端节点可以访问远大于其内存容量的数据结构,而不必担心发生内存逸出的异常;4、通过服务器实现共享数据持久化,通过服务器集群实现容错性等等5、无须学习新的 API,大大降低开

7、发成本企业版的 Terracotta 服务器还提供了数据分片(striping)的功能,使得集群吞吐量随着 Terracotta 服务器数量的增加达到线性增长。Terracotta 插件在核心产品的基础上,Terracotta 制定了通用扩展机制 Terracotta Integration Module TIM。Terracotta 本身提供了大量的插件,应用于不同的集群应用场景,比如 Tomcat session 复制、Spring Security 整合、与 Hibernate 的整合、异步数据库持久化等等。所有官方 TIM 可以在如下网站中找到:http:/forge.terracot

8、ta.org/releases/projects.html用户也可以开发新的 TIM,以适应自己的应用需求。比如 TIM-Session 实现了 Web 应用服务器结点间 session 信息的共享。由于它利用了 Terracotta 集群间高效数据共享的机制实现 session 共享,整个集群的吞吐量可以随着服务器节点的增加而线性增长。与之相比,Tomcat 自带的 session 集群实现,最多只能支持到4个节点左右。当节点数目进一步增加的时候,各节点的 CPU 使用率和网络负载会达到极限,反而降低整个集群的吞吐量。基于 Terracotta 的 Tomcat 集群可以达到几十个节点甚至更

9、多。我会在以后的文章中详细介绍重要的 TIM 插件和他们的应用场景。基于 Terracotta 的 Java 集群下面用一个简单的 Java 程序描述如何利用 Teracotta 事件 Java 集群。这个例子大概只比一般的 Hello World 稍微复杂一点。目的主要是介绍使用 Terracotta 的最简单流程。我会在以后的文章中详细介绍不同应用场景下 Terracotta 不用的使用方式和解决问题的方法。首先看看 Java 代码。这是一个简单的多线程程序,启动后生成两个线程,给一个共享的计数器加一,然后打印出计数器的值: package simpleparallel; public c

10、lass Main implements Runnable private Object lock = new Object(); private int count = 0; private static Main inst = new Main(); /* * param args */ public static void main(String args) new Thread(inst).start(); new Thread(inst).start(); public void run() /keep increasing count by one every few second

11、s while(true) synchronized(lock) count+; System.out.println(Thread.currentThread().getName() + increased count to:+count); try Thread.sleep(int)(5000*Math.random(); catch(Exception e) e.printStackTrace(); Details注意代码中没有任何特殊的 JDK 以外的 API。单独执行这个程序,会看到如下现实的结果。现在我们要把这个代码放到集群上。目的是让多个 JVM 共同访问同一个计数器,并且能够互

12、斥地对它进行累加,而在全集群范围内不会产生数据冲突。具体的操作步骤如下:1、下载并安装 JDK 1.5或1.6,设置系统的 JAVA_HOME 环境变量2、下载、安装 Terracotta 环境目前最新的 Terracotta 版本是3.0.1, 不过3.1马上就要发布了,所以我们使用3.1 stable1,可以从下列地址下载:http:/terracotta.org/web/display/orgsite/Download或者直接从 这个地址下载3.1 stable1 。用 java -jar terracotta-3.1.0-stable1-installer.jar 启动安装程序,把 T

13、erracotta 安装到指定的目标目录。假设安装目录是 $TC_HOME(Unix/Linux)或%TC_HOME%(Windows)3、到刚才的 Java 代码的开发目录下,确认代码已经用 javac 编译好。假设编译目标文件在 bin 目录下。4、创建一个文本文件 tc-config.xml, 把下面的配置保存在该文件中: 9510 9520 terracotta/server-data terracotta/server-logs terracotta/cluster-statistics terracotta/client-logs terracotta/client-statistics/%D simpleparallel.Main simpleparallel.Main.inst void simpleparallel.Main.run() write Details5、启动 Terracotta 服务器:$TC_HOME/bin/start-tc-server.sh or%TC_HOME%binstart-tc-server.bat6、打开两个或者更多的 Terminal 或 DOS 窗口,分别启动一个测试程序:$TC_HOM

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号