Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展、高性能的分布式内存计算。并通过提供诸如Map,Queue,ExecutorService,Lock和JCache等Java的许多开发人员友好的分布式实现。
了解Hazelcast
Hazelcast特性
简单易用
Hazelcast是用Java编写的,没有其他依赖关系。只需简单的把jar包引入项目的classpath即可创建集群。
无主从模式
与许多NoSQL解决方案不同,Hazelcast节点是点对点的。没有主从关系; 所有成员都存储相同数量的数据,并进行相等的处理,避免了单点故障。
弹性可扩展
Hazelcast旨在扩展成千上万的成员。新成员启动,将自动发现群集,并线性增加存储和处理能力。成员之间通过TCP保持连接和通讯。
读写快速高效
Hazelcast所有数据都存储在内存中,提供基于内存快速高效的读写能力。
Hazelcast部署拓扑
在Hazelcast官方提供两种方式部署集群(图片均来自官方文档):
如需聚焦异步或高性能大批量任务的缓存服务,嵌入式方式是相对有优势的,最明显嵌入式方式访问数据延迟性低。
独立创建Hazelcast集群,统一管理,所有的应用程序如果需要访问缓存,可通过Hazelcast客户端(有java .NET C++的实现)或Memcache客户端或简单的REST客户端访问。后续demo示例以嵌入式为例。
Hazelcast数据分区
在Hazelcast分布式环境中,默认情况下,Hazelcast有271个分区。
当启动第一个成员的时候,成员1在集群中的分区如下图:
当在集群中新添加一个节点2时,分区图如下:
在图示中,黑色分区是主分区,蓝色分区是副本分区(备份)。第一个成员具有135个主分区(黑色),并且每个分区都备份在第二个成员(蓝色)中。同时,第一个成员还具有第二个成员的主分区的副本分区。
随着成员的增多,Hazelcast将一些主要和副本分区逐个移动到新成员,使所有成员相等和冗余。只有最小量的分区将被移动到扩展Hazelcast。以下是具有四个成员的Hazelcast集群中的分区图示如下:
Hazelcast在群集成员之间平均分配分区。Hazelcast创建分区的备份,并将其分配给成员之间进行冗余。
上述插图中的分区是为了方便描述。通常,Hazelcast分区不会按照顺序分配(如这些图所示),而是随机分布。Hazelcast在成员间平均分配了分区和备份。
Hazelcast优势
Hazelcast提供开源版本。
Hazelcast无需安装,只是个极小jar包。
Hazelcast提供开箱即用的分布式数据结构,如Map,Queue,MultiMap,Topic,Lock和Executor。
Hazelcast集群非传统主从关系,避免了单点故障;集群中所有成员共同分担集群功能。
Hazelcast集群提供弹性扩展,新成员在内存不足或负载过高时能动态加入集群。
Hazelcast集群中成员分担数据缓存的同时互相冗余备份其他成员数据,防止某成员离线后数据丢失。
Hazelcast提供SPI接口支持用户自定义分布式数据结构。
Hazelcast适用场景
频繁读写数据
需要高可用分布式缓存
内存行NoSql存储
分布式环境中弹性扩展
下面我们来使用Spring … 阅读全文
一。 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集群。
- 利用备份实现动态分割。
- 支持动态故障恢复。

示例代码:
import com.hazelcast.config.Config;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import java.util.concurrent.ConcurrentMap;
public class DistributedMap {
public static void main(String[] args)
…
阅读全文
自从2009年初始发布以来,Redis受到了巨大的欢迎并且成为拥有大型社区的部署数据存储平台之一。
虽然Radis有很令人难忘的特性,但是它也有一个严重的限制–它是为了单机模式设计的。如果用户需要超过单机的能力,就需要使用专用分区系统。不过3.0.0版本发布了一种集群系统产品,可以从根本上简化分布式Redis部署。
所有人都认可Radis很快,我们来看看Hazelcast和Redis的比较。这份报告是为了观察Redis集群方案(v3.0.7)对比Hazelcast(v3.6.1)的表现, 特别是在重负荷的情况下。
为了确保我们在比较Hazelcast和Redis时候拥有稳定的环境,我们选择使用我们通常用于测试Hazelcast性能改进的室内测试实验室。
实验室配置
测试在由HP ProLiant DL380系列服务器构成的集群上进行。每一台机器配置有双socket Xeon E5-2687W v3@3.10Ghz, 每个CPU10核,超线程可用(一共有20个物理的,40个虚拟核),并且还有768G 2133Mhz的内存(24X32GB 模块)。在操作系统方面,我们使用简单的RHEL7安装,这表示在测量中不会使用虚拟软件。每台机器使用一个40 GbE SolarFlare 网卡(Sloarflare SFN7142Q Dual Port 40 GbE)来做点对点的通信。
为了执行Redis 测试,我们决定小痾怒责Jedis做客户端,因为它很流行(在github上有3481个星)并且对集群模式有非常好的支持度。
为了排除其他影响,我们决定雇佣Infinispan开发社区创建的第三方测量工具RadarGun。因为RadarGun不提供直接可用的Redis支持,我们需要自己集成。感兴趣的人可以去github上获取RadarGun fork和Redis插件。
我们需要什么
作为测试场景,我们想要基于客户增长数和并发处理数据数来比较Hazelcast和Redis的表现。所有的测试都在测试环境的 4个节点集群上执行并观察,4个基本测试场景需要被执行:
脚本 客户端数 每个客户端的进程数
1 1 1
2 4 8
3
…
阅读全文
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
…
阅读全文