Hazelcast 是一个开源的可嵌入式数据网格(社区版免费,企业版收费)。你可以把它看做是内存数据库,不过它与 Redis 等内存数据库又有些不同。项目地址:http://hazelcast.org/

Hazelcast 使得 Java 程序员更容易开发分布式计算系统,提供了很多 Java 接口的分布式实现,如:Map, Queue, ExecutorService, Lock, 以及 JCache。它以一个 JAR 包的形式提供服务,只依赖于 Java,并且提供 Java, C/C++, .NET 以及 REST 客户端,因此十分容易使用。

  1 import com.hazelcast.config.Config;
  2 import com.hazelcast.core.Hazelcast;
  3 import com.hazelcast.core.HazelcastInstance;
  4
  5 import java.util.concurrent.ConcurrentMap;
  6
  7 public class DistributedMap {
  8     public static void main(String[] args) {
  9         Config config = new Config();
 10         HazelcastInstance h = Hazelcast.newHazelcastInstance(config);
 11         ConcurrentMap<String, String> map = h.getMap("my-distributed-map");
 12         map.put("key", "value");
 13         map.get("key");
 14
 15         //Concurrent Map methods
 16         map.putIfAbsent("somekey", "somevalue");
 17         map.replace("key", "value", "newvalue");
 18     }
 19 }
 20 

如何存储数据

Hazelcast 服务之间是端对端的,没有主从之分,因此也不存在单点故障。集群中所有的节点都存储等量的数据以及进行等量的计算。

Hazelcast 缺省情况下把数据分为 271 个区。这个值可配置于系统属性 hazelcast.partition.count。 对于一个给定的键,在经过序列号、哈希并对分区总数取模之后能得到此键对应的分区号。所有的分区等量的分布与集群中所有的节点中,每个分区对应的备份也同样分布在集群中。

下例是拥有2个节点的 Hazelcast 集群:

黑色字体表示分区,蓝色字体表示备份。节点1存储了1到135分区,这些分区同时备份在节点2中。节点2存储了136到271分区,并备份在节点1中。

此时如果添加2个节点到集群中,Hazelcast 一个一个的移动分区和备份到新的节点,使得集群数据分布平衡。

注意实际中分区并不是有顺序的分布,而是随机分布,上面的示例只是为了方便理解。重要的是理解 Hazelcast 平均分布分区以及备份。

Hazelcast 使用哈希算法进行数据分区。对于一个给定的键(如Map)或者对象名称(如topic和list):

  • 序列化此键或对象名称,得到一个byte数组。
  • 对byte数组进行哈希。
  • 取模后的值即为分区号。

每个节点维护一个分区表,存储着分区号与节点之间的对应关系。这样每个节点都知道如何获取数据。

重分区

集群中最老的节点(或者说最先启动)负责定时发送分区表到其他节点。这样如果有节点加入或者离开集群,所有的节点也能更新分区表。

 注意: 如果最老的节点挂了,次老节点会接手这个任务。

这个定时任务时间间隔可配置系统属性 hazelcast.partition.table.send.interval。 缺省值为15秒。

重分区发生在:

  • 节点加入集群。
  • 节点离开集群。

此时最老节点会更新分区表,分发,接着集群开始移动分区,或者从备份恢复分区。

使用方式

有两种方式:嵌入式和客户端服务器。

  • 嵌入式,Hazelcast 服务器的 jar 包被导入宿主应用程序,服务器启动并存在于各个宿主应用中。优点是可以更低延迟的数据访问。

  • 客户端服务器,Hazelcast 客户端的 jar 包被导入宿主应用程序,服务器 jar 包独立运行于 JVM 中。优点是更容易调试以及更可靠的性能,最重要的是更好的扩展性。

转载于:https://www.cnblogs.com/seasonsluo/p/hazelcast-intro.html

