hazelcast请求如何路由到正确的分区?

时间:2016-03-05 19:53:12

标签: hazelcast

我是Hazelcast的初学者,并试图理解以下内容。

在具有3个集群的普通对等设置中,每个集群都是单独的分区。根据请求,如何选择正确的分区?有没有可以帮助每个请求的路由器?如何提供请求?

由于

2 个答案:

答案 0 :(得分:3)

Hazelcast的核心基于“分布式哈希表”,没有主节点。它适用于节点之间的两种共享知识:

  1. 在参与群集的节点的有序列表中
  2. 哈希函数
  3. 对于1 /,Hazelcast使用从最老到最年轻的节点列表。这些信息“容易”获取,不需要通过某种选举进行同步。 2 /只是一些代码/配置。

    DHT的原理很简单:想象一下,你有三个节点,排序为AB和C.如果你想知道哪个节点负责一个密钥K,你只需对密钥进行散列,并取此值为模3。你有0,它是节点A,如果你有1,它是节点B,2,它是节点C.

    当然,它只是Hazelcast的简化视图:例如,每个结构都分为X个分区,每个节点拥有多个分区。而且,每个分区都被复制。因此,对于每个分区,有一个“主”节点和几个“备份”节点。但你明白了这一点:没有主节点,没有路由节点,每个节点都“知道”每个数据所属的位置。

答案 1 :(得分:3)

Hazelcast不使用一致性散列,因此Jeremie B给出的答案并不准确。

Hazelcast中有几个重要的概念:

  1. 分区 - 默认情况下,271个分区在节点之间均匀分布。每个节点拥有" primary"分区并包含备份"分区"。
  2. 哈希函数 - 允许将键映射到分区,因此在简化版本中它看起来像hash(key) % partitionCount = partition
  3. 分区表 - 保持分区和节点之间的映射,或者在分区和副本之间更精确。每个分区的第一个副本是" primary"分区,第二个,第三个......是备份。
  4. 要联系正确的节点:

    • a" smart"客户跟踪"分区表"。
    • 它使用散列算法来计算存储密钥的分区。
    • 它在"分区表"中查找该分区。并连接到包含给定副本的节点。

    还有一个虚拟客户端的概念,它不知道它应该连接到哪个节点。虚拟客户端发出的请求由它连接的节点路由到右侧节点(如果它不是正确的节点,则重合)。