GFS副本控制协议--中心化副本控制协议

对于副本集的更新操作有一个中心节点来协调管理,将分布式的并发操作转化为单点的并发操作,从而保证副本集内各节点的一致性。在GFS中,中心节点称之为Primary,非中心节点成为Secondary。中心节点是GFS Master通过lease(租约?)选举的。

数据冗余的颗粒度

GFS中,数据的冗余是以Chunk为基本单位的,而不是文件或者机器。

上图中,o p q即为数据段,相比以机器为粒度的副本,以数据段为独立的副本机制,虽然维护的元数据更多一些,但系统伸缩性更好,故障恢复更迅速,资源利用率更均匀。

数据写入过程:

step1 Client向master请求Chunk的副本信息,以及哪个副本(Replica)是Primary

step2 maste回复client,client缓存这些信息在本地

step2 client将数据(Data)链式推送到所有副本

step4 Client通知Primary提交

step5 primary在自己成功提交后,通知所有Secondary提交

step6 Secondary向Primary回复提交结果

step7 primary回复client提交结果

优势:最大化利用每个机器的网络带宽,避免网络瓶颈和高延迟连接,最小化推送延迟GFS使用TCP流式传输数据,以最小化延迟。一旦chunkserver收到数据,即立刻开始推送,即一个replica不用收到完整的数据再发往下一个replica。

副本的一致性保证:

  这里有两个术语:consistent, defined

  consistent:对于文件区域A,如果所有客户端从任何副本上读到的数据都是相同的,那A就是一致的。

  defined:如果A是一致的,并且客户端可以看到变异(mutation)写入的完整数据,那A就是defined,即结果是可预期的。

将异常抛给程序处理。GFS提供的一致性保证称之为“relaxed consistency”,relaxed是指,系统在某些情况下是不保证一致性,比如读取到尚未完全写完的数据(数据库中的Dirty Read);比如上面提到的padding(可以使用checksum机制解决);比如上面提到的重复的append数据(读取数据的应用自行保证幂等性)。在这些异常情况下,GFS是不保证一致性的,需要应用程序来处理。

最新文章

  1. Maven基础知识(转)
  2. Vertica笔记
  3. poj 2318 TOYS (二分+叉积)
  4. 最短路--floyd算法模板
  5. 【BZOJ】【3550】【ONTAK2010】Vacation
  6. 【POJ】The Suspects(裸并查集)
  7. 给Lisp程序员的Python简介
  8. SqlServer与Linq 无限递归目录树且输出层级
  9. Spring data jpa 调用存储过程处理返回参数及结果集
  10. asp.net core系列 36 WebAPI 搭建详细示例
  11. Spring中用了哪些设计模式
  12. OPC协议解析-关于OPC协议的几个问题
  13. EasyTouch5ForSiki学院
  14. SqlServer主键
  15. 2018-3-7 20155317 王新玮 Exp1 PC平台逆向破解(5)M
  16. java基础深入解析基本类型
  17. 数组和集合(四)、Map集合的使用总结
  18. beego 点滴
  19. Dubbo架构原理
  20. 【转】The best career advice I’ve received

热门文章

  1. adb命令积累
  2. [Qt Quick] qmlscene 工具的使用
  3. 【线性代数】5-2:置换和余因子(Permutations and Cofactors)
  4. Flask-CBV模式
  5. python3安装web.py
  6. 下板不动, 上板匀速平板间流动(Crank-Nicolson格式)【转载】
  7. RHSA-2018:3059-低危: X.org X11 安全和BUG修复更新
  8. 冲刺阶段——Day3
  9. Eclipse的视窗
  10. 多位IT专家分享他们离不开的实用工具