多个微服务共享同一数据库时的MIcroServices设计

时间:2020-05-21 13:25:22

标签: microservices

在inteview中有人问我一个问题,我进行了很多次复习,但没有得到明确的答案。只是想了解最佳做法,所以请帮忙-

如果有10个微服务并且在理想情况下它应该有自己的数据库。但是,这里要进行的调整是假设10个微服务与公共数据库交互时,如何使它保持一致。

我的想法是最好的最佳选择是像oracle sql这样的数据库,该数据库遵循acid属性并确保已完成写入并保持了acid属性,但他对答案不满意...理想地是如果有一个数据库那么只有一次只能写一次,并且有可能在一个人正在写数据时,另一个服务可能会读取过时的数据,因此他不希望过时的数据。

我建议使用缓存,以便我们先写入缓存,然后再写入db,以便另一个服务可以从缓存中读取并获取更新的值,

他对此感到不满意...请分享您的想法。我浏览了多个博客,但没有得到满意的答复。

1 个答案:

答案 0 :(得分:1)

首先,我想让您知道,没有严格的规则说明您需要用于不同微服务的单独数据库。 相反,规则是Services must be loosely coupled so that they can be developed, deployed and scaled independently。 因此模式可以是Database per service or Shared Database.

在您的情况下,这是共享数据库模式。通常,人们不会喜欢它,因为他们以某种方式思考,例如他们的服务将直接访问其他服务的数据(在这种情况下,它将是一个表)。这是不正确的,因为如果您的服务依赖于其他服务的数据或数据库架构,则您的服务将不会是松散耦合的服务,也不会独立扩展。

In the microservices world, each microservice’s persistent data is private to that service and accessible only via its API. 

回到您的情况,我不确定为什么您的访问员不相信数据库引擎的ACID功能,因为您使用的是同一数据库,因为每种服务设计的数据库中也可能发生相同的情况。说相同应用程序的两个线程,一个线程正在写,另一个线程在同一情况下可能会导致读取。 我认为他可能期望一个不同的答案,例如分布式事务和SAGA模式等,在这种情况下不相关。

相关问题