首页 文章

水平缩放微服务的实例是否应该共享DB?

提问于
浏览
4

鉴于拥有关系数据库并需要横向扩展的微服务,我看到了两种配置数据库服务器的方法:

  • 为每个服务实例提供自己的数据库服务器实例,并具有耦合的流程生命周期

要么

  • 让实例连接到共享(由相同服务的相同实例)独立的数据库服务器或集群

使用事件驱动的体系结构和前一种方法,微服务的每个实例都需要处理每个事件并采取适当的操作来改变它自己的隔离状态 . 这似乎效率低下 .

采用后一种方法,只有一个实例必须处理事件以实现相同的效果,但作为共享状态的变异 . 必须确保每个事件仅由给定微服务的一个实例处理(这是微不足道的吗?)以避免冲突 .

这里有首选方法吗?您的经验教给您什么课程?

1 回答

  • 0

    我会选择第一种方法,一种服务本地数据库 . 每个实例都有自己的数据库实例 . 这样可以更改服务版本之间的持久层 . 否则,更改ER模型会导致冲突 . 您还可以轻松地使用此方法更改为NoSQL解决方案 .

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

    在我看来,服务收到一个导致事件的请求 . 此事件由服务的其他实例使用,因此不需要再次处理请求,但必须将结果复制到实例状态 .

相关问题