【问题标题】:micro service architecture database backup and restore微服务架构数据库备份与恢复
【发布时间】:2017-11-10 00:53:17
【问题描述】:
我正在做一个基于微服务架构的大项目,所以考虑一下我有 10 个服务,其中一些有自己的数据库,
这些数据库采用不同的技术(mysql、mongodb、elastic,...)
那么备份和恢复服务集合的最佳做法是什么?
真正的问题是这些数据库相互关联,例如在我的逻辑后端服务器中,我保留来自 oauth 服务器的每个用户的 oauhId,
现在考虑分别恢复这两个数据库,现在我的逻辑服务器中的用户数据库包含一些在 oauth 服务器上没有任何相关记录的用户,
仅供参考,我正在使用 docker、docker-compose、docker swarm 进行服务编排。
【问题讨论】:
标签:
docker
database-design
microservices
database-backups
database-restore
【解决方案1】:
作为一个想法:检查您的服务如何相互依赖。如果您的依赖项是非循环的,您可能能够从外向内或从内向外备份所有数据,而不会遇到一致性问题。
这样做可以保证您在还原后没有依赖于内部元素的服务元素。
如果您的服务显示出循环依赖关系,您可能会更好地为每个服务提供冗余服务(例如主从复制)。然后你可以关闭从属实例,在它们离线时从所有从属实例中进行备份。这将允许您跨所有服务创建原子备份。但是,您的备份质量取决于您在每个服务上的主从复制质量。
最后,您可以记录每项服务的更改以及完整备份。因此,您可以编写回滚并开始应用更改记录,直到您在服务实例中达到一致的状态。我认为这要求您具有逻辑依赖项(请求标识符),允许您关联更改元素的记录(即在服务中应用它们,而不会有风险以违反客户端实际交互时发生的逻辑依赖关系的方式应用它们与您的服务)。
我希望这些想法可以帮助您解决问题:)