TikTok发布工具以提升Monorepo性能

TikTok 推出开源工具 Sparo,优化大型 Monorepo 性能

TikTok 的工程师团队近日宣布推出一款名为 Sparo 的新工具,旨在解决使用 Monorepo 时遇到的性能问题,特别是当代码库规模庞大时,常见的 Git 命令(如 statusdiffcheckout)性能下降的问题。

Monorepo 的挑战

Monorepo 是一种将多个项目(从应用程序到微服务)存储在单一 Git 仓库中的技术。它提供了更好的可见性、协作和工具标准化,但随着仓库规模的增长,开发者可能会遇到显著的性能问题。TikTok 的前端团队就面临了这样的挑战,他们的 TypeScript Monorepo 增长到包含 1,000 多个项目和 200,000 多个源文件。

Sparo 的诞生

TikTok 的前端基础设施工程师 Adrian Zhang 在开发博客中详细描述了团队在 Monorepo 性能上的困扰。例如,网络较慢的用户报告 git clone 操作耗时超过 40 分钟。团队尝试了多种优化技术,包括部分克隆浅克隆Git 大文件存储 (LFS),但最终决定开发一个新的开源工具——Sparo。

Sparo 利用 Git 的两项关键功能——稀疏检出(Sparse Checkout)部分克隆(Partial Clone)——显著提升了常见 Git 命令的速度。稀疏检出允许开发者仅检出所需的文件子集,而部分克隆则通过按需获取文件内容并排除无关历史记录来进一步优化性能。

Sparo 的设计灵感来自 Microsoft 的 Scalar 和 Twitter 的 Focus,并增加了团队特定的功能。例如,检出配置文件允许团队定义开发者通常使用的项目和依赖集,而 Sparo CLI 则作为 Git CLI 的直接替代品,拦截每个命令以确保 Git 以最优方式调用。

性能提升

Sparo 显著提升了 TikTok 团队的开发效率。例如,git clone 操作从原来的 23 分钟缩短到仅 2 分钟,git checkout 操作从 1 分 26 秒缩短到 30 秒。

GitHub 的 FSMonitor

GitHub 工程团队也在努力提升 Monorepo 性能,并在 Git 2.37.0 中引入了内置的文件系统监视器(FSMonitor)功能。FSMonitor 通过仅搜索最近修改的文件来减少 git status 等命令的时间,而不是扫描整个工作树。结合 core.untrackedcache 功能,FSMonitor 可以将 git status 中未跟踪文件部分的性能提升 10 倍。

代码审查工具 Graphite 的建议

代码审查软件供应商 Graphite 强调了维护可扩展 Git Monorepo 的最佳实践,包括:

  • 使用 rebase 保持提交历史的清洁和线性
  • 管理标签和引用以防止性能下降
  • 组织目录结构以便于导航
  • 维护干净的分支管理策略,如基于主干的开发

Sparo 的开源与未来

TikTok 团队认为开源 Sparo 是开发过程中的重要一步。尽管最初因时间压力选择了闭源开发,但团队最终决定将其开源,并在 GitHub 上获得了更专业的文档和更广泛的反馈。未来,Sparo 的开发将集中在两个关键特性上:遥测插件系统以支持监控仪表板,以及支持其他前端工作区,超越当前的 RushJS 实现。

安全考量

在开发 Sparo 时,TikTok 团队还考虑了安全影响,并引入了安全专家的审查流程,为项目带来了新的视角。

通过 Sparo,TikTok 团队不仅解决了自身的 Monorepo 性能问题,还为开发者社区提供了一个强大的工具,帮助更多团队应对大规模代码库的挑战。

阅读 25
0 条评论