简介
在本文中,我们将简单介绍一致性hash(consistent hash)的概念,以及一致性hash可以解决的问题。然后我们将在模拟的DDB实现中实现一个简单版本的基于一致性harsh实现的partition。
问题
在《通过写代码学习AWS DynamoDB (2)》中我们的DDB使用了最朴素的hash算法来分配一个key/value存储的partition。也就是使用
key % <partition count>
的方法。当我们需要改变partition的数量来达到scale out和scale in的目的时,我们发现使用这种方法算出来的新的partition会和之前的partition有很大的区别。例如,如果我们把partition的数量从10增加到11时,新分配的partition和以前分配的partition会如下表所示:
Key |
Existing Partition |
New Partition |
1567 |
7 |
5 |
2354 |
4 |
0 |
2888 |
8 |
6 |
8971 |
1 |
6 |
Key所对应的partition的改变意味着我们需要把该partition的数据转移到新的partition上。这是一种很大的开销。而在partition数量改变时,一致性hash可以帮助我们减少数据所对应的partition发生改变的次数。
一致性hash介绍
一致性hash的介绍文章在网上很多,大家可以自行参看。这里仅仅做一个简单的介绍。首先,