这可能是我今年读过最狠最牛逼的一篇技术文章了,
@cursor_ai 的Vicent Martí写的Git at any scale,老哥在GitHub干了十年Git存储,libgit2那拨人,
先说清楚,这跟Origin上线的软文没关系,Origin现在还是early beta,压测数字不是SLA,镜像仓的source of truth仍是GitHub,
但这篇文章把20年Git托管为什么这么难,讲成了一条干净到可怕的问题链,
最炸的几个点,
第一,Git的分布式在服务端是原罪,Linus给内核去中心化工作流设计的东西,今天所有公司都跑在中心化托管上,客户端每台电脑一份完整仓库是优点,到了服务端就变成了枷锁,服务器上的仓库必须和你笔记本上的长得一模一样,文件系统语义、随机IO、DAG指针追逐,全是按这个假设长出来的,托管Git难,根源在数据模型就别扭,
第二,你不能把Git对象扔进S3或者KV就完事,Git是DAG,读一个commit得先拿到它才知道下一个tree的key,读了tree才知道blob,对象级分布式会被往返延迟打死,有人试过DHT,普通操作还行,git clone因为协议必须吐packfile直接崩了,
第三,GitHub 2013年做的Spokes后来成了行业标准,本地NVMe放完整仓库,packfile复制,引用更新走三阶段提交,强一致,任意副本可读,但死穴很硬,副本越多push越慢被最慢那台拖死,每个仓库要3个副本闲着也占着,仓库必须精确路由checksum坏了赶紧修,官方原话叫repos as pets not cattle,2013年3副本是最优解,今天巨型monorepo不够用,agent海量短命小仓更不够用,
第四,整篇最值钱的翻转,Cursor的Continuity把S3当WAL,磁盘上的Git只是缓存,
Push先写成S3上的WAL,没持久化绝不ack,本地NVMe是标准Git仓库继续用原版Git工具少发明新bug,没有Paxos没有Raft没有路由表没有外部数据库,用S3的原子CAS选primary,复制通知甚至走不可靠的UDP gossip,丢包无所谓,replica对S3做conditional GET,304说明已是最新,200就追上,
有人压成一句话,S3是块魔法软件,你肯让它当真相源,就能消掉90%的Git托管难题,不完全夸张,
第五,伸缩形状终于对上了Agent世界,闲置仓库可以0副本下次访问再从WAL物化,热monorepo可以拉到100+读副本读吞吐线性涨push不回退,压测S3 Standard约120 push/s,S3 Express One Zone 300+,瓶颈变成Git自己的compaction,
人一天几次clone push,agent是几十上百个同时clone开分支rebase修CI,旧架构两头难受,小仓浪费3副本,大仓加不了副本,这才是Origin存在的真正理由,
第六,那句金句也是设计原则,系统降级时永远正确,健康时永远快,降级从S3重建正确性不丢,健康走本地NVMe快,WAL里有完整provenance每个push每次repack都能回放,Git出bug时能精确倒带,
对不搞底层的人,记住三件事,
Cursor做的事情跟GitHub皮肤完全无关,它在给成千上万agent同时撞同一个仓库修地基,上一轮Cloud Agent自动跟PR修CI,底层要的就是这种存储,
别因为这篇文章立刻搬家,Origin早期功能不全定价和安全细节还少,镜像仓push仍回GitHub,
可带走的心智只有一句,别把缓存当真相,日志才是真相,
AI写代码的瓶颈,正在从模型会不会写,变成仓库能不能被一百个agent同时撞而不炸,
我觉得这篇博客真正厉害的地方,是它把这句话写成了一个可运行的存储系统,
但设计厉害和产品打赢是两回事,应该是先敬畏技术,再等产品落地。