假设我们有一个微服务 A 和一个 B。B 有它自己的数据库。然而,B 需要水平扩展,因此我们最终会有 3 个 B 实例。数据库会发生什么变化?它会相应地进行扩展吗?它是否保持为 3 个 B 实例的集中式数据库?它是否成为分布式数据库?具体情况如下:
如果B只是读取数据而没有写入任何内容,则数据库可以使用复制方法,三个B实例只需从不同的数据库实例读取数据,并且数据库已被复制。
B实例可以读/写数据而不会中断其他B实例,这意味着每个B实例都可以有指定的数据,并且实例之间没有数据共享,数据库已更改为具有相同模式但完全不同数据的三个数据库;
B实例应共享大部分数据,并且每个实例都可以将数据写回数据库。因此,B实例应使用一个数据库和一些数据库锁来避免实例之间的冲突。
在其他一些不同的情况下,还有许多其他方法来解决问题,例如对于B实例使用内存数据库(如Redis),队列服务(如RabbitMQ)等。
当你使用数据分区时,一个数据库可以被多个服务实例使用是可以的。
正如Chris Richardson在数据库每个服务模式中所解释的那样,
相同服务的实例应该共享同一个数据库