我们为什么要用缓存?
太简单的问题,因为要提高速度~ 中心思想是空间换时间,从数据库中预加载一部份数据放到内存或磁盘中,牺牲空间来换取交互时间。
一般的应用正式环境中都不止一台服务器(也就是说是集群的),那么如果只是简单的将数据预加载到内存,那么就会有数据不同步的现象。(更新了其中一台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
分享到:
相关推荐
[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集群部署需要配置hazelcast.xml文件,包括group、join和management-center等配置项。 * 集群发现机制可以选择TCP或Multicast两种方式。 * management-center需要在hazelcast.xml文件中配置...
Spring Boot和Hazelcast使用详解 Spring Boot和Hazelcast使用详解是指如何将Hazelcast集成到Spring Boot项目中,以提高应用程序的性能。Hazelcast是一个内存分布式计算平台,用于管理数据并并行执行应用程序。它...
这是什么为了理解(Kindle版也可以在Amazon.co.jp上购买)这本书的内容,我已经复制了书的内容,但是这本书针对的Hazelcast的版本是2.6,但是我目前使用的版本是最新的3.4版本,所以有一些更正。你可以从发布者的...
赠送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作为一个内存数据网格解决方案,提供了高性能、高可用性、分布式数据结构和计算、安全特性以及良好的扩展性和集成能力。它的核心在于利用集群资源实现数据的高效管理和处理,为现代微服务...
### 总结 Hazelcast作为一种先进的分布式计算平台,不仅解决了传统并发控制技术的局限性,更是在多JVM环境下实现了高效、可靠的分布式数据管理和处理能力。通过其动态可扩展性、高可用性和高性能的设计理念,...
Hazelcast是一款专为Java设计的...Hazelcast文档还包含了3.1.3版本的更新日志、新特性介绍、从2.x版本升级指南,以及入门教程。文档的版权归属于2013 Hazelcast, Inc.,允许人们自由使用、复制、修改和分发这份文档。
Hazelcast 配置说明文件 Hazelcast 配置可以通过声明式配置(XML)或编程式配置(API)或两者的混合方式进行。下面是对 Hazelcast 配置的详细说明: 一、声明式配置 声明式配置是指通过 XML 文件来配置 Hazelcast...
OpenFire 使用 HazelCast 集群 OpenFire 是一款流行的即时通信服务器软件,而 HazelCast 是一个高性能的分布式内存数据网格。OpenFire 使用 HazelCast 集群可以提高系统的可扩展性和高可用性。本文将从集群概念、两...
Hazelcast是一款开源的内存数据网格(In-Memory Data Grid, IMDG)解决方案,它提供分布式内存计算和存储,能够显著提升应用的性能和可扩展性。Hazelcast 3.12.2是该软件的一个版本,包含了对之前版本的改进和修复。...
标题 "hazelcast-3.5.5.tar.gz Mac OS" 指示这是一个针对Mac OS操作系统的Hazelcast版本的压缩包文件。Hazelcast是一个开源的内存数据网格,常用于提供分布式内存缓存、分布式计算以及分布式事件处理等功能。版本号...
Hazelcast 是一款面向 Java 平台的开源分布式计算平台,提供高性能的分布式数据结构和集群服务。其设计宗旨是为开发人员提供简单而直接的方式构建可扩展的应用程序,通过分布式缓存、数据分发、消息队列等功能,降低...
赠送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-...
总结来说,"springmvc+mybatis+Hazelcast试验"项目旨在演示如何将这三个组件集成到一个Web应用中,实现高效的数据处理和分布式缓存,这对于构建大型、高并发的互联网应用具有很高的参考价值。通过下载提供的jar包,...
Hazelcast Management Center 3.11.1 是一个用于管理 Hazelcast 分布式内存数据网格实例的重要工具。Hazelcast 是一个开源的内存数据网格平台,它提供内存存储和计算,增强了应用程序的性能和可扩展性。Management ...
Hazelcast API 是一款强大的开源框架,主要用于构建分布式数据存储和计算解决方案。它提供了一整套API,使得开发者能够在集群环境中轻松实现缓存、队列、地图、话题、事件监听等分布式服务。以下是对Hazelcast API ...
Hazelcast是一个开源的内存数据网格,它提供了一个分布式的内存计算平台,广泛用于提升应用程序的性能和可扩展性。Hazelcast 3.8.9 版本是该技术的一个稳定版本,从官方站点hazelcast.org下载,旨在提供可靠的服务和...
Hazelcast Management Center 是一个强大的工具,用于管理和监控 Hazelcast 集群。这个压缩包 "hazelcast-management-center-4.0.1.zip" 包含了版本为 4.0.1 的管理中心软件,它允许用户直观地查看和控制他们的 ...
hazelcast-kubernetes, 用于Hazelcast的Google Kubernetes发现机制 用于Kubernetes目录的 Hazelcast发现插件Hazelcast发现 SPI配置属性文档配置文件REST API 请求DNS查找插件Docker 图像这个 Hazelcast插件发现插件...