我计划使用微服务架构构建一个项目。我很想知道哪种设计在数据库方面会更好?
- 为给定图像中的每个服务保留一个单独的数据库
- 多个应用程序指向 1 个数据库。
如果我为每个服务保留单独的数据库,我们如何决定将映射表保存在哪里?
例如,我们有客户服务(单独的项目与 DB 1 交谈)和产品服务(单独的项目与 DB 2 交谈),我应该在哪里存储客户和产品映射(客户购买的产品)?
从长远来看,如果我需要连接多个表(由于第 1 点中提到的体系结构,这些表位于不同的数据库中),如何报告?
我计划使用微服务架构构建一个项目。我很想知道哪种设计在数据库方面会更好?
如果我为每个服务保留单独的数据库,我们如何决定将映射表保存在哪里?
例如,我们有客户服务(单独的项目与 DB 1 交谈)和产品服务(单独的项目与 DB 2 交谈),我应该在哪里存储客户和产品映射(客户购买的产品)?
从长远来看,如果我需要连接多个表(由于第 1 点中提到的体系结构,这些表位于不同的数据库中),如何报告?
如果您的数据高度相关,您可以将单个共享数据库与由不同微服务拥有的表一起使用。此外,如果您对数据一致性和服务可用性有强烈要求。有利有弊。
优点
可靠性
维护:
特征:
缺点
可靠性:
维护:
纪律:
表现:
恨:
其他想法:
以我个人的经验,如果您不是 Netflix 并且您的应用程序不能容忍任何形式的数据丢失,那么单一数据库是一个不错的选择。
第二种方法是微服务架构中的“共享数据库”反模式。
在微服务架构中,最好使用按服务数据库模式。
这些方法在页面末尾的链接中也有优点和缺点。
针对您关于将客户购买的产品存储在何处的问题,您需要创建一个新的微服务,该微服务将使用自己的数据库存储客户购买的产品。
对于分析和统计,您需要将所有数据库中的数据发送到报告模块。换句话说,您需要构建一个 etl 进程。诸如Apache Kafka之类的消息代理通常用于此目的。这个页面很好地描述了这种方法。
构建微服务架构是一项非常复杂和广泛的任务,它与许多问题和设计模式相关联,可以让您最大限度地减少这些问题。我推荐阅读一本书“微服务模式”,它着眼于微服务架构设计的各种模式。