我想知道微服务的数据库设计。下面给出了这个场景
Microservice A正在使用mysql数据库。如果我要创建多个微服务实例A:
如果每个微服务实例指向自己的私有数据库,如何同步每个实例的数据?你能解释一下最好的方法吗。
发布于 2019-12-17 19:18:55
I正在创建微服务A的多个实例:
我想您的意思是,如果要将微服务A的多个实例部署到一个或多个服务器上,作为该微服务的单独实例?
简短回答:
一般来说,每个微型服务都应该有一个数据库。这意味着您的微服务A有一个数据库(让我们称之为)微服务-A_db。不管您的微服务-A部署到多个服务器(横向扩展)或在一个服务器上,您的微服务-A的部署实例正在访问和使用您的一个数据库微服务-A_db。
您的微服务-A的所有实例都应该访问同一个数据库。这是标准和最常见的用例。这方面也有例外。
长答案:
每个微服务A应该指向同一个数据库(所有实例的公共数据库)或
简而言之,是的。
每个微服务A指向自己的私有数据库
总之不行。但是..。
如前所述,如果您指的是多个微服务实例-A应该将每个实例指向私有数据库,则不会。你不应该那样做。
通常,您的应用程序域/业务逻辑是根据某些标准划分为微服务的。一旦您将系统拆分为多个域微服务(您可以阅读到它,here),每个微服务只负责域的这一部分,这意味着与它及其存储相关的所有逻辑。让我举一个例子。假设您有一个在线商店应用程序,并且您有3个微服务:
这些微服务中的每一个都有自己的数据库:
这些数据库只能由它们的所有者微服务使用.如果微服务作为单独的进程/实例部署在一个或多个服务器上,这并不重要。他们都访问同一个数据库。另一方面,您可以使用许多不同类型的微服务数据库部署,比如拥有多个只读副本、使用切分来划分数据等等。有很多方法可以扩展您的数据库。关键是微型服务只能使用自己的数据库。
除此之外,我可以说这条规则也有例外:1数据库-1微服务。有时,每个微服务域使用2个数据库。在这些例子中,第二个db是用于特定读取/查询操作的某种类型的读取优化数据库。这经常与CQRS模式一起使用。如果你想知道更多关于它,你可以阅读很多关于CQRS在这里的堆栈溢出和一般在网上。
https://stackoverflow.com/questions/59369081
复制相似问题