Hazelcast介绍与使用
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介绍与使用相关推荐
- Hazelcast 介绍与使用(整理)
要用到 Hazelcast 这个东西用作分布式缓存, 网上搜索了下发现这篇文章对我理解 Hazelcast 那种无主从之分, 避免了单点故障很有帮助, Hazelcast 的数据分布方式很有点像磁盘阵 ...
- Hazelcast介绍
Hazelcast介绍 什么时侯需要 用例 内存中分布式计算 场景 分布式消息 特性 全景 Distributed Maps 一个结点中分区 Hazelcast中的分片也称为分区,Hazelcast默 ...
- 初探HazelCast IMDG内存数据网格-简介
初探HazelCast IMDG内存数据网格-简介 文章目录 初探HazelCast IMDG内存数据网格-简介 一.内存数据网格(In Memory Data Grid) 1.1 IMDG特点 1. ...
- Hazelcast集群服务(4)——分布式Map
在第一篇介绍Hazelcast的文章已经提到,Hazelcast为Java中绝大部分数据结构提供了分布式实现.我们常用的Map.List.Queue等数据结构可以用Hazelcast的实现类在多个集群 ...
- Hazelcast集群服务(2)
为什么80%的码农都做不了架构师?>>> XML基本配置 如果用户没有指定或提供任何配置文件,Hazelcast默认会使用jar包中自带的配置文件--"hazelca ...
- Hazelcast集群服务(2)——Hazelcast基本配置
为什么80%的码农都做不了架构师?>>> 在入门及使用案例一文介绍了什么是Hazelcast,并展示了一个简单的使用例子.原理大家都懂了,后面的篇章会给兄弟们更多干货. 本篇博 ...
- openhub_介绍OpenHub框架
openhub 本文介绍OpenHub框架 -基于Apache Camel的新的开源集成解决方案. 本文回答了一些问题,为什么您应该关心另一个集成框架,强弱属性以及如何使用OpenHub启动新项目. ...
- hazelcast集群配置_使用HazelCast进行Hibernate缓存:基本配置
hazelcast集群配置 之前,我们对JPA缓存,机制以及hibernate提供的内容进行了介绍 . 接下来是一个使用Hazelcast作为二级缓存的Hibernate项目. 为此,我们将在JPA中 ...
- hazelcast 使用_使用Hazelcast发布和订阅
hazelcast 使用 几周前,我写了一篇有关Hazelcast入门的博客,描述了创建分布式地图,列表和队列是多么简单. 当时我提到,Hazelcast还做很多其他事情. 该博客快速介绍了Hazel ...
最新文章
- Vue引入百度地图,如何去掉左下角的版权logo百度等信息?
- 独家|让你的GPU为深度学习做好准备(附代码)
- Adobe Creative Suite CS4/CS5 全系列注册机
- C# 9 Lambda 小幅升级
- leetcode690. 员工的重要性(bfs)
- Asp.Net 4.0 SEO增强之UrlRouting
- mysql 裸设备_什么叫做裸设备
- linux轻量级进程,linux轻量级进程LWP
- VCT空间数据交换格式数据的检测方法研究
- 软件测试---性能测试
- 机器视觉-工业相机篇
- pytorch 复现 FCN模型详细代码教程
- django项目环境搭建
- 定点补码运算c语言,单选(3分) 下列关于补码定点运算的描述中,错误的是( )...
- 盖茨:原本想等孩子进入大学后 与保罗·艾伦共度更多时光
- HTML5 Plus 移动 App开发入门
- Web容器(一):Web容器简介
- geotools 创建表自定义主键
- 微信小程序《仿支付宝首页应用管理》
- Javassist 使用指南
热门文章
- python如何做散点图-【Python】使用scatter()绘制散点图
- python中文昵称-官方出品 Python 中文文档!拜托,别再说看不懂了
- python怎么画简单图片-初学Python-简单的在图片上加文字
- python代码基础题-Python初学者福利 完整试题附答案 干货(收藏篇)
- 32位python-64位Python调用32位DLL方法(一)
- python生成excel表格-Python生成excel表格并设置样式
- python3.6.4安装教程-centos7中安装python3.6.4的教程
- python电脑配置要求cpu-python指定cpu使用率,与内存占用率
- python软件代码示例-Python学习示例源码
- python有道翻译接口-【Python】Python利用有道翻译开发API应用示例