分布式系统hash策略
分布式系统的hash策略,决定了数据的分布。传统的方式采用mod n的算法,非常简单,但是一旦节点发生变化,所有的数据都需要重组,代价非常大。一致性哈希(Consistent hash)很好的解决了这个问题,当节点发生变化时,只会影响到部分数据,而且永远可以找到一个提供服务的节点。
对于数据库Sharding的架构,Consistent hash并不十分适合,我们采用了一种新的hash策略,我将其称之为“Virtual Partition Hash”策略。
为了解决节点数量变化时,全部数据需要重组的问题,我们采用了预分区的策略,将整个系统分为很多个Virtual Partition,每个物理节点由多个Virtual Partition组成。比如整个系统分为128个VP,共有8个物理的服务器,每个服务器包含16个VP的数据,只要整个系统的物理节点小于128个,增加节点只需要移动部分VP就可以了,避免了数据重组的问题。另外,为了提高可用性,每个物理节点都有一套备机,如果节点失效则切换至备用节点。
新增一个物理节点:
只需要移动部分VP至新节点,不需要数据重组。
Virtual partition hash策略非常简单,实现也很容易,实际上它是Consistent hash策略的一个简化版本,Oracle hash分区也是类似的做法,尽可能的减少数据重组的代价,可以参考我以前的文章《Oracle hash分区的秘密》。
这个策略的另外一个好处是非常灵活,可以根据服务器压力的情况,通过移动VP的来达到负载均衡的目的。利用MySQL数据库复制的特性,移动VP是非常容易的,而且配合我们的分布式数据库架构,可以做到对应用透明。
这个方案的缺点是:每个节点都准备一台备机,硬件资源比较浪费。但是如果可以和读写分离架构配合起来,备机可以承担部分读的服务,那么这个缺点就不存在了。
“Simple but Incomplete Solutions Win!”
建议继续学习:
- 分布式缓存系统 Memcached 入门 (阅读:14700)
- HashMap解决hash冲突的方法 (阅读:11227)
- 关于memcache分布式一致性hash (阅读:10686)
- Zookeeper工作原理 (阅读:10352)
- GFS, HDFS, Blob File System架构对比 (阅读:9356)
- Zookeeper研究和应用 (阅读:8500)
- 分布式日志系统scribe使用手记 (阅读:8021)
- 一致性哈希算法及其在分布式系统中的应用 (阅读:7911)
- 分布式哈希和一致性哈希 (阅读:7634)
- HBase技术介绍 (阅读:6736)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:jacky 来源: Hello DBA
- 标签: hash 分布式
- 发布时间:2010-05-26 09:43:22
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则