Go一致性哈希库consistent
2016-03-09 15:16
393 查看
stathat.com/c/consistent是一个一致性哈希库。
一致性哈希是为了解决在分布式系统中,数据存取时选择哪一个具体节点的问题。
比如,系统中有五个节点,大量用户信息分别存在不同的节点上,具体到某一个用户,其信息应该确定的存在一个节点上,不能两次请求,分别去不同的节点上取数据。最简单的思路,可以拿用户ID和节点数求余数,
比如用户ID是 1、6、11、16的在第一个节点上,2、7、12、17的在第二个节点上,依此类推。
但是,如果系统中某一个节点坏掉了,变成4个了。如果再按4求余的话,会导致大量数据需要重新初始化。比如用户6,原来在第1个节点上,坏掉一个以后6%4=2,用户数据跑到第2个节点上去了。
如果系统中增加了新的节点,同样也会导致这个问题。
下面介绍consistent库的使用
代码:
输出结果:
server1: cacheC
server2: cacheA
server1: cacheC
server2: cacheB
可以看到删除chcheA以后,user_2对应的server由cacheA换到cacheB了,而server1没有改变。
一致性哈希是为了解决在分布式系统中,数据存取时选择哪一个具体节点的问题。
比如,系统中有五个节点,大量用户信息分别存在不同的节点上,具体到某一个用户,其信息应该确定的存在一个节点上,不能两次请求,分别去不同的节点上取数据。最简单的思路,可以拿用户ID和节点数求余数,
比如用户ID是 1、6、11、16的在第一个节点上,2、7、12、17的在第二个节点上,依此类推。
但是,如果系统中某一个节点坏掉了,变成4个了。如果再按4求余的话,会导致大量数据需要重新初始化。比如用户6,原来在第1个节点上,坏掉一个以后6%4=2,用户数据跑到第2个节点上去了。
如果系统中增加了新的节点,同样也会导致这个问题。
下面介绍consistent库的使用
代码:
import ( "fmt" "stathat.com/c/consistent" ) func main() { cons := consistent.New() cons.Add("cacheA") cons.Add("cacheB") cons.Add("cacheC") server1, err := cons.Get("user_1") server2, err := cons.Get("user_2") if err != nil { fmt.Println(err) return } fmt.Println("server1:", server1) //输出 server1: cacheC fmt.Println("server2:", server2) //输出 server2: cacheA fmt.Println() //user_1在cacheA上,把cacheA删掉后看下效果 cons.Remove("cacheA") server1, err = cons.Get("user_1") server2, err = cons.Get("user_2") if err != nil { fmt.Println(err) return } fmt.Println("server1:", server1) //输出 server1: cacheC,和删除之前一样,在同一个server上 fmt.Println("server2:", server2) //输出 server2: cacheB,换到另一个server了 }
输出结果:
server1: cacheC
server2: cacheA
server1: cacheC
server2: cacheB
可以看到删除chcheA以后,user_2对应的server由cacheA换到cacheB了,而server1没有改变。
相关文章推荐
- Codeforces 86D. Powerful array (MO's Algorithm(区间查询的离线优化))
- golang中调用C
- golang中函数闭包遇到的坑
- django1.8 增加注册用户其他字段
- 李世石和AlphaGo人机围棋大赛
- Go语言中Restful模式与Routes路由框架
- Google 搜索命令
- CodeForces 630D-Hexagons!
- goto void
- Django入门
- HDU 3903 Trigonometric Function(数学定理)
- HDU 3903 Trigonometric Function(数学定理)
- 我与小娜(29):AlphaGo必胜!
- 谷歌出品!7条超实用的虚拟现实交互式设计原则
- 编写GO的WEB开发框架 (八): Session支持及自定义Session
- Tushare + pyalgotrade + pandas 环境搭建(MAC环境)
- 【POJ2195】Going Home(费用流)
- Django: 之Web框架完美解析
- google-benchmark 渐进学习
- 15款Django开发常用软件包