欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Hazelcast分布式

程序员文章站 2022-03-26 22:57:06
一般的应用正式环境中都不止一台服务器(也就是说是集群的),那么如果只是简单的将数据预加载到内存,那么就会有数据不同步的现象。 (更新了其中一台JVM,另一台JVM并不会收到通知从而保持数据同步)。 这时候就需要用到cache server了。 目前流行的cache server有很多种,像redis ......

一般的应用正式环境中都不止一台服务器(也就是说是集群的),那么如果只是简单的将数据预加载到内存,那么就会有数据不同步的现象。

(更新了其中一台JVM,另一台JVM并不会收到通知从而保持数据同步)。

这时候就需要用到cache server了。 
目前流行的cache server有很多种,像redis,Hazelcast,ehcache,memcache等。

 

如果你在寻找一个基于内存的、可扩展的以及对开发者友好的NoSql,那么Hazelcast是一个很不错的选择! 

它具有的特点如下:

a. Hazelcast开发比较简单 
Hazelcast是基于Java写的,没有任何其它的以来。它提供的API跟Java util包很像。对于开发者来说,只需要加入hazelcast.jar,然后就可以快速使用在多个JVM之间的数据共享(分布式)。 

b. Hazelcast的节点之间是平等的(Peer-to-Peer) 
不像其它很多的NoSql解决方案,Hazelcast的节点之间是对等的(没有主次之分)。所有的节点存储的数据都是相等的,在应用中可以很容易的增加一个Hazelcast节点。或者以客户端-服务端的形式使用。 

c. Hazelcast是可扩展的 
Hazelcast的扩展性非常强,可以很简单的增加或减少节点。可以自动的监听节点的增加,并以线性的方式增加存储空间和能力。节点之间的通信是以TCP的方式建立的。 

d. Hazelcast效率很高。 
将数据存储在内存中,所以是非常高效的,包括读操作和写操作。 

e. Hazelcast是可备份的 
Hazelcast的数据会在多个节点上进行备份。一旦一个节点失败了,数据将会从别的节点上进行恢复。 

 


 基于局域网的集群:

“分布式”、“集群服务”、“网格式内存数据”、“分布式缓存“、“弹性可伸缩服务”——这些牛逼闪闪的名词拿到哪都是ITer装逼的不二之选。在Javaer的世界,有这样一个开源项目,只需要引入一个jar包、只需简单的配置和编码即可实现以上高端技能,他就是 Hazelcast

 

/**
* 客户端节点
* @author
*/
public class ClientNode {
public static void main(String[] args) {
// 获取Hazelcast实例
Config config = new Config();
config.getGroupConfig().setName("drf");
HazelcastInstance ins = Hazelcast.newHazelcastInstance(config);

// 从集群中读取Map实例
Map<Integer, String> map = ins.getMap("default map");

// 输出map中数据
map.forEach((k,v)->{
System.out.println("Pos:" + k + ". name:" + v);
});
}
}

 

/**
* 服务节点
* @author 
*/
public class ServiceNode {
public static void main(String[] args) {
// 获取Hazelcast实例
Config config = new Config();
config.getGroupConfig().setName("drf");
HazelcastInstance ins = Hazelcast.newHazelcastInstance(config);

// 从集群中读取Map实例
Map<Integer, String> map = ins.getMap("default map");

// 向集群中添加数据
System.out.println("Begin insert data");
map.put(1, "Cait Cassiopeia");
map.put(2, "Annie");
map.put(3, "Evelynn");
map.put(4, "Ashe");
System.out.println("End");

}
}

 

通过config.getGroupConfig().setName("drf"); 设置分组来区*域网的不需要的集群;