基于华为云服务器ECS和消息代理中间件rabbitmq实现云存储同步
基于华为云服务器ECS和消息代理中间件rabbitmq实现云存储同步
服务器搭建
本实验选取华为云云服务器(ECS) ,1 核(vCPU) 2 GiB,搭载 Ubuntu 22.04 64 位操作系统,公网 IP 为:121.36.22.29。其内部装配了 python3.10(包括 pika 等库)和 rabbitmq 插件。
Webhook通信
Webhook 是一种机制,它允许应用程序在特定事件发生时自动向指定的 URL 发送 HTTP 请求。本实验选取 dropbox 作为主云存储,并使用dropbox 提供的 Webhook 通信。在服务器上使用 python flask 搭建轻量级 Web 框架,使用http://121.36.22.29/webhook 作为 URL,并将其手动绑定到 dropbox 账户。此时,dropbox 账户(即主云)监听文件夹下所有变动都会通过 Webhook 发送给服务器。
RabbitMQ中间件
在启动 Webhook 通信的同时,服务器启动RabbitMQ 消费者进程,服务器接收到 Webhook 传来的文件变更信息后,通过 RabbitMQ 生产者创建并发送变更信息数据,变更信息包括三个部分:
- status: 状态,包括上传(upload)和删除 (del);
- path: 同步路径地址;
- downPath: 文件下载地址。
消息定期处理
消费者进程接收并存储消息队列中的数据后,每隔设定时间自动处理收到的所有数据。为了体现消息队列的缓存作用,在处理数据之前,使用message-merge 算法删除冗余消息,即文件重复变动。
算法 1. MESSAGE-MERGE.
输入:存储全部消息的全局列表 m
输出:合并后的 m
遍历存储这段时间接受的消息的全局列表 m,删除重复操作,输出合并后的 m。
为了实现消息的接收和处理不相冲突,需要同时开启两个线程,其一执行 rabbitMQ 消息队列的接收任务,其二执行延时处理。这两个线程通过全局列表 messages 互通,即接收到消息后保存在messages 中,定时遍历 messages 并执行消息。
多云同步
在主云 dropbox 中,设置/img 为监听文件夹;在副云 baidu 中,设置/img 为备份文件夹,即在此实现数据(图片格式)的备份。具体而言,若为上传操作,则通过 2.3 得到的文件上传路径从主云(监听文件夹)下载文件,之后备份到副云(备份文件夹)上;若为删除操作,则直接在副云中找到存储地址,将其删除。
其中,dropbox 和 baidu 云接口采用前面章节的算法,这里不再赘述。
- 点赞
- 收藏
- 关注作者
评论(0)