测试代码编写
我们首先写一个demo,该demo在没有terracotta的环境下执行一次,看看结果
我们首先先写一个简单的多线程代码(我们这个例子制定共享Main类的demo对象,它包含的count):
package simpleparallel;
public class 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 seconds
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();
}
}
}
}
执行,开启不同的进程进行执行,看看结果:
上述执行环境是在win下,通过以上的执行情况我们可以看出,正常情况下各个进程调用各自JVM中的对象,并没有任何的共享
下载、安装
下载Terracotta,下载前需要注册帐号才能进行下载:
http://terracotta.org/:
terracotta-3.7.0-installer.jar
下载地址http://terracotta.org/downloads/open-source/catalog,需要注册账号。
安装方法一:解压相应的tar文件到相应的目录即可(Linux版本)即可
安装方法二:通过java –jar terracotta-3.7.0-installer.jar
Terracotta Server配置方式
1、 单机,无持久化:服务器把集群要管理的数据保存在内存中,当数据量大于服务器可用内存的时候,会发生内存溢出错误。这种模式一般只在开发中使用;
2、 单机,持久化:服务器把集群要管理的数据保存在硬盘中,利用服务器上的内存作为缓存,以提高常用数据的访问速度。当数据量大于服务器可用内存的时候,服务器会把不常用数据从内存中移除,这样就不会发生内存溢出问题。当服务器宕机,然后被从新启动以后,硬盘中的数据被从新激活,这样集群中共享的数据不会丢失。这种配置提供了一定的灾难恢复(Fail over)的能力,但是还是无法做到高可用性(HA);
3、 双机或者多机镜像(mirroring):一般由两台或者多台物理服务器互为镜像。其中一台作为主服务器支持集群运行。其它备用服务器只是对数据做镜像,并且监视主服务器的状态。当主服务器发生故障宕机的时候,其中一台备用服务器自动升级为主服务器,接管整个集群的支撑工作。这样一来整个集群还继续正常运行,不会受任何影响。这种配置可以实现高可用性。一般对于这种配置模式,我们还把服务器数据配置为持久化模式,但是如果内存数量不是问题,用户也可以选择非持久化;
4、 服务器阵列分片模式(Server Array Striping):这是Terracotta FX系列产品独有的高端企业级特性,它主要用于提高集群性能。当集群中数据量和数据访问频率太高的时候,可以配置多台服务器,分别负责一部分集群数据的服务。比如集群共享数据达到1G个对象,如果用5台服务器做分片,每一台服务器可以负责2千万个对象。这样就实现了Terracotta服务器的负载均衡。这种数据分片的策略,也就是说哪个数据对象保存在哪个服务器上,对开发人员和实施维护人员是完全透明的。当服务器吞吐量不能满足要求的时候,用户可以考虑修改代码,对共享数据和应用系统中的数据访问算法进行优化;也可以简单地增加阵列分片服务器数量。后者往往是性价比比较高的方式。用户还可以考虑让两台服务器互为镜像,让多个镜像再组合成阵列分片。这样每个镜像做到高可用性,多个镜像在一起,实现集群性能的提高;
本例子实现本机多进程共享count。
1、 创建tc-config.xml文件,存放到terracotta根目录下(可以通过config-samples文件夹下的tc-config-express-reference.xml文件进行修改),该文件是描述client节点在TC Server中行为的唯一信息,也是我们的程序作为Terracotta Client节点添加时主要的内容(为了能够让任何节点都在不修改的情况下都能成为主节点,我在配置文件中配置了一些冗余的信息,以及在每个节点都建立了相同的文件夹):
每个节点都有红框中的文件夹
<?xml version="1.0" encoding="UTF-8"?>
<tc:tc-config xmlns:tc="http://www.terracotta.org/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.terracotta.org/schema/terracotta-6.xsd">
<servers>
<server host="%i" name="localhost">
<dso-port>9510</dso-port>
<jmx-port>9520</jmx-port>
<data>/terracotta/server-data</data>
<logs>/terracotta/server-logs</logs>
<statistics>/terracotta/cluster-statistics</statistics>
</server>
</servers>
<clients>
<logs>/terracotta/client-logs</logs>
</clients>
<application>
<dso>
<instrumented-classes>
<include>
<class-expression>simpleparallel.Main</class-expression>
</include>
</instrumented-classes>
<roots>
<root>
<field-name>simpleparallel.Main.inst</field-name>
</root>
</roots>
<locks>
<autolock>
<method-expression>void simpleparallel.Main.run()</method-expression>
<lock-level>write</lock-level>
</autolock>
</locks>
</dso>
</application>
</tc:tc-config>
2、 把上面的线程的代码例子打成jar包,目录结构
3、启动tc-server
C:\terracotta-3.7.0>bin\start-tc-server.bat tc-config.xml
4、启动客户端
C:\terracotta-3.7.0>platform\bin\dso-java.bat -cp main.jar simpleparallel.Main
可见计数器已经在集群中被2个Java程序实例所共享。每个程序有两个线程访问计数器。这样整个集群中实际上有4个线程在同时累加计数器, 从上面可以看到,整个Java代码没有作任何改动。只是增加了一个tc-config.xml文件,从tc-config.xml文件中的配置内容可以看出,terracotta还是做了很多的工作的,而且已经比较完善,其实不管它是结合自己的产品ehcache、quartz进行整合,还是结合apache下的相关产品进行整合,terracotta可以整合的产品较多,因此我们也没有必要一个一个去搭建,它们的整合过程只是在配置的方式上有所不同,其实我们在深入了解它的原理后在进行其他产品的整合,其实都是一个简单的过程。
参考:http://yale.iteye.com/blog/1560539
- 大小: 186.3 KB
- 大小: 57.3 KB
- 大小: 76.8 KB
- 大小: 114.6 KB
分享到:
相关推荐
Terracotta是一种开源的分布式内存技术,它提供了一种简单有效的方式来管理和共享应用程序的数据。对于Java应用程序而言,Terracotta可以实现在多台服务器之间共享数据,尤其是Session数据,从而解决了分布式环境下...
Terracotta不仅支持简单的数据共享,还能处理复杂的事务管理和一致性问题,确保在分布式环境下的数据完整性。 **二、Terracotta的集群负载均衡** 1. **自动负载均衡**:Terracotta能够自动检测集群中的节点状态,...
Terracotta的入门教程首先引导用户通过创建配置文件和简单的Java程序(如HelloWorld.java)来熟悉其基本用法。执行这个程序后,可以初步了解Terracotta如何在内存中管理和存储数据。 ##### 基本CRUD操作 进一步...
- **定义与背景**:Terracotta是一个高性能、易于使用的分布式内存解决方案,它允许开发者轻松地创建可扩展的Java应用程序。通过在多个JVM之间共享内存,Terracotta可以显著提升应用程序的性能和可伸缩性。 - **应用...
- **负载均衡与灾难恢复**:使用 Terracotta 进行 session 共享不仅可以实现负载均衡,还能提高系统的容错性和灾难恢复能力。即使单个节点出现故障,由于数据的冗余存储,整体服务不会中断。 #### 二、Tomcat 集群...
例如,你可以创建一个简单的 JSP 页面,记录访问次数和当前服务器信息,然后通过多次请求观察请求被分发到哪个服务器,以及会话数据是否正确地在集群内同步。 总之,Apache 2.2、mod_JK、Tomcat 7 和 Terracotta ...
Ehcache 集群通过使用 Terracotta 服务器作为集群管理器,实现了跨节点的数据同步。当一个节点上的缓存数据发生变化时,这些更改会立即传播到其他节点,确保了数据的一致性。这种模式特别适合于高并发、大数据量的...
4. **Terracotta_Quartz_User_Guide.pdf**:对于使用 Terracotta 进行集群部署的用户,这份指南提供了有关在 Terracotta 集群环境中使用 Quartz 的信息。Terracotta 提供了分布式内存管理和故障恢复功能,使得 ...
优点:简单,不需要对 Session 做任何处理。 缺点:缺乏容错性,如果当前访问的服务器发生故障,用户被转移到第二个服务器上时,他的 Session 信息都将失效。 实现方式:可以使用 Nginx 的 upstream 模块配置 ip_...
例如,如果在多节点环境中,可能需要使用分布式Ehcache,如Terracotta服务器,来确保缓存的一致性。 总结来说,Spring MVC和Ehcache的结合使用可以大大提高Web应用的性能,减少了数据库访问的次数,尤其是在高并发...
通过这些示例,我们可以学习如何设置Ehcache的分布式特性,例如使用Terracotta服务器进行集群缓存,以及如何处理分布式环境下的缓存一致性问题。 总结来说,Ehcache的监控涉及了多个方面,包括但不限于使用JMX、Web...
您可以使用以下方法从官方存储库中简单地获取图像: docker.io pull izissise/terraria建造docker-terraria 运行此命令将为您构建具有最新版本的docker-terraria和TShock本身的docker映像。 git clone ...
Ehcache的设计理念是“快速而简单”,它提供了多种缓存策略和持久化选项,使得开发者能够在不同的应用场景下灵活选择最合适的缓存机制。 #### Ehcache的优点: 1. **高性能与低延迟**:Ehcache采用高效的内存管理...
这需要使用Terracotta服务器,通过`<terracottaConfig>`元素在ehcache.xml中配置连接信息。分布式缓存可以提供高可用性和故障转移,确保在节点故障时缓存数据不会丢失。 总的来说,Ehcache提供了一个强大且灵活的...
使用maven,构建Terracotta BigMemory 3.7.5的依赖项并将其复制到目标文件夹中$>mvn clean compile package dependency:copy-dependencies -P3.7.52.将BigMemory 4.3.0的依赖项也复制到目标文件夹中$>mvn package -P...
Ehcache是一种广泛使用的Java缓存解决方案,它为应用程序提供了高效的内存管理和数据缓存功能,从而显著提升性能并减少数据库负载。在本文中,我们将深入探讨Ehcache缓存的基本概念、配置以及如何在实际项目中通过...
3. ** Terracotta服务器集成**:Ehcache 3可以与Terracotta服务器结合使用,实现分布式缓存,让数据在多节点间共享。 4. **Key和Value的序列化**:Ehcache支持多种序列化策略,包括Java内置的序列化、Kryo和FST,这...
### 集群中几种session同步解决方案的比较 在分布式系统和集群环境...而对于大型分布式系统,则更适合使用Terracotta等高级解决方案。理解这些技术的特点和差异,有助于更好地设计和实现集群环境下的session管理策略。
- 与Guava Cache对比:Guava Cache是Google提供的轻量级缓存,适用于简单场景,而EhCache功能更强大,更适合大型企业应用。 7. 性能优化: - 使用内存管理策略:例如设置内存池、调整缓存大小以优化内存使用。 -...
它提供了一个简单易用的API,可以在Java应用程序中快速集成和使用。Ehcache的主要特点包括: 1. 高性能:Ehcache使用内存作为主要存储,访问速度快。 2. 可配置性:可以设置缓存策略,如大小限制、过期时间等。 3. ...