
一台服务器上运行 60 个容器
一个裸金属服务器运行数十到数百个 Hoody 容器。KSM 和 BTRFS 去重使边际成本接近零。
200GB Postgres 备份在法兰克福,新加坡有一台新机。跳过 S3 中转。一条 curl 把 pg_dump 管道送到 Hoody pipe URL;另一条 curl 在对面把它直接流进 psql。字节在飞行中,从不停歇。
200GB · 零跳板 · 零滞留
Hoody Pipe 是 HTTP 服务器上一条命名路径。发送端用 PUT 把流送到它,接收端 GET 同一路径,服务器把两端拼接起来。什么都不写盘;管道按设计存零字节。
在源机上,pg_dump | gzip | curl -T - 到 pipe URL。PUT 体在 TCP 反压允许下尽快流。服务器在接收端到达同一路径前一直保持连接。
PUT /api/v1/pipe/migration接收端的 GET 落到同一路径时,Hoody 把上传的字节直接拼进下载响应。无缓冲区、无落盘暂存、无异步提交——只是两个 HTTP 套接字之间的直接流。
0 bytes on disk在目标机上,curl GET 路径,把响应管道送给 gunzip | psql。发送端最后一字节落下,接收端这一侧的流就结束。无重试、无清单、无清理。
GET /api/v1/pipe/migration连接顺序无所谓——接收端可以先 curl 并阻塞,等发送端到来(或反过来),最长可达 5 分钟管道 TTL。反压端到端流动:psql 慢就限到源端的 curl。没有队列要溢出,因为根本没有队列。
这不是伪代码。在两台服务器上各开一个终端,各跑一条,然后看着 200GB 备份从一片云离开,落到另一片云。
PUT(curl -T)更被推荐,因为 curl 本来就喜欢这样上传流。POST 同样可用——同路径、同状态信息。如果要把同一份 dump 扇出给多个接收端,两边都加 ?n=N。
第三台笔记本用同一 pipe URL 加 ?progress 打开,就拿到一份实时 SSE 流——每秒字节、ETA、已连接接收端。旁观不消耗接收端席位——五十个队友可以一起看迁移,不必改 n,也不影响传输。
S3 中转在白板上看着简单。生产里它是一堆按秒收费的部件。管道把整堆塌缩进运输本身。
S3、GCS、Azure Blob——中转之所以存在,是因为没有别的地方放字节。管道就是路径。无桶要预备、无生命周期规则、无事后清理。
上传出站、下载出站——两次。用管道,字节从法兰克福离开,一跳到达新加坡。你为连接打开的秒数付费,不为明天就要删的存储付费。
你的监控已经懂 HTTP。VPN、防火墙、审计日志也都懂。无新 IAM 身份、无新 SDK、无新故障模式——它就是一条 curl。
速度受较慢一端端到端约束(法兰克福出站、新加坡入站、你的 TCP 窗口)。Hoody 的管道存零字节——没有服务端存储;反压直接在两端之间流。
凡是因为没人有一条会流的 HTTP 路径才存在的东西。管道把整套数据迁移栈塌缩成两端各一条 curl。
跳过桶。运输就是 URL。