【问题标题】:Scaling Service Boundary (SOA)扩展服务边界 (SOA)
【发布时间】:2017-09-16 01:47:09
【问题描述】:

我是 SOA(面向服务的架构)的新手,我对以下场景有一个问题:

在公司(Mycompany)中,有销售团队(这是业务能力的技术权威——这里的销售是业务能力)。该公司决定创建 2 种产品,即 Mycompany.Photos.com 和 Mycompany.Grocery.com。对于这两个网站,他们都需要销售能力,即订单接受能力。

因此,销售团队必须同时为这两个网站工作。因为,这两个网站都需要销售能力。

现在的问题是销售团队是否应该为每个网站创建 2 个不同的数据库和 2 个不同的端点?

例如:

如果销售团队最初有一个队列“Mycompany.Sales.Endpoint”并且它接收 CreateOrderCommand。它处理 CreateOrderCommand,在销售数据库中创建订单并发布 OrderAcceptedEvent。当他们只支持一个网站时。如果他们开始支持具有相同端点的两个网站,那么销售将如何区分这个订单是针对 Mycompany.Grocery.com 还是 Mycompany.Photos 的?我们应该将 Mycompany.Sales.Endpoint 拆分为 2 吗?销售团队是否必须了解照片网站订单和杂货网站订单?

我能想到的一个答案是:

  1. 销售团队可以为 Mycompany.Grocery.com 分别创建 2 个不同的数据库 和 Mycompany.Photos.com
  2. 为每个网站部署 2 个不同的业务组件 (BC)。
  3. Sales 将有 2 个端点,例如“Mycompany.Grocery.Sales.Endpoint” Mycompany.Grocery.com BusinessComponent 和 MycompanyPhotos 的“Mycompany.Photos.Sales.Endpoint”。

    即使它们在相同的销售边界上下文中,它也可以有 2 个业务 组件 (BC) ?我说的对吗,我们扩大销售团队的方式会支持两种产品的销售能力吗?

对于这么长的消息,我深表歉意。我找不到任何捷径来解释这一点。

【问题讨论】:

    标签: domain-driven-design nservicebus soa microservices


    【解决方案1】:

    我认为考虑这种情况的更好方法是您实际上拥有两家公司 - 一家从事杂货业务,具有构成该业务的所有相应功能,另一家从事照片业务。即使这两个“公司”碰巧共享相同的注册文件,您也不应该将其视为一个实体。

    【讨论】:

    • 感谢@Udi Dahan!如果我理解正确,那么在公司中,我们可以有许多基于公司的销售部门(限界上下文/服务)。因此,Photo Company 将拥有自己的销售服务和订单,而杂货店将拥有自己的。
    【解决方案2】:

    服务是业务能力的技术权威。

    如果您应该能够区分来自任一系统的订单,但您不能,那么您可能正在为多种业务能力建立“技术权威”。

    除此之外,服务可以包含许多组件。与其关注技术问题,不如关注业务问题,看看你能不能解释清楚。但是像 Stackoverflow 这样的平台,在问答方面的比例是 1 比 1,可能不是此类问题的正确媒介。

    【讨论】:

    • 嗨@Dannis 感谢您的回复。我编辑了我的问题并删除了一对一的个人问题。但我仍然认为这是一个有效的 SOA 问题。
    • 一个服务不应该有“很多”业务组件 - 2 可能是最应该有的。
    • @RupeshKumarTiwari 这当然是一个很好的问题,但是在 StackOverflow 上进行讨论比在论坛上进行讨论要困难,在论坛上你可以继续提问并在一个线程中回复它们。我认为论坛更适合这类问题。
    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2017-09-14
    • 2022-01-10
    • 2020-07-28
    • 2015-09-13
    • 1970-01-01
    • 2020-09-12
    相关资源
    最近更新 更多