分布式缓存组件Hazelcast

Hazelcast是一个Java的开源分布式内存实现,它具有以下特性:

  1. 提供java.util.{Queue, Set, List, Map}的分布式实现
  2. 提供java.util.concurrent.ExecutorService的分布式实现
  3. 提供java.util.concurrency.locks.Lock的分布式实现
  4. 提供用于发布/订阅的分布式Topic(主题)
  5. 通过JCA与J2EE容器集成和事务支持
  6. 提供用于一对多关系的分布式MultiMap
  7. 提供分布式事件和监听器的实现
  8. 提供集群应用和集群成员机制
  9. 支持动态HTTP Session集群
  10. 通过JMX监控和管理集群
  11. 为Hibernate提供二级缓存Provider
  12. 提供动态集群机制
  13. 提供动态分区和备份机制
  14. 支持动态故障恢复
  15. 简单通过jar包集成
  16. 运行速度快.
  17. 体积小

Hazelcast体系结构图

hazelcast拓扑

hazelcast拓扑结构可用于分布式集群。支持两种操作模式。采用”嵌入成员”模式时,含有应用代码的JVM直接加入Hazelcast群集,采用”客户端外加成员”模式时,备用JVM(可能在相同或不同的主机上)负责加入Hazelcast群集。这两种拓扑方法如下图所示:

嵌入模式:

客户端外加成员模式:

在多数情况下,可以采用客户端外加成员拓扑方法,因为就群集机制而言,它提供更大弹性 - 成员 JVM 可被拆卸和重新启动,不会对整体应用程序产生任何影响,因为 Hazelcast 客户端将只需重新连接到群集的另一个成员。另一种说法是客户端外加成员拓扑方法能够隔离纯粹群集级别事件的应用代码。

Hazelcast数据分区

Hazelcast中的数据分片被叫做partition。默认情况下,Hazelcast有271个partition。用一个数据的key,可以采用序列化哈希的算法将数据映射到具体的分区上面。分区会均匀分布在集群member的内存中。并且有多个副本保证高可用。

下面演示节点增加分区分布的情况:

单个节点:

单仅启动一个节点的时候,该节点为master,且有默认的271个分区。

两个节点

启动第二个节点,第二个节点会加入第一个节点创建的集群中。第一个节点中的分区会重新分配,均匀分布在集群中。且集群中每个成员的数据分片都有一个副本。

加入更多节点

当加入更多节点的时候,原来节点中的数据分片会重新分布到新加入的节点上面,保证集群中数据分片的均匀分布。且同样会备份数据。下面是4个节点集群的数据分片分布:

分区算法

Hazelcast数据分片采用哈希算法。当给以一个map的key或是一个分布式对象的名称,会首先将key或对象名称进行序列化,转成byte array的形式,然后将byte array 进行哈希,将哈希结果对分区数求模得到分片ID。

分区表

分区表在第一个节点创建的时候就会生成。分区表是存储分区和节点的对应关系。作用在于让集群中的每个节点都可以知道分区和数据的信息。第一个启动的节点会将这个分区表周期性地发送给集群中的其他节点。这样,当集群中新增节点或是删除节点的时候,集群中的每个节点都可以拿到最新的分区信息。如果第一个节点(master)失败了,集群会选出新的master(第二个启动的节点),再由新的master将分区表发送给集群中的节点。发送的时间周期可以设置the hazelcast.partition.table.send.interval 系统属性,默认是15s.

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:

时间: 2024-11-10 07:40:52

分布式缓存组件Hazelcast的相关文章

原创:.NET版分布式缓存Memcached测试实例

下面测试下分布式缓存Memcached软件,一直在学习关注大访问量网站的缓存是如何实现,之前看过Memcached的资料,忙于没有时间来真正测试一下,本文测试分布式缓存Memcached的环境如下:(两台电脑作为服务器) 第一台: CPU:Inter(R) Pentium(R) 4 CPU 2.8G 内存:1G 系统:windows 7 IIS: IIS 7 IP:172.10.1.97 环境:本地 安装:memcached 1.2.1 for Win32 第二台: CPU:Inter(R) P

浅谈分布式缓存那些事儿(转)

