快速开始
三句话认识 dozycat,然后通过自托管或云端两条路径,创建第一个卷并让 microVM 挂载它。
dozycat 是什么
dozycat 是一个为 microVM 机群设计的持久化 POSIX 文件系统。它构建在 JuiceFS 之上(对象存储后端 + 高可用元数据引擎 + 本地磁盘缓存),由宿主机运行 JuiceFS 客户端与 virtiofsd,再通过 virtio-fs 暴露给 guest——一个 Cloud Hypervisor microVM,我们称之为 cat。因为数据面与 VM 解耦,暂停、快照或迁移一个 cat 都不会中断宿主侧对对象存储的上传(即“同步永不停止”)。
dozycat 专为 git-on-disk + grep 这类负载调优:元数据密集、1KB–1MB 小文件、读多写少、强一致。可用性取决于元数据延迟,而非带宽。
核心概念速览
| 概念 | 含义 |
|---|---|
| dozycat | 集中式控制面,持有 node / cat / volume / route 注册表;API、UI、CLI 三者同源。 |
| node | 一台裸金属主机,运行一个 cat-agent。 |
| cat-agent | 每 node 一个的本机 agent,驱动 cloud-hypervisor / virtiofsd / 挂载 / drain。 |
| cat | 一个 Cloud Hypervisor microVM。 |
| volume | 一个 dozycat 文件系统,每租户一个。 |
| route | 每个卷的永久稳定名 xxxxx.dozyfs。 |
每个 volume 都有一个永久名 xxxxx.dozyfs。anchor 网关查询注册表的 route 路由表,把请求代理到 cat 当前所在的 node。当 cat 冷启动到新 node 时,只重写绑定行(epoch+1),名字和客户端连接方式始终不变。
路径 A:自托管
完整控制面(dozycat)、cat-agent 与 dozycat 均为开源,可永久免费自托管。先克隆仓库并启动控制面。
git clone https://github.com/dozycat/dozyfs
cd dozyfs
make serve # API + UI 同时监听 :8080
make serve 等价于 python3 -m dozycat.api --db /tmp/dozyfs-registry.db --port 8080。可用 DOZYFS_DB 和 DOZYFS_PORT 覆盖默认值。下面的命令通过 CLI 操作。让 CLI 走远程 HTTP API,只需设置环境变量:
export DOZYFS_API=http://localhost:8080
CLI、UI 与 API 共享同一套方法,能力永不漂移。下面演示注册 node → 创建 volume → 调度 cat → 绑定路由的完整链路。
1. 注册一个 node
dozycat node register \
--node-id node-1 \
--address 127.0.0.1 \
--agent-url http://127.0.0.1:9000 \
--capacity-cats 24
--agent-url 是该 node 上 cat-agent 的 HTTP 端点,dozycat 会把执行计划派发到这里。
2. 创建一个 volume
dozycat registry create-volume \
--volume-id vol-app \
--tenant-id alice \
--gcs-prefix s3://my-bucket/vol-app \
--quota-gb 100 \
--hot-gb 1
3. 调度并激活一个 cat
schedule 做容量感知的放置(挑一个就绪且有空余容量的 node,或校验你指定的 node),然后激活——这一步会把稳定路由绑定到这个 cat。
dozycat registry schedule \
--volume-id vol-app \
--cat-id dozycat-app \
--node-id node-1 \
--guest-ip 172.30.0.2 \
--ports '{"http": 8000}'
也可以直接用控制面控制器模式声明期望状态,由 reconcile 收敛:
dozycat cat set-desired dozycat-app running
dozycat cat reconcile-all --until-converged
4. 通过 xxxxx.dozyfs 访问
激活后,注册表里就有了一条稳定路由。查看它:
dozycat route ls
dozycat route get <name>.dozyfs
anchor 网关读取这张路由表,把发往 xxxxx.dozyfs 的请求代理到 cat 当前所在的 node。cat 内的应用把 dozycat 挂载在如 /mnt/repo 的路径上,像本地磁盘一样读写——而宿主侧持续把数据上传到对象存储。
deploy/aws/deploy_all.sh;Kubernetes(CRD + 控制器 + cat-agent DaemonSet)部署见 deploy/k8s/README.md。路径 B:云端(托管)
不想自己运维 node 机群,就用 dozycat Cloud——完全托管、按用量计费,有免费额度可立即上手。
- 注册账号并登录控制台。
- 在控制台里创建一个 volume(等同于
create-volume,但全程图形化)。 - 启动一个 cat 并把工作负载指向它的
xxxxx.dozyfs稳定名。
控制台、CLI 和 API 背后是同一套控制面方法,因此你随时可以从控制台切到 CLI(设置 DOZYFS_API 指向你的云端点即可),不会丢失任何能力。
选择哪条路径
| 方案 | 适合 | 计费 |
|---|---|---|
| 开源 / 自托管 | 想要完全控制、自有硬件 | 永久免费(Apache-2.0 风格许可) |
| Cloud | 想要零运维、快速起步 | 按用量:活跃 cat-小时 + 存储 GB-月 + 出流量;含免费额度 |
| Enterprise | 需要专属部署、SSO、SLA、支持 | 联系销售 |
下一步
- 核心概念 —— 深入理解 dozycat / node / cat / volume / route 以及冷热轮换。
- 架构 —— 数据面与控制面如何解耦、稳定路由与“同步永不停止”的实现。
- github.com/dozycat/dozyfs —— 源码、部署脚本与测试。
dozycat