我正在学习微服务,并且我将构建一个带有微服务架构的项目。
问题是,我的一个队友想要为所有服务使用一个数据库,共享所有表格,以及#34;数据不会被重复"每个服务都将使用不同的框架和像django和rails这样使用非常不同的ORM标准的语言。
什么是正确的方法?因为我认为使用一个数据库会涉及很多" hacking" ORM,以使它们正常工作。
答案 0 :(得分:37)
如果所有服务共享相同的数据库表,则您不太可能从微服务架构中受益。这是因为您实际上是紧密耦合服务。如果数据库表发生更改,则所有服务都必须更改。
您必须明白,微服务架构的全部原因是减少开发团队之间的依赖关系,并允许他们通过快速发布独立前进。
以下是亚马逊CTO(亚马逊开创了许多微服务风格架构)的Werner Vogels的引用:
对于我们来说,服务导向意味着用数据封装数据 对数据进行操作的业务逻辑,只有访问权限 已发布的服务界面。不允许直接访问数据库 从服务外部,并没有数据共享 服务。
答案 1 :(得分:6)
一般来说,微服务应该负责它自己的数据。这是一个完美的世界场景。
在实践中,某些服务可能彼此高度相关。例如。 CustomerShippingDetails和CustomerShoppingCheckout服务都可以访问相同的数据 - 客户地址。那么您如何解决向客户结账服务提供客户地址的问题。如果结账服务直接查询购物详情,那么您可以打破服务之间的松耦合。其他选择是引入共享数据库。
在架构上总会有某种妥协。什么是sacreficed是一个高度依赖于大局(整个系统的设计)的架构决策。
没有太多关于你的系统的细节我会采用混合方法。也就是说,拥有一个用于处理类似业务逻辑的服务的共享数据库。因此,CustomerShippingDetails和CustomerShoppingCheckout可以共享数据库。但是StoreItemsDetails会有一个单独的数据库。
您可以在Microservice Architecture找到有关微服务的共享数据库模式的更多信息。