如何在分布式系统中结合分片和一致性哈希?

问题描述 投票:0回答:1

Sharding,或者说分区,是一种在分布式系统中广泛使用的技术,它在逻辑上将数据分成多个分区。每个节点都分配了一组分区,因此可以通过并行化提高读/写吞吐量。

一致性哈希 是一种广泛应用于负载均衡和路由服务的技术。要找到负责为给定键提供服务的节点,传统方法是计算键的哈希值,然后将哈希值与节点数

N
取模。但是,如果节点数量发生变化,则必须重新散列密钥并在节点之间传输。为了最大限度地减少重新散列后传输的数据量,使用一致性散列来代替模
N
操作,以便只需要传输一小部分数据。

为了进行分片,我们需要两个映射:

key_to_shard
:键范围被分割成一系列子范围,每个子范围分配给一个分片。将键范围分配给分片绝对不涉及模
N
操作。

shard_to_node
:对于给定的分片,它被分配给一个节点。 对于静态分片,即分片的数量永远不会改变,
key_to_shard
是微不足道的。对于动态分片,有分片拆分,将一个分片分成两个具有相邻键范围的分片,以及分片合并,将两个具有相邻键范围的分片合并为一个分片。静态分片和动态分片都不会产生模
N
操作。

在很多文献或者教科书中,都说sharding一般是和consistent hashing结合起来

那么,如果没有取模

N
操作,一致性哈希应该用在什么地方呢?

我理解错了吗?

database sharding distributed-system data-partitioning consistent-hashing
1个回答
0
投票

在实践中,分片通常比节点多得多。从技术上讲,分片的 N 永远不会改变,因为这意味着对每个键进行重新散列。

例如,我们有 1000 个分片和 10 个节点。使用这种方法,我们仍然可以通过将热范围分配给不同的节点来平衡热范围。此外,我们可以通过重新分配分片来添加和删除节点。

© www.soinside.com 2019 - 2024. All rights reserved.