【问题标题】:Microservice archtecture data sharing/management微服务架构数据共享/管理
【发布时间】:2018-11-03 05:46:58
【问题描述】:

我的目标是使用微服务方法开发企业应用程序。我面临的一个紧迫问题是如何在微服务之间共享分布式数据。

Microservices data sharing image

从上图中,Customer 和 Order 微服务都有客户详细信息,但在 Order 微服务中,客户信息被分割为仅必填字段。我知道有一种方法可以使用事件在微服务之间保持数据的一致性。

问题:

  1. 这个模型(参考图片)实用/可扩展吗?
  2. 如果客户数据 跨越 10 个微服务,这是否意味着如果我有 80 万客户 那么所有 10 个微服务将有 800K 数据
  3. 什么是最好的 方法对于共享的大型数据集 微服务。

【问题讨论】:

    标签: design-patterns microservices


    【解决方案1】:

    微服务必须松散耦合,以便它们可以独立开发和部署,每个微服务都有自己的目标和存在理由,微服务具有定义明确且明确的 API 可以访问他的数据。

    如果您有Customer microservice,则它必须管理有关客户的所有数据和操作,如果您需要在您的Order microservice 中使用有关特定客户的一些数据,您必须使用Customer microservice 通过他的API 检索该数据; Order microservice 不得存储任何有关客户的数据。

    例如,如果您需要在您的 Order microservice John Doe 数据中,您必须使用 Customer microservice 为 id=22、this diagram shows the idea behind my answer 的客户检索数据。

    并解决您的问题...

    1. 不,它不可扩展,因为您有数据冗余。
    2. 不,只有一个微服务必须管理客户数据,其他微服务必须使用它。
    3. 最好用一个众所周知的模式来解释来解决这个问题; Database per service pattern。

    【讨论】:

    • 感谢您的回复。例如,我想(按名称)搜索 john doe 下的所有订单。如何在微服务模式中实现该功能?或者我想在订单列表中有按名称排序的功能。
    • 欢迎您 c:如果您想按名称搜索,您可以按照下一个流程进行操作: 1. 您的CustomerService 必须提供一个“端点”,当您发送客户名称时它会返回一个客户实体. 2.您可以使用这个客户实体来获取客户ID。 3. 您的OrderService 必须提供一个“端点”,当您发送客户 ID 时,该端点会返回客户下的所有订单。这是一个简单的解决方案,但是对于这个问题有很多解决方案,例如私有 API、服务间通信协议等。
    猜你喜欢
    • 2015-06-10
    • 2019-05-10
    • 2016-05-22
    • 2018-12-17
    • 2019-06-11
    • 2015-04-30
    • 1970-01-01
    • 2019-08-19
    • 2020-04-26
    相关资源
    最近更新 更多