dynamo方程怎么写_Dynamo(三):Dynamo的异常处理及读/写流程

异常处理

Dynamo中把异常分为两种类型,临时性的异常和永久性异常。服务器程序运行时一般通过类似supervise的监控daemon启动,出现core dump等异常情况时自动重启。这种异常是临时性的,其它异常如硬盘报修或机器报废等由于其持续时间太长,称之为永久性的。回顾Dynamo的设计,一份数据被写到N, N+1, ... N+K-1这K台机器上,如果机器N+i (0 <= i <= K-1)宕机,原本写入该机器的数据转移到机器N+K,机器N+K定时ping机器N+i,如果在指定的时间T内N+i重新提供服务,机器N+K将启动传输任务将暂存的数据发送给机器N+i;如果超过了时间T机器N+i还是处于宕机状态,这种异常被认为是永久性的,这时需要借助Merkle Tree机制进行数据同步。这里的问题在于时间T的选择,所以Dynamo的开发人员后来干脆把所有程序检测出来的异常认为是临时性的,并提供给管理员一个utility工具,用来显示指定一台机器永久性下线。由于数据被存储了K份,一台机器下线将导致后续的K台机器出现数据不一致的情况。这是因为原本属于机器N的数据由于机器下线可能被临时写入机器N+1, ... N+K。如果机器N出现永久性异常,后续的K台机器都需要服务它的部分数据,这时它们都需要选择冗余机器中较为空闲的一台进行同步。Merkle Tree同步的原理很简单,每个非叶子节点对应多个文件,为其所有子节点值组合以后的Hash值,叶子节点对应单个数据文件,为文件内容的Hash值。这样,任何一个数据文件不匹配都将导致从该文件对应的叶子节点到根节点的所有节点值不同。每台机器维护K棵Merkle Tree,机器同步时首先

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值