基于华为云服务器ECS和消息代理中间件rabbitmq实现云存储同步

举报
yd_240482008 发表于 2023/12/07 18:27:11 2023/12/07
【摘要】 基于华为云服务器ECS与消息中间件rabbitmq,实现一个中间件插件平台,以满足多云间存储数据的同步。

基于华为云服务器ECS和消息代理中间件rabbitmq实现云存储同步

服务器搭建

\qquad本实验选取华为云云服务器(ECS) ,1 核(vCPU) 2 GiB,搭载 Ubuntu 22.04 64 位操作系统,公网 IP 为:121.36.22.29。其内部装配了 python3.10(包括 pika 等库)和 rabbitmq 插件。

Webhook通信

\qquadWebhook 是一种机制,它允许应用程序在特定事件发生时自动向指定的 URL 发送 HTTP 请求。本实验选取 dropbox 作为主云存储,并使用dropbox 提供的 Webhook 通信。在服务器上使用 python flask 搭建轻量级 Web 框架,使用http://121.36.22.29/webhook 作为 URL,并将其手动绑定到 dropbox 账户。此时,dropbox 账户(即主云)监听文件夹下所有变动都会通过 Webhook 发送给服务器。

RabbitMQ中间件

\qquad在启动 Webhook 通信的同时,服务器启动RabbitMQ 消费者进程,服务器接收到 Webhook 传来的文件变更信息后,通过 RabbitMQ 生产者创建并发送变更信息数据,变更信息包括三个部分:

  1. status: 状态,包括上传(upload)和删除 (del);
  2. path: 同步路径地址;
  3. downPath: 文件下载地址。

消息定期处理

\qquad消费者进程接收并存储消息队列中的数据后,每隔设定时间自动处理收到的所有数据。为了体现消息队列的缓存作用,在处理数据之前,使用message-merge 算法删除冗余消息,即文件重复变动。
算法 1. MESSAGE-MERGE.
输入:存储全部消息的全局列表 m
输出:合并后的 m
遍历存储这段时间接受的消息的全局列表 m,删除重复操作,输出合并后的 m。

\qquad为了实现消息的接收和处理不相冲突,需要同时开启两个线程,其一执行 rabbitMQ 消息队列的接收任务,其二执行延时处理。这两个线程通过全局列表 messages 互通,即接收到消息后保存在messages 中,定时遍历 messages 并执行消息。

多云同步

\qquad在主云 dropbox 中,设置/img 为监听文件夹;在副云 baidu 中,设置/img 为备份文件夹,即在此实现数据(图片格式)的备份。具体而言,若为上传操作,则通过 2.3 得到的文件上传路径从主云(监听文件夹)下载文件,之后备份到副云(备份文件夹)上;若为删除操作,则直接在副云中找到存储地址,将其删除。
\qquad其中,dropbox 和 baidu 云接口采用前面章节的算法,这里不再赘述。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。