BFS-Baidu

百度文件系统
授权协议 BSD
开发语言 C/C++
所属分类 服务器软件、 分布式应用/网格
软件类型 开源软件
地区 国产
投 递 者 冯嘉珍
操作系统 Linux
开源组织 百度
适用人群 未知
 软件概览

The Baidu File System

百度的核心数据库Tera将数据持久化在分布式文件系统上,分布式文件系统的性能、可用性和扩展性对整个上层搜索业务的稳定性与效果有着至关重要的影响。现有的分布式文件系统(如HDFS等)无法满足低延迟、高可用、跨地域扩展等方面的需求,所以我们从百度搜索的业务特点出发,开发了自己的分布式文件系统BFS。

设计目标

  1. 高可靠、高可用
    通过将数据副本进行多机房、多地域冗余,实现单个机房、地域遇到严重灾害的情况下,不丢失数据,不影响整体可用性。
    将元数据服务分布化,通过多副本实现高可用,通过Raft等一致性协议同操作日志,实现多副本的一致性。

  2. 高吞吐、低延迟
    通过高性能的存储引擎,最大化存储介质IO吞吐;通过全局的副本、流量调度,实现热点负载均衡。

  3. 水平扩展
    支持跨地域、多数据中心部署,可水平扩展至10万台机器。

系统架构

系统主要由NameServer、MetaServer、ChunkServer、SDK、bfs_mount和bfs_client等几个模块构成。
其中NameServer是中心控制模块,采用集群化部署,负责目录树的管理;ChunkServer是数据节点负责提供文件块的读写服务;SDK以静态库的形式提供了用户使用的API;bfs_mount通过libfuse,将bfs挂载到本地,作为本地文件系统访问;bfs_client是一个二进制的管理工具。

  • raft具体原理就不说了,在这里只分析下百度bfs中的代码实现。 为了使用不同的同步协议,bfs中把同步抽象了接口,实现方面一个是传统的主从(带快照,类似mysql dump数据+GTID同步方式),一个就是raft了。 具体抽象接口如下: class RaftImpl : public Sync { public: RaftImpl(); ~RaftImpl(); voi

  • 参考博客 http://www.cnblogs.com/xuning/p/3321733.html https://www.cnblogs.com/whywhy/p/4888632.html https://blog.csdn.net/qq_34542903/article/details/51084912 题目描述 某个地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,且有公路的并不都能双

  • 度度熊的01世界 Accepts: 967 Submissions: 3064 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成。 现在给你一个n*m的图像,你需要分辨

  • https://wenku.baidu.com/view/97c9220452ea551810a687e4.html

  • #写在前面 洪水覆盖算法 就是染色法 百度一下呗 不一定要用bfs实现 可以在线性时间复杂度内,找到某个点所在的连通块 ##池塘计数 https://www.acwing.com/problem/content/1099/ ----c++版 #include<iostream> #include<algorithm> #define x first #define y second //为了方便

  • You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i)        fill the pot i (1 ≤ i ≤ 2) from the tap; DROP(i)      empty the pot

  • A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the shortest closed tour of knight moves that visits each square of a given set of n squares on a chessboa

 相关资料
  • 添加百度统计组件,用于统计页面数据。 标题 内容 类型 通用 支持布局 N/S 所需脚本 https://c.mipcdn.com/static/v2/mip-stats-baidu/mip-stats-baidu.js 说明 MIP 百度统计组件基于百度统计 API,请参照 API 将参数配置在 MIP 页。目前事件追踪支持 click, mouseup, load,其它事件暂不支持。 示例 M

  • 引入百度商桥功能。 标题 内容 类型 通用 支持布局 N/S 所需脚本 https://c.mipcdn.com/static/v2/mip-bridge-baidu/mip-bridge-baidu.js 说明 引入百度商桥功能,可以通过以下两种方式之一: 通过参数 site-id 直接引入商桥 通过百度统计 token 引入商桥 示例 通过参数 site-id 直接引入商桥 <mip-brid

  • 百度搜索引擎,采集百度搜索结果。 GitHub: https://github.com/jae-jae/QueryList-Rule-Baidu 安装 composer require jaeger/querylist-rule-baidu API Baidu baidu($pageNumber = 10):获取百度搜索引擎 class Baidu: Baidu search($keyword):

  • 小结 深搜和广搜的相同点 深搜和广搜的框架基本相同,都需要解决如下四个问题: 如何表示状态? 如何扩展状态? 在扩展状态的过程中,如何判断新状态是否有效? 在扩展状态的过程中,如何判断重复? 深搜和广搜的最显著区别,在于第三步,扩展状态的时候,顺序不一样。代码层面上,仅需要修改一行代码,就可以将广搜变成深搜,那就是,把队列queue替换为栈stack,就变成深搜了。 适用场景 输入数据:没什么特征

  • 24.05.23 45mins 部门:百度文库 base北京 面试平台:如流 自我介绍,介绍一个熟悉的项目,离职原因 JS数据类型 基础数据类型和对象数据类型有什么区别 如何判断数据类型 事件循环(宏任务、微任务)举例 JS垃圾回收机制,变量回收 作用域 vue2 双向绑定的原理 双向绑定深度监听失效的原因 父子组件通信 父组件如何调用子组件的方法 nextTick()是什么,使用场景 手撕(共享

  • 我正在研究BFS算法,我有一个关于如何将相邻节点插入队列的问题。 例如,假设我们正在处理一个无向图,我们希望执行BFS来输出图的内容,那么我们如何知道在从队列中取出一个初始节点后,相邻节点以什么顺序插入到队列中呢?还有,有没有办法修改邻居节点插入队列的方式? 任何帮助都将不胜感激,谢谢。