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

时间:2016-08-18 10:08:28

标签: docker soa microservices

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

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

OR

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

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

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

这里有偏好的首选方法吗?您的经验教给您什么教训?

1 个答案:

答案 0 :(得分:0)

我会采用第一种方法,即服务本地数据库。每个实例都有其自己的数据库实例。这样就可以在服务版本之间更改持久层。 否则,更改ER模型将导致冲突。您还可以通过这种方法轻松地转换为NoSQL解决方案。

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

如我所见,服务接收到导致事件的请求。该事件由服务的其他实例使用,因此不需要再次处理请求,但结果必须复制到实例状态。