Hazelcast介绍与使用相关推荐

  1. Hazelcast 介绍与使用(整理)

    要用到 Hazelcast 这个东西用作分布式缓存, 网上搜索了下发现这篇文章对我理解 Hazelcast 那种无主从之分, 避免了单点故障很有帮助, Hazelcast 的数据分布方式很有点像磁盘阵 ...

  2. Hazelcast介绍

    Hazelcast介绍 什么时侯需要 用例 内存中分布式计算 场景 分布式消息 特性 全景 Distributed Maps 一个结点中分区 Hazelcast中的分片也称为分区,Hazelcast默 ...

  3. 初探HazelCast IMDG内存数据网格-简介

    初探HazelCast IMDG内存数据网格-简介 文章目录 初探HazelCast IMDG内存数据网格-简介 一.内存数据网格(In Memory Data Grid) 1.1 IMDG特点 1. ...

  4. Hazelcast集群服务(4)——分布式Map

    在第一篇介绍Hazelcast的文章已经提到,Hazelcast为Java中绝大部分数据结构提供了分布式实现.我们常用的Map.List.Queue等数据结构可以用Hazelcast的实现类在多个集群 ...

  5. Hazelcast集群服务(2)

    为什么80%的码农都做不了架构师?>>>    XML基本配置 如果用户没有指定或提供任何配置文件,Hazelcast默认会使用jar包中自带的配置文件--"hazelca ...

  6. Hazelcast集群服务(2)——Hazelcast基本配置

    为什么80%的码农都做不了架构师?>>>    在入门及使用案例一文介绍了什么是Hazelcast,并展示了一个简单的使用例子.原理大家都懂了,后面的篇章会给兄弟们更多干货. 本篇博 ...

  7. openhub_介绍OpenHub框架

    openhub 本文介绍OpenHub框架 -基于Apache Camel的新的开源集成解决方案. 本文回答了一些问题,为什么您应该关心另一个集成框架,强弱属性以及如何使用OpenHub启动新项目. ...

  8. hazelcast集群配置_使用HazelCast进行Hibernate缓存:基本配置

    hazelcast集群配置 之前,我们对JPA缓存,机制以及hibernate提供的内容进行了介绍 . 接下来是一个使用Hazelcast作为二级缓存的Hibernate项目. 为此,我们将在JPA中 ...

  9. hazelcast 使用_使用Hazelcast发布和订阅

    hazelcast 使用 几周前,我写了一篇有关Hazelcast入门的博客,描述了创建分布式地图,列表和队列是多么简单. 当时我提到,Hazelcast还做很多其他事情. 该博客快速介绍了Hazel ...

最新文章

  1. Vue引入百度地图,如何去掉左下角的版权logo百度等信息?
  2. 独家|让你的GPU为深度学习做好准备(附代码)
  3. Adobe Creative Suite CS4/CS5 全系列注册机
  4. C# 9 Lambda 小幅升级
  5. leetcode690. 员工的重要性(bfs)
  6. Asp.Net 4.0 SEO增强之UrlRouting
  7. mysql 裸设备_什么叫做裸设备
  8. linux轻量级进程,linux轻量级进程LWP
  9. VCT空间数据交换格式数据的检测方法研究
  10. 软件测试---性能测试
  11. 机器视觉-工业相机篇
  12. pytorch 复现 FCN模型详细代码教程
  13. django项目环境搭建
  14. 定点补码运算c语言,单选(3分) 下列关于补码定点运算的描述中,错误的是( )...
  15. 盖茨:原本想等孩子进入大学后 与保罗·艾伦共度更多时光
  16. HTML5 Plus 移动 App开发入门
  17. Web容器(一):Web容器简介
  18. geotools 创建表自定义主键
  19. 微信小程序《仿支付宝首页应用管理》
  20. Javassist 使用指南

热门文章

  1. python如何做散点图-【Python】使用scatter()绘制散点图
  2. python中文昵称-官方出品 Python 中文文档!拜托,别再说看不懂了
  3. python怎么画简单图片-初学Python-简单的在图片上加文字
  4. python代码基础题-Python初学者福利 完整试题附答案 干货(收藏篇)
  5. 32位python-64位Python调用32位DLL方法(一)
  6. python生成excel表格-Python生成excel表格并设置样式
  7. python3.6.4安装教程-centos7中安装python3.6.4的教程
  8. python电脑配置要求cpu-python指定cpu使用率,与内存占用率
  9. python软件代码示例-Python学习示例源码
  10. python有道翻译接口-【Python】Python利用有道翻译开发API应用示例