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