• GFS(Google File System,谷歌文件系统)----(1)读写一致性


    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是不保证一致性的,需要应用程序来处理。

  • 相关阅读:
    [LeetCode][SQL]Rising Temperature
    google API的.NET库
    Google Reader的另一个开源的替代品Go Read
    C#中反射接受的字符串需要满足的Backus-Naur Form语法
    Windows的应用管理工具 PortableApps,Chocolatey和Ninite
    如何定制Windows系统右键菜单
    另一个有趣的Captcha 网站
    .gitignore模板
    遇到sql server的问题时如何排查
    如何传播你的代码
  • 原文地址:https://www.cnblogs.com/zhulovegou/p/11455384.html
Copyright © 2020-2023  润新知