FastCFS同步复制机制简介

2023-10-27

FastCFS同步复制机制简介

本篇文章转载于 FastCFS 作者 余庆 大佬的 FastDFS分享与交流 公众号。

上一篇文章介绍了 FastCFS 采用数据分组的做法,一个数据分组的几个节点(如三个节点即三副本)之间是 Master/Slave 关系;FastCFS 采用数据强一致模型,通过 Master/Slave 结构的同步复制机制来保证数据一致性,本文将概要介绍这一机制的原理和关键点。

和单机系统相比,分布式系统因网络通信方面存在较大不确定性,要做到数据强一致的挑战非常大。业界分布式系统主流做法是采用 BASE 理论,有意避开数据强一致性这个难题。BASE 理论是 Basically Available (基本可用)Soft State(软状态或中间状态)Eventually Consistent(最终一致性) 三个短语的缩写。BASE 理论比较偏工程实践,见文知意,需要进一步了解的朋友自行脑补。

采用 Master/Slave 结构,保证数据强一致的逻辑很简单。client 的更新操作只能由 Master 处理,然后 master 同步调用 slave 转发该请求。FastCFSmaster 可以并发请求多个 slave,因此 client 的响应时间和 slave 数目(副本数)并不是线性关系。master 只会对在线(ACTIVE)的 slave 发起同步调用,那么 slave 因重启服务或网络通信异常导致掉线(OFFLINE),FastCFS 是如何处理的呢?

OFFLINE 状态的 slave 会进入数据恢复(追加数据)阶段,追上 master 的最新数据后,方可切换为 ACTIVE 状态。为了确保平滑切换,引入了 ONLINE 这一中间状态。

有朋友就说了,上面的同步复制方式很简单直接嘛,并没有多么高深的地方。嗯,简单的往往就是最有效的。有挑战的地方不在方案的复杂性,而在于工程实现。在保证数据一致性前提下,数据同步复制方案的两大关键点:维护精准的集群状态slave状态平滑切换

FastCFS 引入 leader/follower 这一机制来维护精准的集群状态。leader 通过选举产生,followerleader 建立连接并每秒报告其自身状态(磁盘空间、数据版本号等)。当集群状态发生变化时,如 master 切换、slave 状态变化等,leader 会立即将变动消息推送给所有 follower。借助zookeeper 或者 etcd 也可以实现同样的功能,为什么要自造轮子呢?

原因有二:一、自主可控,减少依赖;二、简单高效,避免臃肿。

