微服务设计模式(系列)-微服务拆分

Posted amongdata

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务设计模式(系列)-微服务拆分相关的知识,希望对你有一定的参考价值。

软件模式-微服务拆分:按业务能力分解微服务

场景

如果你正准备将你的单体架构(Monolithic architecture)应用改造为微服务架构,并希望使用微服务架构将应用程序构造为一组松耦合的服务。那么第一个要面对的问题就是如何进行服务的拆分。

上图展示了微服务的架构优势,主要包括两方面:

  • 简化测试并允许独立部署
  • 将工程组织结构化为一组小型(6-10名成员)的自治团队,每个团队负责一个或多个服务

这些好处不会自动得到保证。相反,它们只能通过合理的服务分解为实现。

服务必须足够小,以由小型团队开发并易于测试。单一职责(SRP)是一个非常有用的面向对象设计(OOD)原则。SRP将Class的责任定义为只由一个原因而改更,并且Class仅应该为一个原因而改变。将SRP应用于服务设计以使服务是具有少量紧密相关功能的凝聚体。

还可以以另一种方式分解应用,以保证大多数新需求和更改的需求仅影响单个服务。这是因为影响多个服务的变更需要多个团队之间的协调,这减慢了开发速度。OOD的另一个有用原理是闭包原则(CCP),它指出由于相同原因而更改的类应位于同一包中。例如,也许两个类实现了同一业务规则的不同方面。目的是当该业务规则更改开发人员时,只需要更改少量(理想情况下仅更改)一个程序包中的代码。在设计服务时,这种思路很有意义,因为它将有助于确保每次更改仅影响一项服务。

基于业务分解的原则

  • 架构必须稳定
  • 服务必须高内聚,单个服务应该实现一小组强相关的功能
  • 服务必须符合开闭原则, 即一起的变更应该打包在一起,以确保每次变更只影响单个服务(译者注:这只是理想情况,实际上很多情况我们会影响多个服务
  • 服务间必须松耦合,每个服务作为API封装自己的实现,其实现的变更不会影响到客户端
  • 服务必须是易测试的
  • 每个服务是足够小以至于可以由“two pizza” team开发完成,即6-10人
  • 每个开发团队必须是自治的。每个团队必须可以以最小的协作成本进行开发和部署

以上是关于微服务设计模式(系列)-微服务拆分的主要内容,如果未能解决你的问题,请参考以下文章

微服务架构总览

DDD 领域驱动设计落地实践系列:微服务拆分之道

微进程:微服务中后台作业的一种新架构设计模式

微服务化之服务拆分与服务发现

微服务模式系列之三:API网关

微服务的拆分策略