假设我们有微服务A和B.B有自己的数据库。但是B必须水平缩放,因此我们最终有3个B实例。数据库会发生什么?它是否相应地扩展,是否为3 B实例保持相同(集中)数据库,它是否成为分布式数据库,会发生什么?
答案 0 :(得分:3)
答案 1 :(得分:3)
答案取决于应从3个B实例共享哪种数据。有些场合:
B只是读取数据而不写任何东西,DB可以使用复制方法,三个B实例只读取来自不同数据库实例的数据,并且复制了数据库。
B实例可以在不中断其他B实例的情况下读/写数据,这意味着每个B实例都可以有指定数据,实例之间没有数据共享,数据库被改为三个具有相同模式但完全不同的数据库数据;
B实例应该共享大部分数据,并且每个实例都可以将数据写回数据库。所以B实例应该使用一个DB和一些DB锁来避免实例之间的冲突。
在其他一些不同的情况下,还有很多其他方法可以解决这个问题,例如像redis一样使用内存数据库,像RabbitMQ这样的队列服务用于B实例。
答案 2 :(得分:0)
正如Chris Richardson在pattern database per service中解释的那样,
同一服务的实例应该共享同一个数据库