2015-06-28 122 views
2

我目前正在使用一个遗留系统,该系统由多个服务组成(其中包括)通过某种企业服务总线(ESB)进行通信以同步数据。Micro Services中的数据复制:恢复数据库备份

我想逐步将这个系统朝着微服务架构的方向发展。我打算减少对ESB的依赖,并使用更多像RabbitMQ或Kafka这样的消息代理。由于某些资源/现有技术的限制,即使我应该能够明确定义单个服务作为数据所有者,我也不认为我能够完全避免服务之间的数据复制。

我现在想知道的是,如何在必要时安全地为单个服务执行数据库备份还原?这样做会导致服务与保存复制数据的其他服务不同步。有关这方面的任何经验/建议?

回答

4

每次发生数据库变异时,让主数据库发布事件,并让复制服务订阅此事件并在其复制数据上应用相同的突变。

您已经使用消息代理,因此您可以利用现有堆栈来广播事件。通过事件进行复制,应用于主数据库的还原将传播到所有其他服务。

根据备份规模的不同,其他服务的数据将会很短。这可能会或可能不会被您的用例所接受。把过时想象成某种最终的一致性模型。 “

+0

”正在对主数据库应用还原将传播到所有其他服务“ - >您能否详细说明这一点?如何设计我的应用程序以检测数据库恢复所应用的更改? – habsq

+1

@habsq不知道您使用的数据库的具体情况,这有点难。在大多数数据库中,您可以定义发生突变时将触发的提交后触发器。然后您可以从触发器内发出您的事件。某些数据库(例如Oracle)提供了一种即用即用的复制机制,对每个数据库变体使用发布 - 订阅模式来传播复制的数据。 –

+0

感谢您的解释!我将此标记为答案,因为至少它给了我部分解决方案。问题是,某些服务(及其数据库)部署在PaaS中,这意味着将数据库设置为在突变发生时不可能发布事件。 – habsq