微服务:数据库和微服务实例

Microservices: database and microservice instances

假设我们有一个微服务 A 和一个 B。B 有自己的数据库。但是 B 必须水平扩展,因此我们最终有 3 个 B 实例。数据库会发生什么变化?它是否相应地扩展,它是否为 3 个 B 实例保持相同的(集中式)数据库,它是否成为一个分布式数据库,会发生什么?

当您使用数据分区时,多个服务实例使用一个数据库是可以的。

答案是根据3个B实例应该共享哪种数据。一些场合:

  1. B是只读数据不写任何东西,DB可以使用replicate方法,三个B实例只是从不同的DB实例读取数据,DB被复制。

  2. B实例可以read/write数据不中断其他B实例,也就是说每个B实例都可以指定数据,实例之间不共享数据,数据库改为三库具有相同的架构但完全不同的数据;

  3. B实例应该共享大部分数据,每个实例都可以偶尔将数据写回DB。所以B实例应该使用一个DB和一些DB锁来避免实例之间的冲突。

在其他一些不同的情况下,会有很多其他的方法来解决这个问题,比如使用像redis这样的内存DB,为B实例使用像rabbitMQ这样的队列服务。

正如 Chris Richardson 在 pattern database per service

中所解释的

Instances of the same service should share the same database