当前位置: 首页 > 工具软件 > Hazelcast > 使用案例 >

Hazelcast 知识点认知梳理

朱风史
2023-12-01

1、Hazelcast 是个什么?

官方介绍是分布式计算和存储的一个平台。ok,两点:

  • 分布式存储
  • 分布式计算

2、分布式?

分布式的概念很成熟了,通俗来讲:假设将机器比喻成人,原本由一个人进行数据存储和计算,现在有多个人参与进行。
分布式存储:大家一起参与存储和备份,这样的好处是单个人的负荷小了,而且人多力量大,存储量也上去了。
分布式计算:同理,大家一起算,计算的效率和可计算的数据规模也就上去了。
分布式需要保证的地方也是司空见惯:一致性、高可用、容错性,也就是CPA原则,这个先不谈。

3、分布式成员关系都是什么样的?

而各类平台对于参与存储和计算的算法机制那就是各有不同了,那么对于这些人的权力划分也是各有不同:
有的讲究人人平等,个个都一样。
有的是封建王朝,一人高级,太子次之,其他平等。
有的是议会制,一组人高级,其他平等。
可以看到,和现实社会极其相似,所以是计算机科学是数学也是社会学。

4、Hazelcast 的成员是什么关系?

Hazelcast的成员机制官方称是人人平等,算第一种。 但是有这么个情况,Hazelcast存储会进行分区,然后这些分区由散列算法计算后会基本平均的分配给每个成员,Hazelcast会对这个分区信息进行记录形成一个分区表,而分区表的所有权是属于加入集群最早的那个节点成员,也称为主成员,然后由主成员进行分区表信息的更新,也是由他定时将分区表同步给其他节点,当他kill掉后会由第二早的节点顺位继承这个所有权,以此类推。所以就这么一点来看,还是有所不平等的。

5、Hazelcast 的分布式存储是什么样的?

Hazelcast 官方称不依赖于磁盘存储,将所有运行状态保存在集群的随机存取存储器 (RAM) 中,然后由集群成员的 RAM 组合成一个内存数据存储,这种分布式模型称为_缓存集群。_
Hazelcast 提供了多种数据存储结构,结合提供的API就注定能适应各种应用场景,比如结构Topic可应用到分布式主题(发布/订阅服务器)为智能手机构建可扩展的聊天服务器,

Hazelcast 所有数据都是分区存储的吗?
不是,不同数据结构存在不同存储方式,详情见[《Hazelcast 数据结构》

6、Hazelcast 的分布式计算是什么样的?

上诉得知,Hazelcast 本质是由各节点内存组成的,那么其实也就可以想象的到他的特点:计算速度快,根据他的特性,它可以大批量的添加节点,也就是大批量拓扑缓存,然后进行分布式计算,将算力分摊到各节点,他的计算优势可想而知。
于是乎,Hazelcast 就宣布,他们可以针对事件流和传统数据源进行一致的低延迟查询、聚合和有状态计算。
也即是说:Hazelcast 是可以对外提供算力的。

7、Hazelcast 的分布式计算提供了哪些工具?

  1. Entry processor: 更新、删除和读取集群成员(服务器)上的映射条目。
  2. Executor service: 在集群成员上执行你自己的 Java 代码并接收结果。
  3. Pipeline: 创建一个在集群成员上运行快速批处理或流式处理的数据管道。

有意思的是第2点和第3点。

8、Hazelcast 分布式计算中的Executor service是什么?

Executor service指出:将java代码提交,由集群执行然后返回结果。这一点的成立是建立在Hazelcast 存在嵌入式模式,可以以jar包的形式嵌入java程序,那么由这些java程序为节点组成的集群来执行提交者的代码,就可以分担其他节点的计算需求,且是异步执行的、可取消的,Hazelcast 官方称这个点主要适用于数据库查询、复杂计算和图像渲染。

9、Hazelcast 分布式计算中的Pipeline是什么?

官方称:Pipeline(管道)主要是处理批处理或实时流数据。
那么什么是批处理什么是流处理呢?

  • 批处理:数据量是明确的,可能很多,但是他的数量是明确的,这是有完的。
  • 流处理:数据量是不明确的,最具标识的就是随时间更新的数据,比如实时对某流媒体应用程序性能进行检测,这是没完的。

那么管道到底是什么呢?
其实就是对数据处理方法的定义。主要干三件事:

  • 怎么获取数据
  • 怎么处理加工数据
  • 完事后数据发送给谁

那么可以看见,管道类似一个工具,功能是批数据处理或是对流式数据的处理。
那么既然是工具,工具自身是不会工作的,比如一把锄头,它可以锄地,但锄头自己是不会锄地的,需要人去拿起来用它才能锄地,同理,管道只是一个方法,他自己是不会执行的,他需要提交给一个能把他执行起来的,那就是jet引擎。

也就是说Hazelcast 使用Pipeline将方法的定义和执行分开来做了,这样是有极大好处的:
1、方法的定义是灵活的,且基本没什么性能上的消耗。
2、一个系统负荷最大的就是对数据的处理,而此时Hazelcast的服务集群 接收到用户提交的管道任务后把这部分工作接管过来。你只需要告诉他你要做什么,怎么做,做完给谁,剩下的就不用管了,好似外包出去了,而这个外包效率还很高很可靠,那么这时候对这个系统来讲就太轻松了。

10、什么是jet?

Jet 引擎是一个批处理和流处理系统,它允许 Hazelcast 成员以一致的低延迟对大量数据进行无状态和有状态计算。

jet怎么执行管道?
要让 Jet 引擎运行管道,必须将其提交给成员。到那时,管道就变成了一项_工作_。
当成员收到一份工作时,它会以有向无环图 (DAG) 的形式创建一个计算模型。使用此模型,计算被拆分为分布在集群中所有成员之间的任务,利用所有可用的 CPU 内核。该模型允许 Hazelcast 更快地处理数据,因为任务可以在集群中并行复制和执行。

jet使用与否有什么影响?
那么好,综上得知:jet是一个批处理和流处理的引擎系统,而在Hazelcast 中,管道是来负责数据的批处理和流处理,而管道只是Hazelcast 分布式计算的一种方式,所以得出结论:
只有当Hazelcast 在使用管道进行分布式计算的时候才会使用到jet引擎,其他任何工具任何情况下的使用都不受jet影响。

 类似资料: