background image

5、无须学习新的 API,大大降低开发成本
企业版的 Terracotta 服务器还提供了数据分片(striping)的功能,使得集群吞吐量随着 Terracotta 服务器数量的增加达到线
性增长。

Terracotta 插件

在核心产品的基础上,Terracotta 制定了通用扩展机制 Terracotta Integration Module   

- TIM。Terracotta 本身提供了大量的插

件,应用于不同的集群应用场景,比如 Tomcat session 复制、Spring Security 整合、与 Hibernate 的整合、异步数据库持久化等
等。所有官方 TIM 可以在如下网站中找到:
http://forge.terracotta.org/releases/projects.html
用户也可以开发新的 TIM,以适应自己的应用需求。

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

我会在以后的文章中详细介绍重要的 TIM 插件和他们的应用场景。

基于 Terracotta 的 Java 集群

下面用一个简单的 Java 程序描述如何利用 Teracotta 事件 Java 集群。这个例子大概只比一般的 Hello World 稍微复杂一点。目
的主要是介绍使用 Terracotta 的最简单流程。我会在以后的文章中详细介绍不同应用场景下 Terracotta 不用的使用方式和解
决问题的方法。

首先看看 Java 代码。这是一个简单的多线程程序,启动后生成两个线程,给一个共享的计数器加一,然后打印出计数器的
值:

1

package

 simpleparallel

;

2
3

public

 

class

 Main 

implements

 

Runnable

{

4

   

5

    

private

 

Object

 lock 

=

 

new

 

Object

();

6

    

private

 

int

 count 

=

 0

;

7

    

private

 

static

 Main inst 

=

 

new

 Main

();

8
9

    

/**

10

     * @param args

11

     */

12

    

public

 

static

 

void

 main

(

String

[]

 args

)

 

{

13

        

new

 

Thread

(

inst

).

start

();

14

        

new

 

Thread

(

inst

).

start

();

15

    

}

16
17

    

public

 

void

 run

()

 

{

18

        

//keep increasing count by one every few seconds

19
20

        

while

(

true

){

21

            

synchronized

(

lock

){

22

                count

++;

23

                

System

.

out

.

println

(

Thread

.

currentThread

().

getName

()

 

+

 

" increased count to:"

+

count

);

24

            

}

25

            

try

{

26

                

Thread

.

sleep

((

int

)(

5000

*

Math

.

random

()));