在前面的一些文章中,从实战的角度,讲解了有关 memcached的应用.容灾.监控等等.但是缺乏对理论的讲解和原理性的剖析.本文将从理论的角度去介绍,让大家从宏观上对"分布式缓存.nosql"等技术有所了解,以便进一步学习和使用.在构建大规模的web应用时,缓存技术可以说是必备的,学习的必要性不言而喻. 分布式缓存概述 1.1 分布式缓存的特性 分布式缓存具有如下特性:  1) 高性能:当传统数据库面临大规模数据访问时,磁盘I/O 往往成为性能瓶颈,从而导致过高的响应延迟.分布式缓存将

谈谈分布式缓存那些事儿

在前面的一些文章中,从实战的角度,讲解了有关 memcached的应用.容灾.监控等等.但是缺乏对理论的讲解和原理性的剖析.本文将从理论的角度去介绍,让大家从宏观上对"分布式缓存.nosql"等技术有所了解,以便进一步学习和使用.在构建大规模的web应用时,缓存技术可以说是必备的,学习的必要性不言而喻. 分布式缓存概述 1.1 分布式缓存的特性 分布式缓存具有如下特性: 1) 高性能:当传统数据库面临大规模数据访问时,磁盘I/O 往往成为性能瓶颈,从而导致过高的响应延迟.分布式缓存将高

php5.4之分布式缓存memcache(windows7下安装配置)

一.安装memcache memcached在windows7上的安装问题 现在安装包:http://www.jb51.net/softs/44843.html memcache的安装包 错误: 通过cmd命令行进入到D:\webEve\memcached(下载后的解压目录) 运行 memcached.exe -d install 报错" failed to install service or service already installed" 解决方法: www.2cto.com

C#及.NET中跳出一致性Hash算法并打造更高效的分布式缓存

背景 谈到分布式缓存,大家首先想到的是memcached.确实memcached是目前最流行的方案之一.不过很多互联网公司不用memcached,例如新蛋.为什么不选择memcached呢,命中率?热插拔?还是性能.这里先不放结论,用事实来说话. 算法篇 -1.除余法 如果你手上有老版本的memcache官方文档.你会发现他们用的是除余法来保持节点的一致性.假如你有N台缓存服务器,你需要将某个对象set进某一台节点上.用hash取模这样可以很均匀的保证每台的负载.那么,作为最基本的轮询算法,是否

分布式缓存HttpRuntime.cache应用到单点登陆中_优化登陆

以前的设计方案,是我们在数据库中放一个表,用作存储验证登陆成功的用户,并且生成用户TOKEN(令牌) 分布式缓存+集群的解决方案图:

关于.Net开发下的分布式缓存设计

最近拜读了代振军同学写的关于.net开发下的Discuz!NT的缓存设计的一篇文 章Discuz!NT 缓存设计简析 [原创],颇有些想法,姑且写在这里让大家拍砖吧 .;) 缓存真是个好东西,在大型的系统中可以有效地提升系统的速度,此乃废话 就不多说了,在.Net 平台下面我把缓存从功用大致分为两类,数据对象缓存和 页面输出缓存. 对于数据缓存来讲是由System.Web.Caching.Cache这个类来实现 ,可以从上下文对象Context.Cache 来获取这个对象的引用.而页面/控件输出

由"缓存"到"Memcached分布式缓存"

[学习背景] 在ITOO4.0的时候,自己听了师哥师姐的技术分享,从那开始,Memcached 就留在脑海中了.现在,我们开始了ITOO4.1,在师父的指导下,开始缓存的学习.自然地,我第一时刻想到的便是Memcached. [学习阶梯] 在正是进入Memcached之前,自己先了解了些关于"缓存"的知识. 一.什么是缓存 用来暂时存储数据,避免频繁连接数据库或磁盘文件.一般来说,缓存比数据库或磁盘容量更小,但存取速度快. 二.缓存的作用 存储频繁访问的数据:临时存储耗时的计算结果:内

IIS 7如何搭配ARR及分布式缓存技术Velocity

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   本帖是研讨会中的一些杂记,搭配一些官方的文档,经整合归纳后,介绍 IIS 7 如何搭配新一代的 ARR (Application Request Routing),建置 Server Farm 并达到比过去 NLB 更优的 Load Balancing 功能,此外还介绍微软新一代的分布式缓存技术 Velocity. 过去及目前 Windows Server 中的