首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微服务数据库设计

微服务数据库设计
EN

Stack Overflow用户
提问于 2019-12-17 07:01:07
回答 1查看 753关注 0票数 2

我想知道微服务的数据库设计。下面给出了这个场景

Microservice A正在使用mysql数据库。如果我要创建多个微服务实例A:

  1. 每个微服务A应该指向同一个数据库(所有实例的公共数据库)或
  2. 每个微服务A指向自己的私有数据库

如果每个微服务实例指向自己的私有数据库,如何同步每个实例的数据?你能解释一下最好的方法吗。

EN

回答 1

Stack Overflow用户

发布于 2019-12-17 19:18:55

I正在创建微服务A的多个实例:

我想您的意思是,如果要将微服务A的多个实例部署到一个或多个服务器上,作为该微服务的单独实例?

简短回答:

一般来说,每个微型服务都应该有一个数据库。这意味着您的微服务A有一个数据库(让我们称之为)微服务-A_db。不管您的微服务-A部署到多个服务器(横向扩展)或在一个服务器上,您的微服务-A的部署实例正在访问和使用您的一个数据库微服务-A_db。

您的微服务-A的所有实例都应该访问同一个数据库。这是标准和最常见的用例。这方面也有例外。

长答案:

每个微服务A应该指向同一个数据库(所有实例的公共数据库)或

简而言之,是的。

每个微服务A指向自己的私有数据库

总之不行。但是..。

如前所述,如果您指的是多个微服务实例-A应该将每个实例指向私有数据库,则不会。你不应该那样做。

通常,您的应用程序域/业务逻辑是根据某些标准划分为微服务的。一旦您将系统拆分为多个域微服务(您可以阅读到它,here),每个微服务只负责域的这一部分,这意味着与它及其存储相关的所有逻辑。让我举一个例子。假设您有一个在线商店应用程序,并且您有3个微服务:

  • products-inventory-micro-service
  • payment-micro-service
  • orders-micro-service

这些微服务中的每一个都有自己的数据库:

  • products-inventory-micro-service有库存-微服务-db
  • payment-micro-service有支付-micro db
  • orders-micro-service有orders-micro-service-db

这些数据库只能由它们的所有者微服务使用.如果微服务作为单独的进程/实例部署在一个或多个服务器上,这并不重要。他们都访问同一个数据库。另一方面,您可以使用许多不同类型的微服务数据库部署,比如拥有多个只读副本、使用切分来划分数据等等。有很多方法可以扩展您的数据库。关键是微型服务只能使用自己的数据库。

除此之外,我可以说这条规则也有例外:1数据库-1微服务。有时,每个微服务域使用2个数据库。在这些例子中,第二个db是用于特定读取/查询操作的某种类型的读取优化数据库。这经常与CQRS模式一起使用。如果你想知道更多关于它,你可以阅读很多关于CQRS在这里的堆栈溢出和一般在网上。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59369081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档