分布式系统在保证数据强一致性的前提下,还要做到高可用和高性能,挑战非常大。为了做到这一点,还有一个最为关键的地方,下一篇文章将为你揭晓。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastCFS同步复制机制简介 的相关文章

  • linux C之stat函数

    之前写过一篇关于stat命令的博客 介绍了stat命令的使用和输出信息表示 今天又见到了stat函数 因为输出原因 准备整理一下 stat函数介绍 根据 UNIX环境高级编程 中对于stat函数的解释 stat函数和stat命令一样 都是返
  • 插入、希尔、冒泡、快速、选择排序C++实现

    插入 希尔 冒泡 快速 选择排序C 实现 include
  • C语言——ATM系统项目

    实现效果如图 代码如下 include
  • 初学怎么看电路板

    电路板起支撑与固定无件的作用 同时又是各线路间的连线媒介 起到传送电信号重要作用 电路原理图为表达清晰起见 将功能电路集中在一起 而电路板要考虑电流大小 爬电距离 电磁兼容 热能耗 散热方式和外部接插件的位置等问题 需要有电路基础和电磁兼容
  • psi-probe安装手记

    作者 fbysssmsn jameslastchina hotmail com blog blog csdn net fbysss声明 本文由fbysss原创 转载请注明出处关键字 tomcat监控 probe 一 简介 psi probe
  • UML类关系

    UML类关系 OVERVIEW UML类关系 1 继承关系 2 关联关系 单向关联 双向关联 自关联 3 聚合关系 4 组合关系 5 依赖关系 最后总结 1 继承关系 继承也叫作泛化 Generalization 用于描述父子类之间的关系
  • Android一键清除其他应用缓存数据,有没有什么好方法?【已解决】

    复制链接 发表于 2013 5 13 10 41 来自 51CTO网页 只看他 楼主 想做个功能 清除一个应用下面的所有数据 比如sharedPreference和数据库等等 请问大家有没有什么想法呢 分割线 因为下面是解决方法 如果一个应
  • 详解区块链技术,如何运作

    区块链是数字加密货币比特币的核心技术 区块链是一个分布式数据库 包含参与方之间已执行和共享的所有交易或数字事件的记录 每一笔交易都经过系统大多数参与者的验证 它包含每笔交易的每一条记录 比特币是最流行的加密货币 也是区块链的一个例子 区块链
  • 算法导论 学习笔记 第四章 分治策略(部分)

    分治策略中 我们递归地求解一个问题 每层递归中应用如下三个步骤 1 分解 将问题划分为一些子问题 子问题的形式与原问题一样 只是规模更小 2 解决 递归地求解子问题 如果子问题规模足够小 则停止递归 直接求解 3 合并 将子问题的解组合成原
  • ajax 设置超时 错误码,jQuery - 拦截全部Ajax请求(统一处理超时、返回结果、错误状态码 )...

    样例代码 hangge com 全局的ajax访问 处理ajax清求时session超时 ajaxSetup contentType application x www form urlencoded charset utf 8 compl
  • 解决debug时断点自动进入到URLClassPath.class类中

    转发自 url http blog sina com cn s blog 447dca3d01015yqf html url 问题 在eclipse中debug某个类 结果断点每次都先跳到URLClassPath class中 但是在这个类
  • Error: Unable to find git in your PATH.

    周五打开as以及vs都可以正常编译项目 今天已编译就出这个Error Error Unable to find git in your PATH 最终在Github上找到答案 https github com flutter flutter
  • numpy中的mgrid函数

    mgrid函数返回多维结构 ret np mgrid 第1维 第2维 第3维 一维的表示是np mgrid 起点 终点 步长 二维的表示是np mgrid 起点 终点 步长 起点 终点 步长 当步长为实数时 表示按间隔来分 1表示从起点按0
  • RT-Thread记录(十八、I2C软件包 — 温湿度传感器 SHT21与EEPROM 24C02)

    本文学习测试一下几款典型设备的 RT Thread I2C软件包 目录 前言 一 RT Thread I2C 总线注册 1 1 I2C 设备使用步骤 1 2 检查问题 二 温湿度传感器软件包 2 1 添加及基本测试 2 2 程序中使用 三
  • Hive初始化报错:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver

    Hive初始化报错 org apache hadoop hive metastore HiveMetaException Failed to load driver 完整错误如下所示 org apache hadoop hive metas
  • GAN网络的重新学习的一些内容记录

    20211130 本篇文章属于自己在学习过程中的一些内容记录 正是因为对这些内容不理解 才有了这篇文章 同时会记录一些自己的思考 对与错请仔细斟酌 0 引言 经过了一年多 上次专门研究GAN是去年的时候 学习了基础的原理 也记录了一些文章
  • 架构-负载均衡

    互联网常见的分布式加构分层 1 客户端层 浏览器 APP 小程序 等 2 反向代理层 Nginx 3 站点层 web server 4 服务层 service dubbo webservic 5 数据层 DB 这五个分层的负载均衡策略 1

