标签: 分布式系统

共 5 篇

walgit 离 Cursor 的 Continuity 还差在哪

2026年10月27日

Cursor 说 Continuity 在 S3 上每秒能接 120 次 push,号称照着它实现的 walgit 在我的机器上只有每秒 6 到 25 次。先对齐两边的设计,再排除桶延迟和机器,最后顺着“越推越慢”追到每个 push 留下的 pack 和跟不上的压缩。

从 GitLab 看传统代码平台的架构演进

2026年10月17日

一个 bare 仓库加上 SSH 就是一台 Git 服务器:认证、接管道、在仓库上跑 git,三件事都在一台机器上。GitLab 的本质还是这三件事,只是把 git 命令按仓库分散到很多台机器上去跑。顺着拆开的六处接缝往下看:Gitaly 为什么让应用远程请它跑 git,入口怎么先问 Rails,pack 怎么跨过网络,一台机器怎么替所有人跑 git,push 检查怎么回到另一台机器,Praefect 怎么用副本兜底,以及 GitLab 正在改的最底下那一层。

Gerrit 的平台架构创新

2026年10月17日

一个裸仓库加上 SSH 就是最小的 Git 服务器,代码平台是在它之上补出来的。Gerrit 出自 Google“先评审、后合并”的传统,比 GitLab 更早,评审的单位是一个提交而不是一个分支,评审记录本身也写进了 Git。顺着这条线往下追:Gerrit 为什么用 JGit 自己做服务端,push 到 refs/for/main 时发生了什么,评审数据为什么从 SQL 搬进 Git,引用多到几十万个之后怎么存、怎么按权限过滤,合并时怎么保证原子性,索引和缓存怎么配合,以及多台机器之间怎么同步。

walgit 架构原理:把 Git 仓库交给对象存储

2026年10月17日

walgit 的一次 push 只对桶发 5 个请求,一次读只发 1 个,却保证确认后任何一台机器都能读到。为什么不能让 git 直接读对象存储,manifest 的 CAS 又凭什么就是提交点?并发 push 和每秒一次写的限制,是另一道坎。

从 git clone 说起:Git 服务器是怎么工作的

2026年10月14日

一次 `git clone` 在网络上到底交换了什么?抓包只看到三次 HTTP 请求。从搭一个最小的 Git 服务器开始,GitLab 的 Gitaly、Gerrit 的引用、walgit 的预写日志,都是在补它补不上的那一块。