fractalbits-labs/fractalbits
GitHub: fractalbits-labs/fractalbits
FractalBits是一个专为AI和大数据设计的高性能S3兼容对象存储系统,解决存储性能瓶颈和成本问题。
Stars: 271 | Forks: 13
# FractalBits
**高性能 S3 兼容对象存储**
[](https://github.com/fractalbits-labs/fractalbits/actions/workflows/ci.yml)
[](https://opensource.org/licenses/Apache-2.0)
## 概述
FractalBits 是一个 S3 兼容的对象存储系统,专为高性能和低延迟而设计。使用我们自研的存储引擎,单个存储桶可实现高达 **100 万次 4K 读取 IOPS**,p99 延迟约 5ms,成本远低于 AWS S3 Express One Zone。与标准 S3 不同,FractalBits 提供**对对象和目录的原生原子重命名支持**。
**分形 ART** (自适应基数树) 存储引擎采用全路径命名方法,避免了传统基于 inode 的系统所需的重量级分布式事务,在提供目录语义(包括原子重命名等)的同时,实现了卓越的可扩展性。这使得 FractalBits 成为需要原子操作来管理数据集和检查点的 AI 训练管道和数据处理工作流的理想选择。
API 网关和控制平面使用 Rust 构建,性能关键的存储引擎和数据平面使用每核心的 io_uring 进行异步 I/O。这种组合在保持超低延迟的同时,能够实现每秒数十万次操作。
**核心亮点:**
- 🚀 **约 100 万 IOPS** (4KB 对象),单个存储桶 p99 延迟约 5ms
- 🔄 **原子重命名支持** - 适用于对象和目录 - 标准 S3 所缺乏的原生能力
- ⚡ **分形 ART** 全路径存储引擎,提供卓越性能和可扩展性
- 💰 **高性价比** - 对于小对象工作负载,成本远低于 AWS S3 Express One Zone
- 🌐 **5 分钟自带云部署** - 可通过 `just deploy` 部署到**任何** AWS/GCP 区域
## 性能基准
FractalBits 的性能超越 AWS S3 Express One Zone:
### GET 工作负载
| 指标 | 值 |
|--------|-------|
| IOPS | 982552.31 |
| 吞吐量 | 3838.09 MiB/s |
| 平均延迟 | 2.9 ms |
| P99 延迟 | 5.3 ms |

*基准测试截图,显示 4KB 对象的 GET 性能达到约 100 万 IOPS*
### PUT 工作负载
| 指标 | 值 |
|--------|-------|
| IOPS | 333308 obj/s |
| 吞吐量 | 1301.98 MiB/s |
| 平均延迟 | 4.4 ms |
**基准配置:**
- 对象大小:4 KiB
- 实例类型:14 个 c8g.xlarge (API),6 个 i8g.2xlarge (BSS),1 个 r7g.4xlarge (NSS)
- 成本:基于 AWS 按需 EC2 实例定价,约 $8/小时
- 复制:3 副本数据 Blob 法定人数,6 副本元数据 Blob 法定人数
- AWS 区域:us-west-2
- 工作负载:基于 warp 的 S3 负载测试
*您可以按照下面的 [自带云部署](#byocbring-your-own-cloud) 部分自行验证这些性能指标。*
## 架构
有关 FractalBits 的架构、组件、技术栈和设计决策的详细信息,请参阅 [架构文档](docs/internals/ARCHITECTURE.md)。
## 快速开始 - 本地开发
### 前置条件
有关开发前置条件和设置的详细信息,请参阅 [HACKING.md 中的前置条件部分](docs/HACKING.md#prerequisites)。
**注意**:本指南为方便使用 [`just`](https://github.com/casey/just) 命令运行器。所有 `just` 命令也可以使用 `cargo xtask` 运行(例如,`cargo xtask build`,`cargo xtask service`)。
### 构建
克隆仓库并构建所有组件:
```
git clone https://github.com/fractalbits-labs/fractalbits.git
cd fractalbits
# Initialize repo
just repo init
# Build all components
just build
```
### 运行服务
在本地初始化并启动所有服务:
```
# Initialize service configuration
just service init
# Start all services (API, BSS, NSS, RSS)
just service start
# Check service status
just service status
# Check service with normal systemd commands
systemctl --user status api_server
journalctl --user -u api_server
```
服务将可在以下地址访问:
- **API 服务器**:`http://localhost:8080` (S3 API 端点)
### 基本使用示例
服务运行后,使用任何 S3 兼容客户端:
```
# Export AWS environment variables to use our own service
export AWS_DEFAULT_REGION=localdev
export AWS_ENDPOINT_URL_S3=http://localhost:8080
export AWS_ACCESS_KEY_ID=test_api_key
export AWS_SECRET_ACCESS_KEY=test_api_secret
# Create a bucket
aws s3 mb s3://my-bucket
# Upload an object
echo 'Hello FractalBits!' > test.txt
aws s3 cp test.txt s3://my-bucket/
# Download an object
aws s3 cp s3://my-bucket/test.txt downloaded.txt
# List objects
aws s3 ls s3://my-bucket
# Stop services when done
just service stop
# Unset environment variables, or exit
unset AWS_DEFAULT_REGION AWS_ENDPOINT_URL_S3 AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
```
### 运行测试
执行 S3 API 兼容性测试套件:
```
# Run S3 API regression tests
just precheckin --s3-api-only
# Run with all unit tests also
just precheckin
```
## 快速开始 - Docker
在单个 Docker 容器中运行 FractalBits,用于快速测试和评估。
Docker 镜像将所有服务(API 服务器、BSS、NSS、RSS)捆绑到一个由 `container-all-in-one` 二进制文件编排的单个容器中。
### 使用 `just` 命令 (推荐)
```
# Build Docker image (uses debug build by default)
just docker build
# Build release Docker image
just docker build --release
# Run container (foreground)
just docker run
# Run container with custom port
just docker run --port 9080
# Run container in background
just docker run --detach --name fractalbits-dev
# View logs
just docker logs --name fractalbits-dev --follow
# Stop container
just docker stop --name fractalbits-dev
```
### 直接使用 Docker
由于存储引擎使用 io_uring 进行高性能异步 I/O,容器需要 `--privileged` 模式。
```
# Run the latest image
docker run --rm --privileged -p 8080:8080 ghcr.io/fractalbits-labs/fractalbits:latest
# Run a specific version
docker run --rm --privileged -p 8080:8080 ghcr.io/fractalbits-labs/fractalbits:
# Run your custom-built image (after `cargo xtask docker build`)
docker run --rm --privileged -p 8080:8080 fractalbits:latest
# Run in background with persistent data
docker run -d --privileged --name fractalbits \
-p 8080:8080 \
-v fractalbits-data:/data \
ghcr.io/fractalbits-labs/fractalbits:latest
```
运行后,请参阅 [基本使用示例](#basic-usage-example) 了解 S3 客户端命令。
## 自带云部署
FractalBits 使自带云部署变得简单:构建一次,单个命令部署,在 5 分钟内即可在 AWS/GCP 上启动完全可操作的云存储系统。
### 从源代码构建 (可选)
默认情况下,部署使用预编译的二进制文件。要构建和部署您自己的二进制文件:
```
# Make sure cargo-zigbuild is installed for cross-compilation
cargo install --locked cargo-zigbuild
# Build binaries for deployment
just deploy build
```
### 部署到 AWS
请确保您的 [AWS CLI 配置设置](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html) 已正确设置。
```
# Deploy with perf_demo template (14 API servers, 42 bench clients, 6 BSS nodes)
# Use "mini" template for a single instance of each node type.
just deploy create-vpc --template perf_demo --with-bench
# View deployed stack information
just describe-stack
# Log into ec2 instance nodes
aws ssm start-session --target
# If the VPC is created with `--with-bench`, you can log into bench_server to run
# pre-defined benchmark workloads (get_4k, put_4k, mixed_4k, get_64k, put_64k, mixed_64k)
WORKLOAD=get_4k /opt/fractalbits/bin/bench_start.sh
# Destroy VPC infrastructure (including S3 builds bucket cleanup), which needs confirmation
just deploy destroy-vpc
```
## S3 API 兼容性
FractalBits 支持最常用的 S3 操作,并具有完整的 AWS Signature V4 身份验证。有关完整的详细信息,包括支持的操作、扩展 API、身份验证和限制,请参阅 [S3 API 兼容性](docs/S3_API_COMPATIBILITY.md)。
我们正在积极扩展 S3 API 的覆盖范围。请查看我们的 [路线图](docs/ROADMAP.md) 了解计划的功能和时间表。
## 支持
- 📖 **文档**:查看 [docs/](docs/) 目录
- 🐛 **错误报告**:[GitHub Issues](https://github.com/fractalbits-labs/fractalbits/issues)
- 💬 **讨论**:[GitHub Discussions](https://github.com/fractalbits-labs/fractalbits/discussions)
- 👥 **Slack**:[加入 FractalBits 社区](https://join.slack.com/t/fractalbitscommunity/shared_invite/zt-3j9b3iw0l-NFSW3cjo~DEF~jqfBp1mzA)
- 📧 **邮件**:thomas@fractalbits.com (用于私人咨询)
**为高性能对象存储倾心打造 ❤️**
标签:AI存储, AI训练, BYOC, io_uring, POSIX兼容, Rust语言, S3兼容, 云原生存储, 云存储, 代码示例, 低延迟, 分布式存储, 原子操作, 可视化界面, 多协议存储, 大数据存储, 存储引擎, 实时存储, 对象存储, 并发I/O, 成本效益, 数据分析, 数据管理, 文件系统, 漏洞利用检测, 请求拦截, 通知系统, 高吞吐, 高性能存储