【问题标题】:Microservices are compatible with existing SQL database?微服务是否兼容现有的 SQL 数据库?
【发布时间】:2018-03-30 12:54:21
【问题描述】:

我正在使用 Core、rabbitMQ、扼杀者模式创建一个微服务架构......但我必须使用现有的 SQL 数据库(事务请求)。

做研究我没有找到很多关于如何实现SQL数据库的信息,但我认为不可能同时对不同的服务进行事务操作。

1- 每个服务都必须有权访问整个数据库?

2- 做一个专门用于事务操作的服务是个好主意吗?

3- 带有微服务的 SQL 可能太慢了?

我不知道是否存在这方面的标准。

谢谢。

【问题讨论】:

    标签: sql database-design architecture rabbitmq microservices


    【解决方案1】:

    1- 每个服务都必须有权访问整个数据库?

    没有。微服务有自己的架构,与它提供的聚合根/服务相关。如果一个服务需要另一个实体的数据,它会调用另一个微服务提供的 API。

    2- 做一个专门做交易的服务是个好主意 操作?

    没有。每个微服务本身就是一个事务边界。分布式事务,尤其是使用 2PC 的事务,性能不是特别好。

    3- 带有微服务的 SQL 可能太慢了?

    我不完全清楚你为什么要发表这样的声明。

    【讨论】:

      【解决方案2】:

      微服务的全部意义在于拥有尽可能解耦的小型独立服务。

      共享一个通用数据库会引入非常强的耦合,不推荐使用。

      如果两个服务需要相同的数据,您可以 (a) 为每个服务使用不同的数据库并复制数据,或者 (b) 引入负责访问数据库的第三个服务。

      如果您正在寻找跨微服务的更大规模分布式事务,那么您应该研究 sagas 之类的东西。通常,您将有一个协调器(在某些文献中为“流程管理器”)来跟踪各种操作,并且可以在整个事务注定失败时补偿或取消已执行的操作。

      3- 带有微服务的 SQL 可能太慢了?

      是什么让你这么认为?

      SQL 并没有什么地方不适合微服务。微服务在做什么和需要什么方面可能会有很大差异。 SQL 将非常适合某些微服务,但可能不太适合其他微服务。这取决于服务。

      【讨论】:

      • 共享数据库引入了非常强的耦合,这完全是真正的共享。经过思考和调查,我发现了P2P 同步,并且我还考虑实现一个服务来监听兔子队列,以将 sql 更改回复到其他受影响的数据库。您认为最好的方法是什么?
      • 这很难说,因为这真的取决于你的应用程序。
      • 经过一番调查和思考,我找到了这篇文章。我认为它解决了我对主题的疑虑和不信任。 infoq.com/articles/…
      【解决方案3】:

      您的系统中似乎需要分布式事务 https://msdn.microsoft.com/en-us/library/windows/desktop/ms681205(v=vs.85).aspx

      还有一本关于微服务的好书。它包括基于微服务的应用程序中使用的分布式事务和其他模式。 http://shop.oreilly.com/product/0636920033158.do

      【讨论】:

        猜你喜欢
        • 2017-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-26
        • 2021-07-01
        相关资源
        最近更新 更多