微服务与共享数据库?使用多个ORM?

时间:2017-04-25 14:01:50

标签: database database-design orm architecture microservices

我正在学习微服务,并且我将构建一个带有微服务架构的项目。

问题是,我的一个队友想要为所有服务使用一个数据库,共享所有表格,以及#34;数据不会被重复"每个服务都将使用不同的框架和像django和rails这样使用非常不同的ORM标准的语言。

什么是正确的方法?因为我认为使用一个数据库会涉及很多" hacking" ORM,以使它们正常工作。

2 个答案:

答案 0 :(得分:37)

如果所有服务共享相同的数据库表,则您不太可能从微服务架构中受益。这是因为您实际上是紧密耦合服务。如果数据库表发生更改,则所有服务都必须更改。

您必须明白,微服务架构的全部原因是减少开发团队之间的依赖关系,并允许他们通过快速发布独立前进。

以下是亚马逊CTO(亚马逊开创了许多微服务风格架构)的Werner Vogels的引用:

  

对于我们来说,服务导向意味着用数据封装数据   对数据进行操作的业务逻辑,只有访问权限   已发布的服务界面。不允许直接访问数据库   从服务外部,并没有数据共享   服务。

有关详细信息,请参阅thisthis

答案 1 :(得分:6)

一般来说,微服务应该负责它自己的数据。这是一个完美的世界场景。

在实践中,某些服务可能彼此高度相关。例如。 CustomerShippingDetails和CustomerShoppingCheckout服务都可以访问相同的数据 - 客户地址。那么您如何解决向客户结账服务提供客户地址的问题。如果结账服务直接查询购物详情,那么您可以打破服务之间的松耦合。其他选择是引入共享数据库。

在架构上总会有某种妥协。什么是sacreficed是一个高度依赖于大局(整个系统的设计)的架构决策。

没有太多关于你的系统的细节我会采用混合方法。也就是说,拥有一个用于处理类似业务逻辑的服务的共享数据库。因此,CustomerShippingDetails和CustomerShoppingCheckout可以共享数据库。但是StoreItemsDetails会有一个单独的数据库。

您可以在Microservice Architecture找到有关微服务的共享数据库模式的更多信息。