
# 多云存储数据同步方案
#### 应用双写
如果数据是在应用服务侧产生，或者数据在客户端产生但通过服务端将数据写入对象存储，则建议使用双写方案，架构如下：
![](https://support.huaweicloud.com/bestpractice-cdn/zh-cn_image_0179131789.png "点击放大")
此时业务应用可对接两家对象存储的SDK，将文件以同步模式或者异步模式写入两家对象存储。对象存储的上行流量免费，所以该架构不会增加任何成本。
#### 数据回源
如果数据上传逻辑不做改变，则可使用OBS的"数据回源"功能，在文件访问请求到达OBS而OBS桶里没有该文件时，可通过"数据回源"将客户端请求重定向到设定的源站并异步地从源站将数据拉取到OBS存储下来，架构如下：
![](https://support.huaweicloud.com/bestpractice-cdn/zh-cn_image_0179147918.png "点击放大")
详细流程说明：
1. 客户端向华为CDN发起获取文件的请求
2. 华为CDN回源到华为OBS请求文件，OBS侧事先配置好数据回源，当请求的文件不存在时，会响应302重定向到配置的源站（此处为其他云对象存储）
3. 华为CDN接收到OBS返回的302请求
4. OBS异步从客户配置的源站请求文件
5. 华为CDN处理302跳转到其他云对象存储侧获取数据
6. 其他云对象存储响应华为CDN的文件请求
7. 华为CDN将文件内容返回给客户端，当下次客户端请求同样的文件时，华为CDN直接回源到OBS获取。
![](https://support.huaweicloud.com/bestpractice-cdn/public_sys-resources/note_3.0-zh-cn.png)
"数据回源"功能是被动触发式，即只有向OBS发起请求后OBS才会到设置的源站将数据拉取过来，所以当一个新文件上传到其他云对象存储后，建议业务应用程序向OBS触发一个GET请求来请求数据（发起GET请求后可关闭连接，无需接收实体数据）。另外该架构会在其他云对象存储侧产生两份数据流量（针对同一个文件，CDN拉取一次，OBS拉取一次）。
#### Serverless触发式上传
不改变原有的上传逻辑，当文件上传到其他云对象存储后，触发函数计算服务，通过Serverless方式将文件同步到华为云OBS，架构如下：
图1Serverless触发式上传   
![](https://support.huaweicloud.com/bestpractice-cdn/zh-cn_image_0179149052.png "点击放大")
该架构需要客户在其他云启用函数计算服务并部署上传文件到OBS的代码，会产生函数计算服务的费用。
