Web UI 代码和微服务在同一个 monorepo 中?

Web UI code and microservices in the same monorepo?

我们是一家初创公司,正在开始将我们的整个网络应用程序移植到一个解耦概念的过程,其中 Angular 网络 UI 与微服务集合对话。这是您的标准现代方法。 我们的策略不符合标准的是,我们的 CTO 强烈建议(基本上坚持)我们将 Angular 前端的代码与 [=13] 中编写的所有微服务一起包含在同一个 monorepo 中=].假定的优点是,如果一切都在同一个回购协议中,那么对通用协议(如 JSON 结构等)的更改将更容易处理。 虽然我完全同意将所有微服务保留在同一个 monorepo 中,但我真的很犹豫是否将 Angular 代码也放在那里,主要是因为我似乎找不到这样做的任何最佳实践或先例。我搜索了又搜索,似乎没有人愿意分享这种设置的经验。对于这种特定类型的设置,是否有推荐的方法?

如果您查看“具有微服务的 12 因素应用程序”,您将获得有关最佳实践的详细信息。

如果你的代码在一个单一的 repo 中,使用 CI/CD 工具在任何地方一次签入将同时部署后端系统的所有服务和 UI 在前端,这可能是一开始没问题,但随着您添加更多服务,它会增加部署时间,如果您想避免这种行为,您可能必须编写一些自定义代码来检测特定于 UI/Services 的更改,但您可以获得代码共享的优势。

如果您将 JSON 结构保存在一个公共存储库中并在客户端和服务器端共享,那么您甚至可以与多个存储库共享代码。

一旦您添加更多类型的客户端(例如 iOS/Android,并且每个团队都希望拥有自己的部署和发布周期,这一切都将变得难以管理和部署。

同时,为了简单起见,您可以从单个存储库开始,一旦您开始看到这些问题中的任何一个,您就可以将它们移到单独的存储库中。