【问题标题】:MIcroServices Design when multiple microservices share the same data base多个微服务共享同一个数据库时的微服务设计
【发布时间】:2020-05-22 01:18:10
【问题描述】:

我在面试中被问到一个问题,我重新研究了很多但没有得到明确的答案..只是想知道最佳实践所以请帮忙-

如果有 10 个微服务,并且在理想情况下它应该有自己的数据库。但是如果有 10 个微服务与公共数据库交互,你将如何使其保持一致。

我认为理想情况下最好的选择是像 oracle sql 这样的数据库,它遵循酸属性并确保正在完成写入并维护酸属性,但他对答案不满意......理想情况下,如果一个数据库是否有那么一次只能写一个,并且有机会在一个人写数据时另一个服务可能会读取过时的数据,所以他不想要过时的数据。

我建议有缓存,以便我们首先写入缓存,然后我们将写入数据库,以便另一个服务可以从缓存中读取并获取更新的值,

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

【问题讨论】:

  • consistent 在给定上下文中的含义是什么?有 ACID 一致性和逻辑一致性(在业务层上)。你熟悉eventual consistency这个词吗?
  • 为了最终一致,你需要一个副本和。他希望更新的结果最终不一致。
  • 为了最终保持一致,你需要有一个副本:虽然你是对的,但不是真的,但考虑到有单个 db 实例,它也可以呈现是否涉及队列和使用它们进行通信的服务。

标签: microservices


【解决方案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 模式等,这与本例无关。

【讨论】:

    猜你喜欢
    • 2019-11-19
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2016-12-13
    • 2018-10-07
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多