Hazelcast 是面向 Java 的缓存、集群及数据分发解决方案。最近,它的 2.0 版本发布了。作为新版本的一部分,该产品提供了商用企业版和免费的开源社区版。
其中,社区版在 Apache 许可 2.0 下发布,并托管于 Google Code 中。2.0 版本包含了一个分布式备份功能,用以确保每个结点都能均匀地被所有其他结点备份。Hazelcast 创始人 Talip Ozturk 告诉 InfoQ 说,“我相信我们的备份分发是一个全新的解决方案”。
采用分布式数据备份,结点在丢失时仅会对集群造成很小的影响。这点在内存中有大数据时尤为重要。
Hazelcast 解决方案的工作原理是将差不多大小的数据分布到集群中的每个结点上。例如,在一个 50 个结点的结点集群中,每个结点存储 20GB 的基本数据以及 20GB 的备份数据。结点 1 数据会分成 1/49 大小的若干份,并由剩余 49 个结点中的每一个进行备份。如果结点 1 下线,那么任何迁移都不用就可以让集群保持均衡。随着新节点加入到系统中,Hazelcast 会慢慢地将数据迁移到新结点来让所有结点上的数据保持均衡。
新版 2.0 中的其他特性包括:
- 并行 IO,它将对内(In)和对外(Out)通信联合到单个线程中(在 1.0 版本中,每个成员会拥有对内和对外线程各一个,用作处理与其他使用 NIO 信道的成员进行通信)。
- 改善连接管理,Hazelcast 在破损连接被宣布死亡之前会尝试进行修复。
- 为 Queue、List、Set 和 Topic 提供新的事件容器。
另外,企业版增加了堆外(off-heap)存储(注:Hazelcast 中将其称作弹性内存(Elastic Memory))、附加的安全能力和一个原生的 C#客户端。
出于安全考虑,该产品包含了一份基于 JAAS 的实现,用作验证集群成员及客户端,并对客户端操作进行访问控制检查。访问控制可根据终端点委托或代码进行管理,而安全性可以通过使用 XML 或 API 启用和配置。
弹性内存本质上是一种解决过长 GC 中断时间(pause time)的变通方案。 Azul 推出的 C4 收集器是一个例外,它消除了所有的 GC 中断。借助它,商业 JVM 中的垃圾收集中断时间会随内置堆的大小明显增长。弹性内存可以减少 JVM 堆的大小,从而降低垃圾收集的中断时间。关于这点,Ozturk 给出了一个大致的建议:
如果你的每个 JVM 都拥有 10GB 以上的数据,或者有超过 1KB 的值对,那么可以使用弹性内存。而如果你的每个 JVM 数据在 4GB 左右,或者少于 a KB,那么我们不建议使用弹性内存。
Hazelcast 的弹性内存采用直接字节缓存区(direct byte buffer)实现,其中每个缓存区分为若干块,每块默认大小为 1KB。这个特性类似于 Oracle 的 Coherence 、Terracotta 的 Ehcache 以及一些其他提供商的缓冲方案。
企业版许可模型基于每个订阅和结点,相关价格信息可通过 sales@hazelcast.com 查询。另外,Hazelcast 还为社区版提供了两个不同级别的支持,参考价格公布在了他们的网站上。
查看英文原文: Hazelcast 2.0 Released with Off-Heap Storage and Distributed Backups
评论