主要观点:Sourcehut 过去 SSH 操作 git 过慢,经大量工作后现已改善,现探讨其问题原因、系统结构及解决方式。
关键信息:
- 推送或拉取到 git.sr.ht 需经历 5 个主要任务:调度、识别、授权、执行、后续(钩子)。
- 调度阶段通过
gitsrht-dispatch
二进制确定登录服务,OpenSSH 生成authorized_keys
文件。 - 识别阶段
gitsrht-keys
在本地 Redis 缓存 SSH 密钥,查询用户 ID 等信息,若未命中则询问 meta.sr.ht 并缓存。 - 授权阶段
gitsrht-shell
查找要操作的仓库,对比访问控制列表,若仓库不存在且开启自动创建功能则创建。 - 执行阶段将操作交给 git 相关二进制。
- 后续钩子阶段通过
gitsrht-update-hook
处理更新仓库 mtime、提交 builds.sr.ht 任务、发送 webhooks 等,分 3 个阶段完成,且可能涉及多次 SQL 往返查询。 - 过去慢的原因:各步骤用 Python 编写,启动 Python VM 及导入模块开销大,SQL 配置未优化,部分逻辑移至 web 应用导致处理缓慢,web 工作进程数量固定且只能同时做一件事,增加 git 推送逻辑后会导致工作进程被占用,影响 web 应用和 git 推送速度。
- 现在虽已大幅改善但仍有瓶颈:I/O 吞吐量,服务器繁忙时会先处理其他用户请求,新服务器硬件正在筹备以解决此问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。