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