快速开始

三句话认识 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_DBDOZYFS_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 的路径上,像本地磁盘一样读写——而宿主侧持续把数据上传到对象存储。

说明 想要端到端在真机上跑通(控制面 + JuiceFS-HA + 真实 cloud-hypervisor microVM + 网关),可参考仓库中的 deploy/aws/deploy_all.sh;Kubernetes(CRD + 控制器 + cat-agent DaemonSet)部署见 deploy/k8s/README.md

路径 B:云端(托管)

不想自己运维 node 机群,就用 dozycat Cloud——完全托管、按用量计费,有免费额度可立即上手。

  1. 注册账号并登录控制台。
  2. 在控制台里创建一个 volume(等同于 create-volume,但全程图形化)。
  3. 启动一个 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 —— 源码、部署脚本与测试。