【问题标题】:How to link the related data in the separate RDBMS databases of the micro-services in a typical micro-services architecture?在典型的微服务架构中,如何链接各个微服务的独立 RDBMS 数据库中的相关数据?
【发布时间】:2019-05-03 20:45:18
【问题描述】:

假设我正在设计一个电子学习门户,用户可以在其中选择他想参加的课程,然后在线付款,然后他/她就可以使用这些课程。所以我有像 1) 课程这样的模块2) 付款 3) 用户管理。我选择设计 3 个独立的微服务,即 a) 课程 b) 支付和 c) 基于域的用户管理。现在,如果这个系统是一个整体,那么我们可以使用外键并链接用户、课程和支付表以关联数据。现在既然这三个是不同的微服务,都有自己的数据库,那么数据是怎么联系在一起的呢?即,如果我想将特定用户“X”注册到“A”、“B”、“C”课程?

【问题讨论】:

    标签: java design-patterns microservices


    【解决方案1】:

    另一个其他微服务的微服务消费者可以存储特定外部资源的标识符,并将其逻辑关联到其数据库中自己的资源(RDBMS 或任何 DB 类型)。
    这不是数据库约束关系,但如果这个约束是必须的,你当然可以添加一些关于它的存在和一致性的检查。

    假设微服务之间的关系是:

    User Management  ->  Courses
                    uses
    

    用户管理可以存储与用户关联的课程资源的资源标识符。
    通过这种方式,您可以以特定方式连接两个域的数据。
    如果需要其他依赖方式(课程 -> 用户管理),没有什么能阻止您执行相同的逻辑。

    不是你的问题,而是微服务之间数据关系的重要后果:必须处理外部资源的数据更新。拉,推?有或没有缓存?这基本上取决于您的用例。

    【讨论】:

    • 谢谢。用例类似于 1) 用户选择想要的课程并添加到购物车。 2) 用户为所选择的课程付款。3) 每当用户登录时,他/她应该能够查看他/她购买的课程。因此,以#3 为例,我们需要在 Users --> Courses 之间建立关系。您能否具体说明一下消费者在低水平上是如何维持这种关系的?如果可能的话,你能分享一些解释这个问题的链接吗?
    猜你喜欢
    • 2018-06-04
    • 2019-03-03
    • 2020-09-12
    • 1970-01-01
    • 2017-11-30
    • 2017-09-09
    • 2017-09-11
    • 1970-01-01
    • 2019-07-23
    相关资源
    最近更新 更多