多存储库和单存储库之间的微服务发布管理比较多存储库和单存储库方法之间的差异。让我们想象一个由数十个连续部署的自治服务组成的微服务应用程序。应用程序的每个服务场都有自己的存储库。他们有不同的版本控制方案,并且不断发布不同团队的新版本。那么,随着变更历史分散在这几十个存储库中,我们如何有效地跟踪变更、跟踪它们的不同版本并管理应用程序的发布?想必这是任何一个使用微服务架构的团队都需要处理的问题。下面,我将与您讨论可用于管理微服务发布的两种不同方法。通用方法:一微服务一库目前,采用微服务架构的应用通常采用最常见的multirepo(多库)的方法,即:1.设计一些可以分解成微服务的。2.为每个微服务创建一个单独的存储库。3.让每个存储库都有一个独立的CI/CD管道,用于将微服务持续部署到生产中。这种细粒度的持续部署形式可以称为微部署。通过微部署,微服务版本可以独立部署,几乎不需要集成测试。每个微服务都有一个单独的CI/CD管道。可以说,微部署是将代码组织成多存储库的必然结果。上图展示了SemaphoreCI/CD目前是如何部署微服务的。维护多个连续发布的微部署非常适合由Netflix或SemaphoreCI/CD等平台托管的应用程序。在此类应用程序中,在后台运行的各个微服务的版本既不为用户或客户端所知,也不对其感兴趣。但是,持续部署不适用于在本地运行的同一应用程序。为此,我们只能发布一组固定在特定版本中的微服务。例如,您可以使用SemaphoreOn-Premise在防火墙后运行全功能版本的SemaphoreCI/CD。对于托管应用的微部署,需要结合产品本地实例的发布。通常,我们可以按照以下步骤发布组织成multirepos的应用:1.在每个repo(存储库)中,标记那些要发布的微部署服务版本。2.为每一个微服务构建一个Docker镜像,并将微服务的版本映射到镜像标签上。3.在单独的测试环境中,使用集成测试、验收测试,甚至手动测试,对即将发布的版本进行全面测试。4.在更新文档之前,检查每个存储库并为已发布的变更日志编译相应的变更列表。5.确定旧版本所需的各种修补程序。6.发布版本。鉴于一个应用程序可以包含数十个微服务(和存储库),很容易看出以这种方式发布会导致大量重复的管理开销。使用Monorepos(单一仓库)管理发布显然更适合持续部署。而对于那些非预定的、非连续的发布,我们需要将所有的微服务聚合到一个共享的存储库中。这是Google、Airbnb和Uber等大公司多年来一直使用的Monorepo方法。Monorepo包含所有微服务和统一的CI/CD部署管道。Monorepo策略将使微服务更像是一个单一的应用程序。优点是创建发布就像创建分支和使用标签一样简单。单个CI/CD流程可标准化测试和部署。更容易实施集成和验收测试。单一的Git历史更容易理解,并简化了编写变更日志和更新文档的过程。所有变更由一个CI/CD管理的Monorepo模式的主要特点如下:由于所有变更都提交到一个地方,CI(持续集成)服务器将承受更大的压力。我们可以通过使用基于变更的执行或Monorepo感知工具来处理这个问题,例如:Bazel、Pants。由于Git没有内置代码保护,如果您需要加固您的应用程序,您可以使用类似:Bitbucket或GitHubCODEOWNERS。当测试套件跨越多个独立的服务时,可能很难找到和处理CI构建中的错误。为此,测试报告等功能可以帮助识别和分析问题。monorepo的CI/CD配置可以有很多重复的部分。为此,我们可以使用环境变量或参数化管道来减少样板文件。不要忘记可恢复性到目前为止,我们只关注应用程序的可发布性,所以接下来让我们关注可恢复性。版本控制不仅允许我们协作、共享知识、跟踪代码和管理更改,它还提供了在出现问题时的弹性。只要我们可以访问项目中的任何更改,我们就可以“闪回”到任何版本。但是,由于Multirepos没有记录微服务之间的关系,即:没有任何给定时间点生产环境中运行的服务的版本快照,所以我们诊断一些集成问题非常耗时..在某些情况下,我们甚至无法通过回滚微服务来解决问题。Multirepos很难找到失败的根本原因,有时很难找到“最后使用的微服务配置”,而Monorepos能够轻松捕获系统的完整快照,以便在项目历史的任何时候为我们提供我们需要的东西所有的细节,然后在出现问题的时候,找到一个合适的回撤点。Monorepo有返回项目历史上任意时刻微服务关系所需的细节总结综上所述,我们应该为微服务配置管道和存储库,还是配置全局管道和共享村库,目前还没有绝对的定论.如果您的微服务是松散耦合的,Multirepo和Monorepo都可以正常工作。当然,Multirepos负载很重,但给你更多的自主权。而如果你的服务之间存在耦合关系,那么你最好使用Monorepo来保证其可恢复性。在上面提到的Semaphore平台中,采用持续微部署的方式可以取得更好的效果。但在SemaphoreOn-Premise中,我建议您将核心微服务迁移到Monorepo。译者简介JulianChen,社区编辑,拥有十余年IT项目实施经验,善于把控内外部资源和风险,专注传播网络与信息安全知识与经验。原标题:ReleaseManagementforMicroservices:Multivs.Monorepos,作者:TomasFernandez
