单一仓库

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程的每个阶段提供云产品。 立即开始使用 免费赠送 200 美元积分!

我不是一个大型 DevOps 人员,但我可以告诉你,我们在 CodePen 正在转向单一仓库,与拥有许多小型仓库的系统相比,它具有很多优势。 对我们来说,我的意思是。 你很可能面临着完全不同的挑战,并在你的公司得出了完全不同的结论。 🤙

在阅读了 Ben Nadel 的“为什么我一直在将微服务合并回 InVision 的单体架构”后,我一直在思考这个问题。 虽然我们的结论相似,但我可以看出他面临着一套完全不同的问题。

微服务解决技术人员问题

一个 技术问题 是应用程序的一个方面给基础设施带来了过度的负担,这反过来很可能会导致糟糕的用户体验 (UX)。 例如,图像处理需要大量的 CPU。 如果这个 CPU 负载变得太大,它可能会开始剥夺应用程序的其他部分的处理资源。 这会影响系统延迟。 而且,如果情况变得足够糟糕,它可能会开始影响 系统可用性


另一方面,一个 人员问题 与应用程序本身几乎无关,而与您的团队的组织方式有关。 您在应用程序的任何给定部分工作的人员越多,开发和部署就会变得越慢、越容易出错。 例如,如果您有 30 名工程师都在争夺同一个服务的“持续部署”(CD),您将获得大量的排队; 这意味着,许多工程师 原本可以交付产品 实际上是在等待轮到他们部署。

单一仓库的优势(对我们而言)

  • 一枚戒指统治所有。git pull 一个 仓库,你就可以 100% 与其他人保持同步,并拥有完成开发环境所需的一切。
  • 没有流浪狗。 在 GitHub 上,没有关于哪里是行动发生的混淆。 你针对单一仓库进行拉取请求。 你在单一仓库上创建问题。 这避免了散乱的活动,这些活动会丢失。
  • 齐心协力。 你可以共享代码。 这对于在代码库中的任何地方共享实用程序或组件特别有用。 我们尝试过将共享的组件发布到 npm 以供其他仓库使用,但与将代码集中在一个地方相比,这种工作流程很笨拙。
  • 共同成长。 不会有陈旧的被遗忘的仓库,因为它只有一个。 对于我们的小团队来说,拥有几十个仓库意味着其中一些仓库拥有陈旧的过时依赖项、古老的 Node 版本、与其他仓库不一致的 linting 和格式化规则等。

单一仓库的缺点(对我们而言)

  • 部署棘手。 我认为我们最初将仓库拆分的根本原因是,这些仓库中的代码需要放到独特的位置。 它们可能代表了某个服务器上的单个 Lambda 或单个服务。 单独的仓库意味着更容易连接到该服务器/服务特有的内容,例如 CI/CD。

是的,我知道这很有争议。

我实际上并不那么在意。 我不会像空气炸锅爱好者和 CrossFit 狂热者那样对这件事太过执着。 这是 Matt Klein 关于 反对 单一仓库的 完整论据

我只是想说:这对我们来说已经明显有用。 我可以看出其他公司的情况会有所不同。 我可以看出,与承包商合作的公司可能希望将他们的访问权限限制在整个单一仓库以外。 我可以看出 Git 仓库可能会变得笨拙且庞大。 这些目前对我们来说不是 CodePen 的问题,因此单一仓库的优势胜出。