• fastdfs的同步原理(一)


     FastDFS文件同步采用binlog异步复制方式。storage server使用binlog文件记录文件上传、删除等操作,根据binlog进行文件同步。binlog中只记录文件ID和操作,不记录文件内容。下面给出几行binlog文件内容示例:

    1572660675 C M00/00/00/oYYBAF285cOIHiVCAACI-7zX1qUAAAAVgAACC8AAIkT490.txt

    1572660827 c M00/00/00/oYYBAF285luIK8jCAAAJeheau6AAAAAVgABI-cAAAmS021.xml

    1572660911 D M00/00/00/oYYBAF285cOIHiVCAACI-7zX1qUAAAAVgAACC8AAIkT490.txt

    1572660967 d M00/00/00/oYYBAF285luIK8jCAAAJeheau6AAAAAVgABI-cAAAmS021.xml

      从上面可以看到,binlog文件有三列,依次为时间戳、操作类型和文件ID(不带group名称)。

      文件操作类型采用单个字母编码,其中源头操作用大写字母表示,被同步的操作为对应的小写字母。文件操作字母含义如下:

        C :上传文件(upload)

        D:删除文件(delete)

        A:追加文件(append)

        M:部分文件更新(modify)

        U:整个文件更新(set metadata)

        T:截断文件(truncate)

        L:创建符号链接(文件去重功能,相同内容只保存一份)

      

      同组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行。文件同步只在同组内的storage server之间进行,采用push方式,即源头服务器同步给本组的其他存储服务器。对于同组的其他storage server,一台storage server分别启动一个线程进行文件同步。

      文件同步采用增量方式,记录已同步的位置到mark文件中。mark文件存放路径为 $base_path/data/sync/。mark文件内容示例:

    binlog_index=3

    binlog_offset=382

    need_sync_old=1

    sync_old_done=1

    until_timestamp=1571976211

    scan_row_count=2033425

    sync_row_count=2033417

      采用binlog的异步复制方式,必然存在同步延迟的问题,比如mysql的主从数据同步

  • 相关阅读:
    React项目搭建与部署
    桌面应用之electron开发与转换
    React Native之支付集成(微信 支付宝)(ios android)
    WEB通知和React Native之即时通讯(iOS Android)
    React Native之配置URL Scheme(iOS Android)
    Mybatis操作oracle数据库的一些坑
    java -jar和hadoop jar的区别
    springBoot启动的时候动态选择装载某些bean
    Java常用正则表达式
    java获取当前运行的方法名称
  • 原文地址:https://www.cnblogs.com/llddhh/p/15655096.html
Copyright © 2020-2023  润新知