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



我在inteview中被问到一个问题,我回答了很多,但没有得到明确的答案。只是想知道最佳实践,所以请帮助-

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

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

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

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

首先,我想让你知道,没有严格的规定规定你需要为不同的微服务提供单独的数据库。 相反,规则是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 模式等,这在这种情况下无关紧要。

最新更新