【问题标题】: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/…