在我们的组织中,我们希望采用一种面向服务的体系结构,其中新的需求(自然有界的上下文)正在作为单独的服务构建,这些服务以API的形式集成到主monolith中&有时也是前端的(如果今天我们将使用某种形式的webcomponents )。
今天,我们的一体式开发管道几乎没有固定的非驱动环境(qa、分阶段、演示等)。当我们构建单独的服务时,让这些服务成为这些非prod环境的一部分是最好的实践吗?
我看到的另一个选择是,我们可以只对这些较小的服务使用staging & production,并将所有非prod monolith环境指向staging环境。但是,问题变成了需要构建单个staging环境来隔离和处理来自不同的单点环境的数据。
我知道,最干净和最安全的方法是让所有服务(包括monolith)在任何&所有环境中一起运行。但是,负责这些服务的人员之间的协调也是必要的,对吧?
此外,我们希望为开发人员提供他们自己的按需预览环境。在这种情况下,我们是否要把所有其他服务分拆出来呢?
在我们对这个问题采取一种简单的方法之前,我只是想了解一下其他人在他们的团队中可能面临的不可预见的后果。
发布于 2020-08-01 20:54:06
如果您的monolith很难部署,需要大量的资源,或者即使在开发环境中也有许可成本;那么您需要限制monolith存在的实例的数量。您的选择是创建一个模拟器来手动执行monolith可以完成的任务,这样您就可以测试微服务,或者使用测试直接操作数据存储。
但是,如果您的monolith非常容易部署,您也可以自动化它的部署。可以说,这将是一项“更大”的服务。
您会发现,微服务成功的关键因素之一是尽可能地自动化部署。无论您使用主厨、盐类、TerraForm、CloudFormation,还是使用库伯内特斯这样的编排层进行容器化,都是您必须做出决定的选择。
解决这个问题的方法很多,但其核心是您需要使您的部署和配置尽可能自动化。使这更容易的一些方法包括:
通过将部署作为整个过程的一部分,您的问题会自行回答。一旦您经历了自动化部署和适当配置不同环境的麻烦,为什么不只是在所有环境中进行更改时部署您的服务呢?这使得自动化测试和临时测试更容易完成。
当您与大型软件团队(如亚马逊(商店前)、NetFlix、AirBnB等)交谈时,有一个共同的口号。也就是说,每个服务应该有一个团队。该团队负责与服务相关的一切工作,包括部署、测试、恢复测试、监控等。理想情况下,团队将是一个2个比萨饼团队(大约5-8人,视他们的饥饿程度而定)。
对于像我这样规模较小的开发团队来说,这并不是大多数公司都能做到的。例如,我有两个团队为我工作,将两个应用程序集成到一个应用程序中。为了处理协调工作,我们将计划会议与我们正常的scrum节奏结合起来。
我们的版本通常是4个sprint值的工作,然后部署到生产。然而,与商业集团相比,我们的客户发布软件的官僚作风要大得多。你的经历可能不一样。然而,我可以说,从经验来看,部署越频繁,部署自动化就越重要。
发布于 2021-01-27 22:47:34
我写下了一个专门针对这个主题的6个分钟博客-发帖。我将把它分解成几个要点(本质上,这是一个TL;DR),并添加一些与作者的问题相关的要点。
有更多的理由,你应该分开你的环境,但我认为,这已经足够了。希望能帮上忙。
https://softwareengineering.stackexchange.com/questions/414366
复制相似问题