Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如何协调microservice“;“不分享”;原则与「;“独立性”;_Design Patterns_Service_Architecture_Microservices - Fatal编程技术网

Design patterns 如何协调microservice“;“不分享”;原则与「;“独立性”;

Design patterns 如何协调microservice“;“不分享”;原则与「;“独立性”;,design-patterns,service,architecture,microservices,Design Patterns,Service,Architecture,Microservices,假设我的整个域有如下实体 [ { id: 1, name: "Joe", age: 16, hometown: "Los Angeles", friends: [2] }, { id: 2, name: "Jack", age: 83, hometown: "Phily", friends: [1, 3] }, { id: 3,

假设我的整个域有如下实体

[
   {
      id: 1,
      name: "Joe",
      age: 16,
      hometown: "Los Angeles",
      friends: [2]
   },
   {
      id: 2,
      name: "Jack",
      age: 83,
      hometown: "Phily",
      friends: [1, 3]
   },
   {
      id: 3,
      name: "Susy",
      age: 50,
      hometown: "Dayton",
      friends: [2]
   }
]
我决定提供两种不同的服务

  • 个人信息经理
  • 朋友经理
  • 与这些实体打交道。我从字面上理解“不共享”的方式是,每个服务都有类似的存储

    [
       {
          id: 1,
          name: "Joe",
          age: 16,
          hometown: "Los Angeles"
       },
       {
          id: 2,
          name: "Jack",
          age: 83,
          hometown: "Phily"
       },
       {
          id: 3,
          name: "Susy",
          age: 50,
          hometown: "Dayton"
       }
    ]
    
    1。及

    {
        1: [2],
        2: [1, 3],
        3: [2]
    }
    
    两个人。因此,基本上,整个信息被分为两个位置存储(除了
    id
    s,我猜它们是共享的)

    以下是我看到的一些潜在问题:

    • 在朋友管理器服务中,由于您只有
      id
      s,如果不将来自此服务的信息与来自个人信息管理器服务的信息进行组合,可能在整个系统中没有任何有用的操作
    • 按照前面的观点,假设我们想要一个用户界面,用户可以在其中管理好友关系。然后我们需要查询Friend Manager服务以获取此信息,并通过
      id
      执行“连接”。这意味着朋友管理器服务依赖于个人信息管理器服务,或者有第三个服务依赖于两者
    为了解决这些潜在的问题(我不确定它们是否是真正的问题;这就是为什么我要问s.O.),我们可以让它们共享更多的数据。比如说,为了管理友谊,你至少需要知道一个人的名字。那我们就可以了

    {
        info: {
            1: {
              name: "Joe"
            },
            2: {
              name: "Jack"
            },
            3: {
              name: "Susy"
            }
        },
        friendships: {
            1: [2],
            2: [1, 3],
            3: [2]
        }
    }
    
    这样,现在好友管理器服务就可以独立工作了。这样做的一些潜在缺点是

    • 重复数据带来的额外存储成本
    • “朋友管理器”服务中的名称可能已过时,因为从“个人信息管理器”服务接收更新时出现延迟或错误。然而,如果朋友管理器服务在需要时查询Person Info Manager服务中的姓名,那么它将始终具有最新的信息(查询还可以说明已删除的人员)
    我的2美分:

    • person info和friend manager听起来都太小了,不适合作为单独的微服务,根据经验,它们应该映射到一个单独的微服务。假设有界上下文是域中发生的主要过程,而不是实体组

    • 重复存储的额外成本在大多数情况下都不是问题,我们不是在谈论Twitter的规模,甚至他们通过数据重复来解决这个问题

    • 要像示例中那样维护数据一致性,您需要跨不同的有界上下文定义可接受的一致性级别(根据业务规则/域逻辑)。这里经常出现的一个原则是。搜索与领域驱动设计相结合,你一定会发现很多东西:)

    • 微服务直接调用其他微服务在某些情况下也可以工作,我的意思是看;)