redis集群是否使用一致性哈希
does redis cluster use consistent hashing
我正在使用 redis 集群 3.0.1。
我认为redis 集群使用一致性哈希。哈希槽类似于一致性哈希中的虚拟节点。 Cassandra的数据分布和redis cluster差不多,this article说的是一致性哈希
但是the redis cluster turorial说redis集群没有使用一致性哈希
我想念什么?谢谢
你是对的,虚拟节点与哈希槽非常相似。
但是虚拟节点并不是consistent hashing最初的概念,更像是Cassandra基于consistent hashing使用的trick。所以redis说不使用一致性哈希也是可以的。
所以,不要为措辞烦恼。
当将服务器散列成一个环时,一致性散列提供了很多不错的特性:
- 服务器随机分布在环中,利于集群负载均衡
- add/remove一台服务器只影响它的邻居,尽量减少数据迁移
但是,我认为您无法控制哪个密钥转到哪个服务器:即我不能执行以下分配:
key 1-99 ==> serverA
key 100 ==> serverB
// I can probably reach the same traffic split, 99:1
// by given more virtual nodes to serverA, but it won't guarantee
// key 1 and key 99 is served by the same machine
这在redis中是允许的,redis使用hash slot,我认为这是一个来自散列值->服务器的显式映射。这给了你完全的控制权,特别是它启用了多键交易:即
key Alice, key Bob ==> serverA
// move 100$ from Alice's bank account to Bob's in one operation
// no need special technique like 2 phase commit
key -> server 映射现在由你自己管理,而不是通过一致性哈希,缺点是管理员更多 work/responsibility,Redis 也提供了 commands 来帮助你管理: rebalance
、reshard
免责声明:这是我自己的理解(这里是我的 sources),我希望我可以在 Whosebug 上@redis_dev 让他们校对我的答案
我正在使用 redis 集群 3.0.1。
我认为redis 集群使用一致性哈希。哈希槽类似于一致性哈希中的虚拟节点。 Cassandra的数据分布和redis cluster差不多,this article说的是一致性哈希
但是the redis cluster turorial说redis集群没有使用一致性哈希
我想念什么?谢谢
你是对的,虚拟节点与哈希槽非常相似。
但是虚拟节点并不是consistent hashing最初的概念,更像是Cassandra基于consistent hashing使用的trick。所以redis说不使用一致性哈希也是可以的。
所以,不要为措辞烦恼。
当将服务器散列成一个环时,一致性散列提供了很多不错的特性:
- 服务器随机分布在环中,利于集群负载均衡
- add/remove一台服务器只影响它的邻居,尽量减少数据迁移
但是,我认为您无法控制哪个密钥转到哪个服务器:即我不能执行以下分配:
key 1-99 ==> serverA
key 100 ==> serverB
// I can probably reach the same traffic split, 99:1
// by given more virtual nodes to serverA, but it won't guarantee
// key 1 and key 99 is served by the same machine
这在redis中是允许的,redis使用hash slot,我认为这是一个来自散列值->服务器的显式映射。这给了你完全的控制权,特别是它启用了多键交易:即
key Alice, key Bob ==> serverA
// move 100$ from Alice's bank account to Bob's in one operation
// no need special technique like 2 phase commit
key -> server 映射现在由你自己管理,而不是通过一致性哈希,缺点是管理员更多 work/responsibility,Redis 也提供了 commands 来帮助你管理: rebalance
、reshard
免责声明:这是我自己的理解(这里是我的 sources),我希望我可以在 Whosebug 上@redis_dev 让他们校对我的答案