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
()));