Edu*_*ras 34 database architecture orm database-design microservices
我正在学习微服务,我将构建一个带有微服务架构的项目.
问题是,我的一个队友希望为所有服务使用一个数据库,共享所有表,以便"数据不会重复",每个服务都将使用不同的框架和语言构建,如django和rails使用非常不同的ORM标准.
什么是正确的方法?因为我认为使用一个数据库会涉及很多"黑客攻击"ORM,以使它们正常工作.
Osw*_*ann 55
如果所有服务共享相同的数据库表,则您不太可能从微服务体系结构中受益.这是因为您实际上是紧密耦合服务.如果数据库表发生更改,则所有服务都必须更改.
您必须了解,微服务架构的全部原因是减少开发团队之间的依赖关系,并允许他们通过快速发布独立前进.
以下是亚马逊首席技术官Werner Vogels的报价(亚马逊开创了许多微服务风格架构):
对我们而言,面向服务意味着使用对数据进行操作的业务逻辑封装数据,并且只能通过已发布的服务接口进行访问.不允许从服务外部直接访问数据库,并且服务之间没有数据共享.
通常,微服务应负责自己的数据。那是一个完美的世界场景。
实际上,某些服务可能彼此高度相关。例如,CustomerShippingDetails和CustomerShoppingCheckout服务可能都访问相同的数据-客户地址。您将如何解决向客户结帐服务提供客户地址的问题。如果结帐服务直接查询购物明细,那么您将打破服务之间的松散耦合。另一种选择是引入共享数据库。
在架构上总会有某种折衷。值得一提的是在很大程度上取决于全局(整个系统的设计)的体系结构决策。
没有太多有关您的系统的详细信息,我会采用混合方法。也就是说,拥有一个用于处理类似业务逻辑的服务的共享数据库。因此,CustomerShippingDetails和CustomerShoppingCheckout可以共享一个数据库。但是StoreItemsDetails将具有一个单独的数据库。
您可以在Microservice Architecture中找到有关微服务的共享数据库模式的更多信息。