`
kavy
  • 浏览: 891156 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hazelcast介绍

 
阅读更多

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

01    Distributed implementations of java.util.{Queue, Set, List, Map}
02    Distributed implementation of java.util.concurrent.ExecutorService
03    Distributed implementation of java.util.concurrency.locks.Lock
04    Distributed Topic for publish/subscribe messaging
05    Transaction support and J2EE container integration via JCA
06    Distributed listeners and events
07    Support for cluster info and membership events
08    Dynamic HTTP session clustering
09    Dynamic clustering
10    Dynamic scaling to hundreds of servers
11    Dynamic partitioning with backups
12    Dynamic fail-over
13    Super simple to use; include a single jar
14    Super fast; thousands of operations per sec.
15    Super small; less than a MB
16    Super efficient; very nice to CPU and RAM

安装也非常方便:

1    Download hazelcast-version.zip from www.hazelcast.com
2    Unzip hazelcast-version.zip file
3    Add hazelcast.jar file into your classpath

要使用分布式的Map,只需要以下代码即可实现:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import com.hazelcast.core.Hazelcast;
import java.util.Map;
import java.util.Collection;
 
Map<String, Customer> mapCustomers = Hazelcast.getMap("customers");
mapCustomers.put("1", new Customer("Joe", "Smith"));
mapCustomers.put("2", new Customer("Ali", "Selam"));
mapCustomers.put("3", new Customer("Avi", "Noyan"));
 
Collection<Customer> colCustomers = mapCustomers.values();
for (Customer customer : colCustomers) {
    // process customer
}

 

Hazelcast的官网上面有一个非常直观的视频:http://www.hazelcast.com/screencast.jsp,建议有兴趣的朋友花10分钟时间看看。

还有一份PDF可以参考:http://roma.javaday.it/javaday2010/sites/default/files/ClusteringHazelcast-javaday.pdf。

Hazelcast作为一款与ZooKeeper类似的开源实现,我在网上找了一篇相关的文章:http://blog.armstrongconsulting.com/?p=132 在这篇文章中有一段这样写道:

I had occasional hangs with Hazelcast 1.8.4 which caused me to switch to Zookeeper. As expected, Zookeeper was a lot harder to use than Hazelcast – you need Zookeeper installed on 3 servers. There’s no official java client, just some recipes and I found an implementation of Zookeeper locks called Cages on google code. For a java developer, Hazelcast is obviously way easier to use. 

另外,在Hazelcast的官方文档中,提到了Hazelcast的集群机制:

If there is no existing node, then the node will be the first member of the cluster. If multicast is enabled then it will start a multicast listener so that it can respond to incoming join requests. Otherwise it will listen for join request coming via TCP/IP.

If there is an existing cluster already, then the oldest member in the cluster will receive the join request and check if the request is for the right group. If so, the oldest member in the cluster will start the join process.

In the join process, the oldest member will:

  • send the new member list to all members

  • tell members to sync data in order to balance the data load

Every member in the cluster has the same member list in the same order. First member is the oldest member so if the oldest member dies, second member in the list becomes the first member in the list and the new oldest member.

从这点可以看出,虽然Hazelcast没有所谓的“Master”,但是仍然有一个Leader节点(the oldest member),这个概念与ZooKeeper中的Leader类似,但是实现原理却完全不同。同时,Hazelcast中的数据是分布式的,每一个member持有部分数据和相应的backup数据,这点也与ZooKeeper不同。

虽然Hazelcast应用便捷,但是要将其实际应用于生产环境,还是具有一定的风险的,这个需要大量的实际应用来验证。

 

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还为社区版提供了两个不同级别的支持,参考价格公布在了他们的网站上。

分享到:
评论

相关推荐

    openfire使用hazelCast集群

    本文将从集群概念、两大关键特性、两大能力、两大技术实现四个方面介绍 OpenFire 使用 HazelCast 集群的知识点。 一、集群概念 集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务...

    hazelcast 文档

    Hazelcast是一款专为Java设计的...Hazelcast文档还包含了3.1.3版本的更新日志、新特性介绍、从2.x版本升级指南,以及入门教程。文档的版权归属于2013 Hazelcast, Inc.,允许人们自由使用、复制、修改和分发这份文档。

    hazelcast API

    以下是对Hazelcast API 的详细介绍: 1. **分布式缓存**:Hazelcast的核心功能之一是其分布式缓存机制,它允许您在多节点集群中存储和检索数据,提高了应用程序的性能和可伸缩性。缓存API提供了丰富的操作,如put、...

    hazelcast-example:Hazelcast,Spring Boot,域驱动设计

    【Hazelcast介绍】 Hazelcast是一个开源的内存数据网格,它可以作为分布式缓存、消息队列、分布式计算和分布式事件系统使用。它能够在多节点之间共享内存数据,从而提高应用程序的性能和可伸缩性。Hazelcast支持多种...

    hazelcast-entrylistener-handoff:一个允许从Hazelcast Eventing线程移交EntryEvent处理的框架

    介绍 Hazelcast 用于响应在Map上发生的事件。 EntryListener是开发人员可以实现的回调接口,以响应于Map事件(例如Update,Add,Delete)来执行其代码。 通过内部hazelcast事件线程池调用内部EntryListeners。 描述...

    springboot hazelcast缓存中间件的实例代码

    本文将详细介绍如何使用 SpringBoot 和 Hazelcast 实现缓存中间件的实例代码。 一、添加依赖包 要使用 Hazelcast 缓存中间件,首先需要添加相应的依赖包。在 pom.xml 文件中添加以下依赖项: ``` dependencies { ...

    人事工资管理系统java源码-hazelcast-cpp-client:hazelcast-cpp-客户端

    介绍 本文档提供有关 C++ 客户端的信息。 此客户端使用 Hazelcast 并与 Hazelcast IMDG 4.0 及更高版本配合使用。 客户端 API 是完全异步的。 API 返回boost::future API,它具有 . 如果用户想要确保请求的操作在...

    hazelcast-webinar

    2. **分布式内存数据网格**:介绍Hazelcast如何通过分布式内存模型提高应用性能,如何在集群之间共享数据,以及如何确保数据的一致性。 3. **核心组件**: - 分布式Map:用于存储键值对,支持多种一致性策略。 - ...

    CaaS-Hazelcast

    - **README.md**:项目介绍和使用指南。 - **Dockerfile**:可能包含Docker配置,用于构建和部署Hazelcast服务的容器化版本。 ### 4. 开发实践 - **初始化Hazelcast实例**:通过`Hazelcast.newHazelcastInstance()...

    imdg-docs:Hazelcast IMDG 文档的源内容

    Hazelcast IMDG 文档 该存储库包含 Hazelcast IMDG 文档的 Antora 组件。 文档源文件用 AsciiDoc 标记。文档结构本节介绍有关此存储库结构的一些重要信息: 组件名称、版本和起始页在每个分支的antora.yml文件中配置...

    cqrs-eventsourcing-kafka:使用Apache Kafka和服务器端事件的具有域驱动设计和事件源的CQRS

    介绍 这个小项目的目的是说明以简单的方式应用CQRS,域驱动设计和事件源,启用Reactive体系结构并利用Kafka作为分布式消息代理的可能性。 参见: : 结构 模块 目的 services-core 所有其他模块之间共享的核心标记...

    rapidpm-binarycache

    这是Matti Tahvonen的一篇非常好的文章,向您介绍了有关JSR 107的更多信息: 建立自己的缓存 该项目带有一个所谓的聚合模块,可通过使用Maven配置文件来配置缓存组件。 默认情况下,聚合将产生一个jar,其中包含...

    tongweb6.0手册

    - Hazelcast简介:介绍Hazelcast缓存集群的技术背景。 - Hazelcast位置及目录:说明Hazelcast在系统中的部署位置及相关目录结构。 以上内容为TongWeb 6.0手册的关键知识点摘要,涵盖了从基础设置到高级配置的各项...

    Java分布式开发与集群技术.pdf

    8. OTF软件和Hazelcast软件:文档中提到了OTF软件和Hazelcast软件,但未具体说明。OTF可能是指“On-The-Fly”或“Open Travel Format”等技术或标准,而Hazelcast是一款开源的Java内存数据网格(In-Memory Data Grid...

    Vertx-Web初探

    下面详细介绍`io.vertx.core.VertxOptions`对象的各个配置项及其作用: 1. **setEventLoopPoolSize**:设置EventLoop线程池的大小,默认值为当前CPU核心数的两倍。 2. **setWorkerPoolSize**:设置Worker线程池的...

    SpringCache缓存初探共5页.pdf.zip

    在这个“SpringCache缓存初探共5页.pdf.zip”压缩包中,很可能是对SpringCache的基础知识进行了简要介绍。虽然文件名暗示内容可能只有5页,但我们可以深入探讨SpringCache的一些核心概念和技术细节。 首先,Spring...

    简单介绍Ehcache的优缺点

    4. **分布式缓存支持**:通过集成Terracotta或Hazelcast等分布式缓存解决方案,Ehcache能够实现跨服务器的数据共享,这对于构建高可用、可扩展的系统架构至关重要。 5. **易于集成与使用**:Ehcache的API简洁明了,...

    JAVA分布式缓存文档

    - **快速启动**:介绍如何快速安装并配置Hazelcast环境。 - **基础示例**:通过简单的代码示例展示Hazelcast的基本使用方法。 #### 三、分布式数据结构 Hazelcast提供了多种分布式数据结构来满足不同的应用场景需求...

    Xitrum学习笔记

    3. **集群构建**(Xitrum学习笔记20 - 和Akka、Hazelcast组成集群.pdf):Xitrum可以与Akka和Hazelcast等工具集成,实现应用的集群部署,以提高服务的可用性和伸缩性。这部分会讲解如何配置和管理集群,以及如何处理...

    mapdb-hz-offheap:为土耳其的内存中数据网格构建提供堆外存储

    介绍 HC使用Java映射为其内部数据结构。 那些对于垃圾收集器可见,并且不能与大量项目很好地缩放。 MapDB提供不受GC影响的堆外集合。 该项目将HZ和MapDB结合在一起。 该项目在HZ内部进行了非常简单的更改。 在...

Global site tag (gtag.js) - Google Analytics