软件开发中的决策:权衡与取舍
上QQ阅读APP看书,第一时间看更新

2.1 代码库间的通用代码及重复代码

我们会讨论微服务架构中共享代码存在的设计问题。假设这样的场景,有两个开发团队,分别是团队A和团队B。团队A为Payment服务工作,团队B为Person服务工作,如图2.1所示。

图2.1 两个独立的服务:Payment和Person

Payment服务在/payment URL端点上提供了一个HTTP API。而Person服务在/person端点上提供了它对应的业务逻辑。我们假设这两个代码库都使用相同的程序设计语言编写。为了能快速交付需求,此时,两个团队都在紧锣密鼓地开展各项工作。

高效软件开发团队能快速交付软件产品的重要原因之一是不需要在多个团队之间同步信息。我们可以借用阿姆达尔定律来估算同步信息对软件交付整体周期的影响。该定律表明同步的需求越少(因此,更多的工作)可以并行,通过增加资源来解决问题能达到的效果越明显。图2.2对这一定律进行了说明。

图2.2 阿姆达尔定律发现系统整体可达的最大处理速度取决于可并行处理的工作所占的百分比

譬如,如果你的任务仅有50%的时间可以进行并行处理(另外50%的时间需要进行同步处理),即便增加资源(即图2.2中的处理器个数)也无法显著提升处理速度。任务的并行度越高,同步的开销越小,增加资源而提升处理速度越明显。

我们可以使用阿姆达尔公式计算并行度,得出增加更多资源可获得的效益,我们也可以将该公式应用到工作于特定任务的团队成员上。减少并行的同步时间,包括花费在会议、合并代码分支以及需要全团队出席的活动所占用的时间。

若允许代码重复,各团队可独立开发,不需要进行团队之间的信息同步。因此,为团队增加新的成员能提升生产率。如果消除重复代码,情况就截然不同,这时两个团队需要在同一段代码上开展工作,随时可能因为代码变更而阻塞对方的工作。