`
angelbill3
  • 浏览: 253507 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

【总结】Hazelcast入门简介

 
阅读更多
我们为什么要用缓存?
太简单的问题,因为要提高速度~ 中心思想是空间换时间,从数据库中预加载一部份数据放到内存或磁盘中,牺牲空间来换取交互时间。

一般的应用正式环境中都不止一台服务器(也就是说是集群的),那么如果只是简单的将数据预加载到内存,那么就会有数据不同步的现象。(更新了其中一台JVM,另一台JVM并不会收到通知从而保持数据同步)。这时候就需要用到cache server了。
目前流行的cache server有很多种,像redis,Hazelcast,ehcache,memcache等。相比其它三种,Hazelcast好像并没有那么流行,中文文档比较少。

Hazelcast是一个用Java编写的基于内存的数据网格管理平台(open source in-memory data grid)。同时也是一个公司的名字。
公司网站:https://hazelcast.com
产品网站:https://hazelcast.org

1. Hazelcast简介
(本文是基于version 3.5.4写的。)

Hazelcast作为一个高度可扩展的数据分发和集群平台,提供了高效的、可扩展的分布式数据存储、数据缓存。Hazelcast是开源的,在分布式技术方面,Hazelcast提供了十分友好的接口供开发者选择,如Map,Queue,ExecutorService, Lock和Jcache。
Hazelcast的稳定性很高,分布式应用可以使用Hazelcast进行存储数据、同步数据、发布订阅消息等。Hazelcast是基于Java开发的,其客户端有Java, C/C++, .NET以及REST。Hazelcast同时也支持memcache协议。它很好的支持了Hibernate,可以很容易的在当今流行的数据库系统中应用。

如果你在寻找一个基于内存的、可扩展的以及对开发者友好的NoSql,那么Hazelcast是一个很不错的选择!

a. Hazelcast开发比较简单
Hazelcast是基于Java写的,没有任何其它的以来。它提供的API跟Java util包很像。对于开发者来说,只需要加入hazelcast.jar,然后就可以快速使用在多个JVM之间的数据共享(分布式)。

b. Hazelcast的节点之间是平等的(Peer-to-Peer)
不像其它很多的NoSql解决方案,Hazelcast的节点之间是对等的(没有主次之分)。所有的节点存储的数据都是相等的,在应用中可以很容易的增加一个Hazelcast节点。或者以客户端-服务端的形式使用。

c. Hazelcast是可扩展的
Hazelcast的扩展性非常强,可以很简单的增加或减少节点。可以自动的监听节点的增加,并以线性的方式增加存储空间和能力。节点之间的通信是以TCP的方式建立的。

d. Hazelcast效率很高。
将数据存储在内存中,所以是非常高效的,包括读操作和写操作。

e. Hazelcast是可备份的
Hazelcast的数据会在多个节点上进行备份。一旦一个节点失败了,数据将会从别的节点上进行恢复。

2. 使用场景
分布式缓存,通常使用在数据库之前的那一层
缓存服务器
NoSql的数据存储
Spring cache
微服务的结构
储存临时数据,如web的session等

3. Hazelcast的数据拆分
Hazelcast的数据拆分叫做间隔(Partitions)。默认情况下,Hazelcast会将数据拆分成271个间隔(总数,并不是单个单点)。当传入一个key时,Hazelcast会对它进行序列化,以及进行hash的算法等算出一个数值,通过该数值它存放在相应的间隔中(271个的其中一个)。在不同的节点中存放相同数量的间隔。Hazelcast还会生成备份的间隔,同样也是存放在这些间隔中。

4. Hazelcast技术
如果你的应用主要关注的是数据的同步,或是在计算方面的效率,或者是大量的执行任务,那么在应用中嵌入Hazelcast是个不错的选择。在这种模式下,节点包含了应用本身和数据,如下图所示:


另一种模式将多个节点组成一个cache server,然后应用程序通过协议来(Memcache, REST, 客户端等)和server进行交互。如下图所示:


5. 数据的拆分之——间隔化(Partitioning)
在前面介绍过,Hazelcast数据的拆分叫间隔。间隔是一个内存片断,每一个间隔可以包含成千上万条的数据,这个取决于你的机器的能力。
默认情况下,Hazelcast的间隔有271个(所有加起来)。当我们配置了一个节点,那么它就有271个间隔了,下图就是单个节点的间隔图:


当我们在这个群集中加个第二个node,这时候的间隔就被分布化成如下图所示:

在图中,黑色部分的间隔是主要功能是拿来存储的,蓝色部分的间隔是拿来做备份的。第一个节点有135个黑色间隔,其它的(271-135)是备份间隔,主要用来备份第二个节点的黑色间隔。(简而言之就是两个节点相互备份)。

那么如果加入更多的节点呢?Hazelcast会均分拿来存储的黑色间隔以及拿来备份的蓝色间隔,确保所有的节点都是均衡的以及可恢复的。下图是4个节点的间隔图:


6. 数据是怎么被拆分的
数据被放入间隔时使用的算法是一个hash算法。当存入一个键值(或名字)为key的对象(map或topic或list):
通过序列化、hash算法、取模(mod)等,再存放到间隔中。

7. 间隔表
当启动一个节点时,间隔表就会被生成,这个表是用来存放间隔是从属于哪个节点的信息。目的是为了让所有的节点都共享这个信息,让所有的节点都知道数据是具体属于哪个节点的。
最老的节点周期性的向其它节点发送间隔表,所以在集群中的每个点节都会知道间隔有没有发生变化。(比如节点增加或删除)。
如果第一个节点被移除了,那么第二个节点将担任起发送间隔表的工作。
你可以配置系统参数hazelcast.partition.table.send.interval来定义多久发送一次间隔表的信息。默认情况下是15秒。

8. 重新间隔化
当集群中增加一个节点或删除一个节点时,都会进行重新间隔化。

9. 资料
官方文档(重要):https://hazelcast.org/documentation/
3.5版本文档:http://docs.hazelcast.org/docs/3.5/manual/html-single/index.html 
3.5版本Java文档:http://docs.hazelcast.org/docs/3.5/javadoc/

10. 分布式数据结构
1. 标准的数据结构:Map/Queue/RingBuffer/Set/List/MultiMap/ReplicatedMap
2. Topic
3. 并发工具:Lock/Semaphore/AtomicLong/AtomicReference/IdGenerator/CountdownLatch

------------------------------
参考:
Wiki: https://en.wikipedia.org/wiki/Hazelcast
https://hazelcast.com/use-cases/caching
https://hazelcast.com/use-cases/caching/cache-as-a-service
https://hazelcast.com/use-cases/imdg
分享到:
评论

相关推荐

    [Hazelcast] Hazelcast 入门教程 (英文版)

    [Packt Publishing] Hazelcast 入门教程 (英文版) [Packt Publishing] Getting Started with Hazelcast (E-Book) ☆ 图书概要:☆ An easy-to-follow and hands-on introduction to the highly scalable data ...

    hazelcast_learning:复制《Hazelcast 入门》一书

    这是什么为了理解(Kindle版也可以在Amazon.co.jp上购买)这本书的内容,我已经复制了书的内容,但是这本书针对的Hazelcast的版本是2.6,但是我目前使用的版本是最新的3.4版本,所以有一些更正。你可以从发布者的...

    hazelcast-3.7.2-API文档-中文版.zip

    赠送jar包:hazelcast-3.7.2.jar; 赠送原API文档:hazelcast-3.7.2-javadoc.jar; 赠送源代码:hazelcast-3.7.2-sources.jar; 赠送Maven依赖信息文件:hazelcast-3.7.2.pom; 包含翻译后的API文档:hazelcast-...

    openfire使用hazelCast集群

    openfire使用hazelCast集群

    hazelcast-3.7.2-API文档-中英对照版.zip

    赠送jar包:hazelcast-3.7.2.jar; 赠送原API文档:hazelcast-3.7.2-javadoc.jar; 赠送源代码:hazelcast-3.7.2-sources.jar; 赠送Maven依赖信息文件:hazelcast-3.7.2.pom; 包含翻译后的API文档:hazelcast-...

    hazelcast-4.1.1.zip

    hazelcast-4.1.1.zip包

    Spring Boot和Hazelcast使用详解

    主要介绍了Spring Boot和Hazelcast使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Hazelcast集群部署手册.docx

    hazelcast集群部署手册,非嵌入的集群部署。个人实践时记录,包括配置配置文件、启动、集群管理界面配置启动等

    hazelcast 文档

    Hazelcast is a clustering and highly scalable data distribution platform for Java. Hazelcast helps architects and developers to easily design and develop faster, highly scalable and reliable ...

    hazelcast-kubernetes, 用于Hazelcast的Google Kubernetes发现机制.zip

    hazelcast-kubernetes, 用于Hazelcast的Google Kubernetes发现机制 用于Kubernetes目录的 Hazelcast发现插件Hazelcast发现 SPI配置属性文档配置文件REST API 请求DNS查找插件Docker 图像这个 Hazelcast插件发现插件...

    Hazelcast 文档 version 3 2

    Hazelcast 文档 version 3 2

    shiro-hazelcast-1.4.0-API文档-中英对照版.zip

    赠送jar包:shiro-hazelcast-1.4.0.jar; 赠送原API文档:shiro-hazelcast-1.4.0-javadoc.jar; 赠送源代码:shiro-hazelcast-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-hazelcast-1.4.0.pom; 包含翻译后...

    hazelcast-management-center-3.11.1

    hazelcast客户端代码,3.11.1版本。

    Hazelcast 配置说明文件

    从官网下载的Hazelcast原版配置说明文档;

    hazelcast-3.8.9.zip

    download from hazelcast.org. version 3.8.9. hazelcast-3.8.9.zip

    hazelcast-原版文档

    Hazelcast 是面向 Java 的缓存、集群及数据分发解决方案。特性包括:提供java.util.{Queue,Set,List,Map}分布式实现。提供java.util.concurrency.locks.Lock分布式实现

    hazelcast API

    hazelcast是一个很好的开源分布式缓存,对集群环境能友好地支持,并且开发、部署、监控简单

    hazelcast-3.9

    hazelcast-3.9 。。hazelcast-3.9。。hazelcast-3.9有需要的下载。

    hazelcast-3.9.1

    hazelcast 最新资源。非常好用啊 hazelcast 最新资源。非常好用啊

    hazelcast-3.5.5.tar.gz Mac OS

    hazelcast-3.5.5.tar.gz Mac OS 可用 sudo su root 执行即可

Global site tag (gtag.js) - Google Analytics