微服务架构数据库备份和恢复

时间:2017-06-08 10:40:29

标签: docker database-design microservices database-backups database-restore

我正在开发一个基于微服务架构的大项目,所以考虑我有10个服务,其中一些有自己的数据库, 这些数据库采用不同的技术(mysql,mongodb,elastic,......)

那么备份和恢复服务集合的最佳做法是什么?

真正的问题是这些数据库是相互关联的,例如在我的逻辑后端服务器中,我保留了每个来自oauth服务器的用户,

现在考虑单独恢复这两个数据库,现在我的逻辑服务器中的用户数据库包含一些用户,这些用户在oauth服务器上没有任何相关记录,

仅供参考,我使用docker,docker-compose,docker swarm作为我的服务编排。

1 个答案:

答案 0 :(得分:2)

作为一个想法:检查您的服务如何相互依赖。如果您的依赖项是非循环的,那么您可以从外到内或从里到外备份所有数据,而不会遇到一致性问题。

这样做可以保证您在服务中没有元素,具体取决于恢复后的内部元素。

如果您的服务显示循环依赖关系,则可以更好地为每个服务提供冗余服务(例如,主从复制)。然后,您可以关闭从属实例,在脱机时从大量从属服务器中备份。这将允许您在所有服务中创建原子备份。但是,备份的质量取决于每个服务的主从复制质量。

最后,您可以记录每项服务的更改,以及完整备份。因此,您可以编写回滚并开始应用更改记录,直到达到服务实例的一致状态。我认为这需要您具有逻辑依赖关系(请求标识符),允许您关联更改元素的记录(即将它们应用于服务,而没有风险以违反客户端实际交互时发生的逻辑依赖性的方式应用它们与您的服务)。

我希望这些想法可以帮助您解决问题:)