随机推荐

  • typescript版本的扫雷游戏设计(思路+代码)

    思路 生成图片矩阵 点击格子 如果 第一次 且 新游戏 生成除该格子外的雷图 统计数字 如果 该格子是雷 爆炸 否则 如果 格子数字是0 深度搜索0区域 加入展示区域 如果格子已经打开 忽略 如果格子标识旁边有雷 把该格子加入展示区域 打开
  • 动画程序时长缩放是什么意思_修手机的朋友说:安卓机这样设置,感受跟苹果一样的过渡动画...

    众所周知 IOS系统的过渡动画是出了名的丝滑 因为就在安卓系统挤破脑袋追求流畅时 苹果工程师竟然反其道而行的降低了手机响应频率 这就导致iPhone的使用者在不同页面和软件切换时能明显感知到一个从慢到快的过程 这项功能在原厂的安卓系统上是没
  • 值得一看的技术类书籍

    1 linux 书 Debug Hacks中文版 深入调试的技术和工具
  • C语言开发MicroPython模块(向module添加type)

    MicroPython向module添加type的方法 以及向type添加function的方法都是按照定义好的固定框架进行添加 module添加type的代码格式如下 include stdint h include stdio h in
  • M2芯片安装Anaconda和pytorch

    记录安装过程中遇到的问题 希望帮助到同样用mac的朋友 1 安装好Anaconda后 在启动台无法打开navigator 解决办法 终端输入 which anaconda navigator 返回navigator所在位置 command
  • SpringCloud Stream @EnableBinding注解过时

    EnableBinding源码中明确声明 该注解在从3 1版本开始被弃用 推荐我们使用函数编程的方式 我将给出一个生产者和消费者的使用案例 生产者案例 yml配置 server port 8801 spring application na
  • 最最最详细的springboot项目中集成微信扫码登入功能.步骤代码超级详细(OAuth2)

    说到登录注册 就会想到先要注册一个用户名 在进行登入 但是现在大多数的网站都集成了微信登入 不需要注册 给你一个二维码 微信一扫直接登录 这确实是十分便捷的 所以我们会尽量在项目中实现这一功能 减少用户操作 提高用户产品体验 由于微信是腾讯
  • MIPS架构下linux软浮点研究

    转自 http blog sina com cn s blog 67b113a10100zxx3 html 在嵌入式领域 为了节省成本和减少功耗 很多芯片都是没有浮点运算模块的 一般该模块叫做FPU float process unit 这
  • 爬虫写得好,牢饭吃到饱?

    先说一条新闻 一家专注大数据的数据服务提供商公司巧达科技 因为大量使用爬虫访问其他公司接口获取数据 整个公司被抓 最后不光管理者 干活的程序员也被抓了 很多学python的同学都接触过爬虫 即便是没接触过应该也听过 看到这种新闻你会不会心里
  • MySQL管理常用工具介绍

    1 mysql 该mysql不是指mysql服务 而是指mysql的客户端工具 e选项可以在Mysql客户端执行SQL语句 而不用连接到MySQL数据库再执行 对于一些批处理脚本 这种方式尤其方便 示例 2 mysqladmin mysql
  • 第一启富金:两大利空压顶 黄金受压收跌

    第一启富金官网显示 全球最大黄金上市交易基金 ETF 截至01月19日持仓量为976 21吨 较上日持平 本月止净增持0 55吨 香港第一金 投资者的注意力仍集中在美联储1月25日至26日的会议上 此前美联储官员暗示 他们将在3月开始加息以
  • Spring-MVC的文件上传下载,及插件的使用(让项目开发更节省时间)

    目录 一 概述 1 介绍 2 讲述 二 上传 三 下载 四 jrebel的使用 五 多文件上传 给我们带来什么收获 一 概述 1 介绍 Spring MVC的文件上传下载是指在Spring MVC框架中实现文件的上传和下载功能 文件上传是指
  • 【Python基础】深拷贝,浅拷贝和赋值

    浅拷贝 在含有多层对象的字典 列表 集合中 浅拷贝只拷贝父对象 不会拷贝父对象内部的可变子对象 语法 copy copy 深拷贝 只要被拷贝对象含有可变子对象 程序就会重新申请一块内存空间把被拷贝对象的值复制一份存放到该内存空间中 语法 c
  • 前端面试话术集锦第 15 篇:高频考点(React常考进阶知识点)

    这是记录前端面试的话术集锦第十五篇博文 高频考点 React常考进阶知识点 我会不断更新该博文 1 HOC 是什么 相比 mixins 有什么优点 很多人看到高阶组件 HOC 这个概念就被吓到了 认为这东西很难 其实这东西概念真的很简单 我
  • JAVA基础day04

    package com atguigu exer 1 创建一个名为TestArray的类 在main 方法中声明array1和array2两个变量 他们是int 类型的数组 2 使用大括号 把array1初始化为8个素数 2 3 5 7 1
  • redis优化-5.redis主从复制问题处理

    1 读写分离 1 1复制数据延迟 Redis复制数据的延迟由于异步复制特性是无法避免的 延迟取决于网络带宽和命令阻塞情况 比如刚在主节点写人数据后立刻在从节点上读取可能获取不到 需要业务场景允许短时间内的数据延迟 对于无法容忍大量延迟场景
  • 动态规划系列之「最长递增子序列的个数」

    673 最长递增子序列的个数 给定一个未排序的整数数组 找到最长递增子序列的个数 示例 1 输入 1 3 5 4 7 输出 2 解释 有两个最长递增子序列 分别是 1 3 4 7 和 1 3 5 7 示例 2 输入 2 2 2 2 2 输出
  • 计算机编程入门先学什么最好?

    看完其他知友的回答 我认为他们的观点过于局限 并没有真正切中问题的要害 我们不妨换个角度 站在更高一层来看这个问题 计算机编程入门先学什么最好 计算机入门最应该学的是 Linux 而非任何的编程语言 这篇文章4600字 有点长 如果你能耐心
  • spark 读取avro文件

    1 引入依赖
  • FastCFS同步复制机制简介

    FastCFS同步复制机制简介 本篇文章转载于 FastCFS 作者 余庆 大佬的 FastDFS分享与交流 公众号 上一篇文章介绍了 FastCFS 采用数据分组的做法 一个数据分组的几个节点 如三个节点即三副本 之间是 Master S