分解微服务:业务能力与领域
Decompose microservices: Business capability vs Domain
据我了解,有两种模式可以定义一个微服务,business capability and by subdomain。但我还是觉得很暧昧。我对这两种模式如何相互区分感到困惑。它们都围绕涉及业务逻辑领域的活动展开。每个服务中的所有组件都足够小,可以在不影响其他服务的情况下相互打包。谁能给我进一步解释一下这两个?
评论者是对的 - 这里有一些主观定义在起作用。但是有一些原则和概念可以帮助推理不同的方法。
康威定律
严格来说不是原来的定义,但我觉得可以参考Conway's Law:
更好理解区别
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
康威逆策略
根据这种想法,Inverse Conway Maneuver 演变为:
The 'Inverse Conway Maneuver' recommends evolving your team and organizational structure to promote your desired architecture. Ideally your technology architecture will display isomorphism with your business architecture.
Inverse Conway Maneuver 试图构建您的组织以利用康威定律实现更好的系统设计。
按业务能力分解
了解了这些概念后,我们可以考虑按业务能力进行分解,以根据业务结构来指导系统设计。这与康威定律相呼应。
这种方法的优点是它有助于确保开发团队和业务结构单元之间的一致性。缺点是它可能会将在考虑使用自动化系统之前出现的业务效率低下纳入您的系统设计中。
按域分解
领域驱动设计 (DDD) 提供了一套工具和方法论来推断手头的基础领域,以反映对软件设计领域的最佳可用理解,并根据对软件设计的理解来改进软件设计域增长和变化。 DDD 战略模式指导 Context Map 的创建,它可以构成微服务分解的基础。
据此,我们可以考虑按领域分解,根据对流程和信息流的分析来指导系统设计。
这种方法的优点在于它可以导致系统设计紧密地模拟正在发生(或需要发生)的现实。希望业务结构已经与此保持一致 - 但如果没有,它可以揭示现有业务组织结构的低效率。
如果您对组织结构有影响力,这可以作为利用逆康威策略的基础,并允许您改进软件、开发团队和业务部门以实现一致性。
如果不这样做,您可能最终会引入摩擦点,在这些摩擦点中,系统设计与业务功能不一致。
结论
事实是,这两种方法都不是相互排斥的 - 您可能最终会做出妥协,试图平衡与已经理解的业务能力的一致性以及通过 DDD 过程揭示的问题域。
业务能力不能一对一地反映组织结构。它们代表业务做什么(它有什么能力),但没有具体说明它们将如何实现。组织结构是 "how"/ 实施的一部分。
如果您的业务能力图是根据您的组织结构构建的,那么应该更仔细地评估这一点,当然,除非您先创建业务能力图,然后相应地更改组织结构。
我已经处理过域和业务能力。它们本质上是相同的,这取决于您的工作水平。
据我了解,有两种模式可以定义一个微服务,business capability and by subdomain。但我还是觉得很暧昧。我对这两种模式如何相互区分感到困惑。它们都围绕涉及业务逻辑领域的活动展开。每个服务中的所有组件都足够小,可以在不影响其他服务的情况下相互打包。谁能给我进一步解释一下这两个?
评论者是对的 - 这里有一些主观定义在起作用。但是有一些原则和概念可以帮助推理不同的方法。
康威定律
严格来说不是原来的定义,但我觉得可以参考Conway's Law:
更好理解区别Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
康威逆策略
根据这种想法,Inverse Conway Maneuver 演变为:
The 'Inverse Conway Maneuver' recommends evolving your team and organizational structure to promote your desired architecture. Ideally your technology architecture will display isomorphism with your business architecture.
Inverse Conway Maneuver 试图构建您的组织以利用康威定律实现更好的系统设计。
按业务能力分解
了解了这些概念后,我们可以考虑按业务能力进行分解,以根据业务结构来指导系统设计。这与康威定律相呼应。
这种方法的优点是它有助于确保开发团队和业务结构单元之间的一致性。缺点是它可能会将在考虑使用自动化系统之前出现的业务效率低下纳入您的系统设计中。
按域分解
领域驱动设计 (DDD) 提供了一套工具和方法论来推断手头的基础领域,以反映对软件设计领域的最佳可用理解,并根据对软件设计的理解来改进软件设计域增长和变化。 DDD 战略模式指导 Context Map 的创建,它可以构成微服务分解的基础。
据此,我们可以考虑按领域分解,根据对流程和信息流的分析来指导系统设计。
这种方法的优点在于它可以导致系统设计紧密地模拟正在发生(或需要发生)的现实。希望业务结构已经与此保持一致 - 但如果没有,它可以揭示现有业务组织结构的低效率。
如果您对组织结构有影响力,这可以作为利用逆康威策略的基础,并允许您改进软件、开发团队和业务部门以实现一致性。
如果不这样做,您可能最终会引入摩擦点,在这些摩擦点中,系统设计与业务功能不一致。
结论
事实是,这两种方法都不是相互排斥的 - 您可能最终会做出妥协,试图平衡与已经理解的业务能力的一致性以及通过 DDD 过程揭示的问题域。
业务能力不能一对一地反映组织结构。它们代表业务做什么(它有什么能力),但没有具体说明它们将如何实现。组织结构是 "how"/ 实施的一部分。
如果您的业务能力图是根据您的组织结构构建的,那么应该更仔细地评估这一点,当然,除非您先创建业务能力图,然后相应地更改组织结构。
我已经处理过域和业务能力。它们本质上是相同的,这取决于您的工作水平。