如何提供不同数据库之间的一致性?

How Can I Provide Consistency Between Different Databases?

我想构建一个应用程序。该应用程序将具有三个微服务,如 content-service1、content-service2、content-service3。此外,每个微服务都有自己的数据库。而应用程序会有一个负载均衡器,负载均衡器的任务是分发(第一个请求会去第一个容器,第二个请求会去第二个容器……)。问题来了……我怎样才能提供不同数据库之间的一致性呢?我看了一些主题,比如分区、最终一致性、saga……但我不明白。这些是正确的解决方案吗? system design that ı want image

您似乎混淆了微服务和应用程序实例。

如果 content-service1content-service2content-service3 由同一应用程序(相同代码)支持,则您只有一个应用程序(一项服务)。 如果你想拥有高可用性,你肯定需要同一个应用程序的多个实例(只是同一个应用程序 运行 在不同服务器上出现 3 次)。

在这种情况下,您不需要每个应用程序实例都有一个数据库,因为所有应用程序实例都将连接到同一个数据库,并且您不会遇到不一致的问题。

如果您不想出现单点故障,您还应该需要确保您的数据库可以有冗余。根据您使用的提供商,您可能有 master/slaves 或 multi-master 拓扑,数据库节点之间的数据复制可能由数据库本身处理。

微服务是一种将大型应用程序拆分为较小应用程序的解决方案。每个微服务都会将自己的数据存储在专用数据库中。微服务和其他应用程序一样,它们本身可以有多个实例以实现高可用性。