#简介node
百度的核心业务和数据库系统依赖分布式文件系统做为底层存储,文件系统的可用性和性能对上层搜索业务的稳定性与效果有着相当重要的影响。现有的分布式文件系统(如HDFS等)是为离线批处理设计的,没法在保证高吞吐的状况下作到低延迟和持续可用,因此咱们从搜索的业务特色出发,设计了百度文件系统。ios
开源地址:https://github.com/baidu/bfsgit
#设计目标github
#系统架构:数据库
系统总体分为NameServer、MetaServer、ChunkServer、SDK、bfs_client、bfs_mount 6个模块架构
#特色负载均衡
#快速使用异步
使用单机搭建BFS模拟集群,只须要三步:`分布式
下载BFS源码工具
git clone https://github.com/baidu/bfs
一键编译
cd bfs; ./build.sh
cd sandbox; ./deploy.sh; start_bfs.sh
到这里,一个用来在单机上测试的BFS集群便已经搭建完成了~ 能够经过bfs_client上传一个文件进行测试:./bfs_client put XXX YYY
,其中XXX
为本地任意文件,YYY
为但愿放到BFS上后的文件名。
#SDK使用
执行make install
,会将使用SDK所需的头文件及静态库放到output目录下,只需包含对应的头文件,连接libbfs.a静态库,即可以在程序中使用BFS存储数据
示例代码以下:
#include <iostream> #include "bfs.h" int main(int argc, char* argv[]) { if (argc < 3) { std::cerr << "Usage ./main <source_file> <target_file>" << std::endl; exit(EXIT_FAILURE); } baidu::bfs::FS* fs; if (!baidu::bfs::FS::OpenFileSystem("bfs.flag", &fs_, FSOptions())) { std::cerr << "Open filesytem failed " << FLAGS_nameserver_nodes << std::endl; exit(EXIT_FAILURE); } FILE* fp = fopen(source.c_str(), "rb"); if (fp == NULL) { std::cerr << "Open local file failed" << std::endl; exit(EXIT_FAILURE); } baidu::bfs::File* file; if (fs_->OpenFile(filename.c_str(), O_WRONLY | O_TRUNC, 664, &file, WriteOptions()) != OK) { std::cerr << "Open BFS file failed " << filename << std::endl; exit(EXIT_FAILURE); } char buf[10240]; int64_t len = 0; int32_t bytes = 0; while ( (bytes = fread(buf, 1, sizeof(buf), fp)) > 0) { int32_t write_bytes = file->Write(buf, bytes); if (write_bytes < bytes) { std::cerr << "Write to BFS failed" << std::endl; exit(EXIT_FAILURE); } len += bytes; } fclose(fp); if (file->Close() != 0) { std::cerr << "Close BFS file failed" << std::endl; exit(EXIT_FAILURE); } delete file; return 0; }
#挂载到本地使用
BFS支持将某个目录挂载到本地进行使用,方法以下:
编译挂载工具
make bfs_mount
进行挂载
nohup ./bfs_mount -d /home/xxx/ -c localhost:8828 -p /yyy > fuse_log 2>&1 &
其中,/home/xxx
为须要挂载到的本地目录,localhost:8828
为BFS集群的NameServer地址,/yyy
为须要挂载的BFS目录 3. 使用 能够cd到/home/xxx
目录下,像使用本地文件系统同样使用BFS
支持团队
百度网页搜索部开源团队 opensearch@baidu.com