求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
 
分布式系统hash策略
 

2010-09-15 作者:jacky 来源:hellodba.net

 

分布式系统的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!”



MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...