微服务架构中的数据库位置

我们有一个单一的应用程序,我们现在正在转换为使用容器的微服务架构。

我们的微服务是有状态的 (即他们需要从数据库插入/检索数据)。 根据微服务架构,每个微服务应该有自己的数据(即我们的情况下的数据库)。

我的问题是,应该部署每个微服务的数据库,是否应该在部署微服务的同一个主机上,在部署微服务的同一个容器中,还是应该在独立的服务器上,比如azure数据库或者其他的东西?

每种方法的优缺点是什么?根据微服务最佳实践,什么是最好的方法? *

你是对的,每个微服务应该使用自己的数据存储,最适合自己的需求。 可能有一个服务需要将其数据存储在blob存储中,另一个可能将其数据存储在表存储或DocumentDb或SQL数据库中。

您可能想使用数据库即服务,因此不会托pipe自己的数据库,因为您不必担心可用性,扩展性,备份等问题。

马丁的答案是好的,但我想补充一点,因为你正在使用一个容器化的应用程序,你应该明确地部署数据库与服务容器分开。 原因是您的服务可以独立进化,而无状态服务容器的最大好处之一是,如果您拥有这些服务容器的集群,则可以使用滚动更新来更新它们,而不会影响应用程序的可用性。 有状态数据库服务的更新比较困难,但也不太常见(像cockroachdb这样的新技术即将出现)。 好读 。

我无所谓(但不在本文前面所述的同一个容器中)。 重要的是,只有一个微服务拥有数据的所有权 。 如果多个微服务需要访问数据,则必须通过拥有该数据的微服务提供的api来访问它。