我正在开发一个基于微服务架构的大项目,所以考虑我有10个服务,其中一些有自己的数据库, 这些数据库采用不同的技术(mysql、mongodb、elastic...)
那么备份和恢复服务集合的最佳实践是什么?
真正的问题是这些数据库彼此相关,例如在我的逻辑后端服务器中,我保留来自oauth服务器的每个用户的oauhId,
现在考虑分别恢复这两个数据库,现在逻辑服务器中的用户数据库包含一些用户,这些用户在oauth服务器上没有任何相关记录,
仅供引用,我正在使用 docker 、 docker-compose 、 docker swarm 进行服务编排。
最佳答案
作为一个想法:检查您的服务如何相互依赖。如果您的依赖关系是非循环的,您也许能够从外到内或从内到外备份所有数据,而不会遇到一致性问题。
这样做可以保证您恢复后服务中不会有依赖于内部元素的元素。
如果您的服务显示出循环依赖性,那么您可能会更好地为每个服务提供冗余(例如主从复制)。然后,您可以删除从属实例,在所有从属设备离线时进行备份。这将允许您跨所有服务创建原子备份。然而,您的备份质量取决于每个服务的主从复制的质量。
最后,您可以保留每个服务的更改记录以及完整备份。因此,您可以编写回滚并开始应用更改记录,直到跨服务实例达到一致的状态。我认为这需要您具有逻辑依赖关系(请求标识符),该依赖关系允许您关联变更元素的记录(即,将它们应用到服务中,而不会有以违背客户端实际交互时发生的逻辑依赖关系的方式应用它们的风险)与您的服务)。
我希望这些想法可以帮助您解决问题:)
关于docker - 微服务架构数据库备份与恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44433488/