#簡介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