水平扩展的微服务实例是否应共享数据库?

4
给定一个拥有关系数据库并需要水平扩展的微服务,我看到了两种提供数据库服务器的方法:
- 为每个服务实例提供自己的DB服务器实例,并具有耦合的进程生命周期。 - 或者,让实例连接到共享的(由相同服务的相同实例共享的)独立db服务器或集群。
采用事件驱动架构和前一种方法,每个微服务实例都需要处理每个事件并采取适当的操作来改变其自己隔离状态。这似乎效率低下。
采用后一种方法,只有一个实例需要处理事件即可实现相同的效果,但作为共享状态的突变。必须确保每个给定微服务实例的事件仅由一个实例处理(这是否微不足道?)以避免冲突。
这里是否存在首选方法的共识?您的经验教训是什么?
1个回答

0

我会选择第一种方法,即本地数据库服务。每个实例都有自己的数据库实例。这使得在服务版本之间更改持久性层成为可能。

否则更改ER模型将导致冲突。使用此方法,您还可以轻松更改为NoSQL解决方案。

关于事件驱动设计,我可以推荐这本书:Designing Event Driven Systems

在我看来,服务接收导致事件的请求。其他服务实例消费此事件,因此无需再次处理请求,但必须将结果复制到实例状态中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接