多OSS容灾方案设计

150 阅读2分钟

 概要

前段时间阿里云Oss服务发生P0级事故,导致国内众多大平台崩盘。众多程序员连夜迁移Oss服务恢复系统可用性,这里我就想到能不能设计一种多Oss备灾方案保证系统的高可用性

架构流程

我的方案实现基于微服务架构,我将文件上传单独拆分出一个服务,来实现多Oss容灾方案。

基础架构如下,主要基于Nacos云端配置功能,以及策略模式。并且该方案只实现bucket桶共有读情况下的方案设计。原理在于主要我们bucket桶名称相同,文件路径相同不同Oss服务只需要改变相应访问URL前缀即可达到迁移的效果。我们开放一个接口给前端定时调用获取当前系统的Oss源即可

​编辑

代码实现

首先在服务中接入阿里云与腾讯云,这里为了方便演示我使用的两个方案中的普通接口未使用高级接口,各个厂家的接入方式都大同小异,获取AccessId与AccessSecret后注册客户端即可使用

​编辑

​编辑

使用策略模式来选择Oss源客户端达到文件上传接口

策略模式接口

​编辑

AliyunOss策略实现类

​编辑

TencentOSS策略实现类

​编辑

策略工厂,这里的策略选择来源于云端配置的OssType参数

​编辑

核心部分在于我们注册一个Nacos配置监听器,监听云端Nacos是否修改本地OSS源配置,如果修改则修改本地,如下

​编辑

Nacos配置监听器代码如下,我们在云端修改配置文件后,本地同步刷新Oss策略来源,并且将系统中的临时文件同步到目标源Oss服务器上,保证文件路径相同,前端只需要调用回调接口来获取当前Oss前缀即可正确访问。