LintCode

A collection of 38 posts
LintCode

Consistent Hashing II

Consistent Hashing II [http://lintcode.com/en/problem/consistent-hashing-ii/] 在 Consistent Hashing I 中我们介绍了一个比较简单的一致性哈希算法,这个简单的版本有两个缺陷: 1. 增加一台机器之后,数据全部从其中一台机器过来,这一台机器的读负载过大,对正常的服务会造成影响。 2. 当增加到3台机器的时候,每台服务器的负载量不均衡,为1:1:2。 为了解决这个问题,引入了 micro-shards 的概念,一个更好的算法是这样: 1. 将 360° 的区间分得更细。从 0~359 变为一个 0 ~ n-1 的区间,将这个区间首尾相接,连成一个圆。 2. 当加入一台新的机器的时候,随机选择在圆周中撒 k 个点,代表这台机器的
3 min read
LintCode

Consistent Hashing

Consistent Hashing [http://www.lintcode.com/en/problem/consistent-hashing/] 一般的数据库进行horizontal shard的方法是指,把 id 对 数据库服务器总数 n 取模,然后来得到他在哪台机器上。这种方法的缺点是,当数据继续增加,我们需要增加数据库服务器,将 n 变为 n+1 时,几乎所有的数据都要移动,这就造成了不 consistent。为了减少这种 naive 的 hash方法(%n) 带来的缺陷,出现了一种新的hash算法:一致性哈希的算法——Consistent Hashing。这种算法有很多种实现方式,这里我们来实现一种简单的 Consistent Hashing。 1. 将 id 对 360 取模,
3 min read
DigitalOcean Referral Badge