`
whitesock
  • 浏览: 478856 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Terracotta in Action (1)

    博客分类:
  • EE
阅读更多

1.  Introduction

    Terracotta 在其官方文档中的定义是一种透明的集群服务,也可以看成是JVM级别的集群。其中“透明”的含义并不是指已有程序无需做任何改动就可以使用Terracotta ,但是使用Terracotta 的代码无需实现特定的接口,也不依赖各种magic beans。通常意义上的“集群”是指多个应用通过网络通信、共享数据等,但是这种集群方式通常要求在应用程序中加入集群相关的代码。Terracotta 是在应用程序之下,JVM级别上的集群。这使得应用程序从复杂的集群相关的逻辑中解放出来,从而可以关注在业务逻辑本身。

 

 

    Terracotta是开源的,并且可以集成在很多主流的开源软件中,如Jetty、Tomcat、Spring、Geronimo和EHCache等。Terracotta 的核心组件有两个:客户端类库(client libraries)和服务端进程(Terracotta server),它们之间通过TCP/IP通信。Terracotta server独立于各个应用程序,它负责对集群的集中管理;客户端类库则用于加入集群。

    Terracotta 的最新版本是2.7.3,可以从http://www.terracotta.org/下载。其Windows安装文件100多M。默认的安装目录是C:\Program Files\Terracotta。安装后进入到bin目录执行start-tc-server.bat就可以启动Terracotta  server。从Windows开始菜单TerraCotta 2.7.3 -> Administrator Console启动Terracotta 的管理控制台。启动管理控制台后,使用默认的Server Host和JMX Port,点击Connect按钮。当TerraCotta管理控制台连接到Terracotta  server之后,会显示类似于下图的界面:


    其左侧树形控件的Servers节点会显示连接到的Terracotta server的详细信息。此时由于没有客户端程序连接到Terracotta server,因此Cluster Object节点和Clients节点内容为空。接下来演示一个Terracotta 附带的例子应用。通过Terracotta 2.7.3 -> Terracotta Welcome启动Terracotta Welcome程序,单击Sample Applications链接。在Sample Application Launcher中单击Shared Graphics Editor下边的Launch链接。在Shared Editor启动后,随意绘制几个图形。然后 回到Sample Application Launcher中再次单击Shared Graphics Editor下边的Launch链接。第二次启动的Shared Editor中会显示出之前绘制的图形,并且在任何一个Shared Editor中绘制的图形都会被同步到另外的Shared Editor中。接下来回到Terracotta 管理控制台,可以看到Clients节点中包含了两个客户端程序的信息。Cluster Object节点中包含了共享对象的信息。此时如果把所有的Shared Editor都关闭,那么Clients节点的内容变为空,但是Cluster Object节点中仍然包含了共享对象的信息。如果再次启动一个Shared Editor,那么这个Shared Editor中会显示之前的Shared Editor关闭时的图形。最后,通过bin目录中的stop-tc-server.bat停止Terracotta  server。

    最常见的应用Terracotta 的场景是分布式缓存、Session复制和网格计算等。通过Terracotta 在集群中共享的对象不必是可序列化的(但必须是portable的,portable是Terracotta 引进的一个概念,会在以后详细介绍)。当集群中的某个应用对共享对象进行修改的时候,这些修改会被同步到Terracotta server。Terracotta server可以对这些修改进行持久化保存,同时Terracotta server可以被配置成Master/Slave模式,这些都提供了高可用性。

    设想一个使用Terracotta 进行Session复制的场景: Tomcat A、B和C通过TerraCotta进行session复制,如果使用sticky load balancing,那么相同session的多个请求都会被发送到相同的Tomcat,比如A。A对该session的修改会被同步到Terracotta server,但是Terracotta server不会将这些修改同步到B和C(因为在B和C上不会访问到这个session),这样就减少了数据同步的次数。假设A由于某种故障而停止,那么load balancer可能会将该session的请求发送给B,在B的应用访问这个session的时候,TerraCotta才会将A之前对这个session的修改同步到B。此外,由于Terracotta 在同步的时候并没有使用序列化机制,因此它在同步数据的时候并不是每次都将整个session对象序列化后进行传输,而只是对session里改变的部分进行同步(Terracotta 使用了字节码加强的技术,拦截了包括内存读写在内的指令),这样就大大减少了网络传输的数据量。

  • 大小: 8.4 KB
  • 大小: 76.1 KB
7
0
分享到:
评论
3 楼 fujohnwang 2009-03-26  
highriver 写道

Terracotta最高支持1TB的数据量,指的是服务器中的硬盘与内存加起来吗?


我的理解,terracotta说白了只是将各个client的状态集中到服务器端来管理,所以服务器端应该保存所有客户端的状态数据,但是,保存策略可能会根据情况而定,比如是复制同步还是在服务器端在做partition之类。

没有细看,只是个人猜测,呵呵...

一个抽象化的虚拟机,但是需要分布式的通信,所以需要对java对象做些手脚, 指就是为啥


 
2 楼 fujohnwang 2009-03-26  
我觉得差不多你也该写这个主题了,呵呵
1 楼 highriver 2009-03-25  
Terracotta最高支持1TB的数据量,指的是服务器中的硬盘与内存加起来吗?

相关推荐

Global site tag (gtag.js) - Google Analytics