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