前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hazelcast初探

hazelcast初探

作者头像
lyb-geek
发布2018-09-27 09:53:36
2.2K0
发布2018-09-27 09:53:36
举报
文章被收录于专栏:Linyb极客之路Linyb极客之路

Hazelcast作为一个高度可扩展的数据分发和集群平台,提供了高效的、可扩展的分布式数据存储、数据缓存。Hazelcast是开源的,在分布式技术方面,Hazelcast提供了十分友好的接口供开发者选择,如Map,Queue,ExecutorService, Lock和Jcache。 Hazelcast的稳定性很高,分布式应用可以使用Hazelcast进行存储数据、同步数据、发布订阅消息等。Hazelcast是基于Java开发的,其客户端有Java, C/C++, .NET以及REST。Hazelcast同时也支持memcache协议。它很好的支持了Hibernate,可以很容易的在当今流行的数据库系统中应用。 如果你在寻找一个基于内存的、可扩展的以及对开发者友好的NoSql,那么Hazelcast是一个很不错的选择!

Hazelcast是一个高度可扩展的数据分发和集群平台。特性包括:

  • 提供java.util.{Queue, Set, List, Map}分布式实现。
  • 提供java.util.concurrency.locks.Lock分布式实现。
  • 提供java.util.concurrent.ExecutorService分布式实现。
  • 提供用于一对多关系的分布式MultiMap。
  • 提供用于发布/订阅的分布式Topic(主题)。
  • 通过JCA与J2EE容器集成和事务支持。
  • 提供用于安全集群的Socket层加密。
  • 支持同步和异步持久化。
  • 为Hibernate提供二级缓存Provider 。
  • 通过JMX监控和管理集群。
  • 支持动态HTTP Session集群。
  • 利用备份实现动态分割。
  • 支持动态故障恢复。

1.优点

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的数据会在多个节点上进行备份。一旦一个节点失败了,数据将会从别的节点上进行恢复。

f. Hazelcast页面元素齐全

页面可以看到map,list等数据内容,以及一些容量的仪表图.可以看到很多有用的数据,包括每个Map的请求次数等.

2. 使用场景 分布式缓存,通常使用在数据库之前的那一层 缓存服务器 NoSql的数据存储 Spring cache 微服务的结构 储存临时数据,如web的session等 3. Hazelcast的数据拆分 Hazelcast的数据拆分叫做间隔(Partitions)。默认情况下,Hazelcast会将数据拆分成271个间隔(总数,并不是单个单点)。当传入一个key时,Hazelcast会对它进行序列化,以及进行hash的算法等算出一个数值,通过该数值它存放在相应的间隔中(271个的其中一个)。在不同的节点中存放相同数量的间隔。Hazelcast还会生成备份的间隔,同样也是存放在这些间隔中。

4.配置

hazelcast找寻配置文件的规则:

a.当一个hazelcast 节点启动的时候,它会先找寻hazelcast.config 系统属性。如果这个属性有被设置的话,那么hazelcast将会按照该属性的设置去找寻配置文件。

代码语言:javascript
复制
- Dhazelcast.config=<path to the hazelcast.xml>

b.如果找不到属性,那么hazelcast会在当前工作目录中找寻hazelcast.xml

c.如果在工作目录中找不到,会在class path寻找hazelcast.xml

d.如果还是找不到,hazelcast会加载默认的配置文件。hazlelcast.jar包中的hazelcast-default.xml

如果您想指定自己的配置文件来创建配置的话,Hazelcast提供了几种方式来供您选择,包括-filesystem,classpath,InputStream,URL等等

代码语言:javascript
复制
Config cfg = new XmlConfigBuilder(xmlFileName).build();

   Config cfg = new XmlConfigBuilder(inputStream).build();

   Config cfg = new ClasspathXmlConfig(xmlFileName);

   Config cfg = new FileSystemXmlConfig(configFilename);

   Config cfg = new UrlXmlConfig(url);

   Config cfg = new InMemoryXmlConfig(xml);

可编程配置

根据您的需求,初始化Config对象设置/修改属性,完成编程式的配置Hazelcast。

代码语言:javascript
复制
Config config =new Config();

    config.getNetworkConfig().setPort(5900 );

    config.getNetworkConfig().setPortAutoIncrement(false );

NetworkConfig network = config.getNetworkConfig();

JoinConfig join = network.getJoin();

join.getMulticastConfig().setEnabled( false );

join.getTcpIpConfig().addMember( "10.45.67.32").addMember( "10.45.67.100" ) .setRequiredMember("192.168.10.100" ).setEnabled( true );

network.getInterfaces().setEnabled( true ).addInterface("10.45.67.*" );



MapConfig mapConfig = new MapConfig();

mapConfig.setName( "testMap" );

mapConfig.setBackupCount( 2 );

mapConfig.getMaxSizeConfig().setSize( 10000 );

mapConfig.setTimeToLiveSeconds( 300 );



MapStoreConfig mapStoreConfig = new MapStoreConfig();

mapStoreConfig.setClassName("com.hazelcast.examples.DummyStore" )

    .setEnabled(true );

mapConfig.setMapStoreConfig( mapStoreConfig );



NearCacheConfig nearCacheConfig = new NearCacheConfig();

nearCacheConfig.setMaxSize( 1000 ).setMaxIdleSeconds( 120)

   .setTimeToLiveSeconds( 300 );

mapConfig.setNearCacheConfig( nearCacheConfig );



config.addMapConfig( mapConfig );

然后创建Config对象,你就可以用这个对象来创建Hazelcast实例。

1、HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance( config ); 2、创建一个名为HazelcastInstance对象,将config对象传给它。

代码语言:javascript
复制
Config config = new Config();

config.setInstanceName( "my-instance" );

Hazelcast.newHazelcastInstance( config );

用它的名字来取得一个已经存在的HazelcastInstance;

代码语言:javascript
复制
Hazelcast.getHazelcastInstanceByName("my-instance" );

用它的名字来取得所有已经存在的HazelcastInstance;

代码语言:javascript
复制
Hazelcast.getAllHazelcastInstances();
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档