互联网解决方案-文件存储方案:seafile真实案例

news2024/9/24 17:18:14

目录

seafile可靠性保证

事件驱动

seafile.log

events.log

事件驱动好处

本地联思文件同步云联思真实案例

本地联思文件同步云联思架构

云联思客户端检查文件API

本地联思访问客户端封装

本地联思队列消费检查

实践过程中的弯路

文件目录处理 move = copy & delete

seafile文件进程占用问题


Seafile 是一款开源的企业云盘,注重可靠性和性能,支持全平台客户端。Seafile 内置协同文档 SeaDoc ,让协作撰写、管理和发布文档更便捷。它支持私有化部署,能够满足诸多文件协同的应用场景。


​官网:https://www.seafile.com/home/
国内:https://bbs.seafile.com/
国外:http://forum.seafile.com/

seafile可靠性保证

事件驱动

通过分析seafile的日志发现它是通过事件驱动的。可以通过目录和日志去查看:

seafile.log
[08/05/24 09:36:32] Repo 'mesDir' sync state transition from 'committing' to 'synchronized'.
[08/05/24 09:37:03] Repo 'mesDir' sync state transition from 'initializing' to 'downloading'.
[08/05/24 09:37:03] Transfer repo '9319d653': ('normal', 'init') --> ('normal', 'check')
[08/05/24 09:37:03] Transfer repo '9319d653': ('normal', 'check') --> ('normal', 'commit')
[08/05/24 09:37:03] Transfer repo '9319d653': ('normal', 'commit') --> ('normal', 'fs')
[08/05/24 09:37:03] Transfer repo '9319d653': ('normal', 'fs') --> ('normal', 'data')
[08/05/24 09:37:03] Transfer repo '9319d653': ('normal', 'data') --> ('finished', 'finished')
[08/05/24 09:37:03] Repo 'mesDir' sync state transition from 'downloading' to 'synchronized'.
[08/05/24 09:37:05] Repo 'mesDir' sync state transition from 'synchronized' to 'committing'.
[08/05/24 09:37:05] All events are processed for repo 9319d653-ff60-4cf3-8f59-906697cf0c2d.
[08/05/24 09:37:05] Repo 'mesDir' sync state transition from 'committing' to 'synchronized'.
[08/05/24 09:37:31] Repo 'mesDir' sync state transition from 'synchronized' to 'committing'.
[08/05/24 09:37:31] All events are processed for repo 9319d653-ff60-4cf3-8f59-906697cf0c2d.
[08/05/24 09:37:31] Repo 'mesDir' sync state transition from 'committing' to 'synchronized'.
[08/05/24 09:38:02] [08/05/24 09:38:02] Repo 'mesDir' sync state transition from 'initializing' to 'downloading'.
Transfer repo '9319d653': ('normal', 'init') --> ('normal', 'check')
[08/05/24 09:38:02] Transfer repo '9319d653': ('normal', 'check') --> ('normal', 'commit')
[08/05/24 09:38:02] Transfer repo '9319d653': ('normal', 'commit') --> ('normal', 'fs')
[08/05/24 09:38:02] Transfer repo '9319d653': ('normal', 'fs') --> ('normal', 'data')
[08/05/24 09:38:04] Transfer repo '9319d653': ('normal', 'data') --> ('finished', 'finished')
[08/05/24 09:38:04] Repo 'mesDir' sync state transition from 'downloading' to 'synchronized'.
[08/05/24 09:38:06] Repo 'mesDir' sync state transition from 'synchronized' to 'committing'.
[08/05/24 09:38:06] All events are processed for repo 9319d653-ff60-4cf3-8f59-906697cf0c2d.
events.log
[08/05/24 09:33:05] Starting record seafile events.
[08/05/24 09:42:32] mesDir 9319d653-ff60-4cf3-8f59-906697cf0c2d 98ee680edca112626d1a4db7e961eef5a08457f5
[event 1] delete, attachment/订单Json/2024/8/2024-08-05/e669a2ec-5c06-4f44-a789-ba00f618822e/YYCYJJ240803001YG-13-03.json 
[event 2] delete, attachment/IMOS炸单DWG文件/2024/8/2024-08-05/40a8bc7e-3a5b-48c2-b64c-247c059f9930/YYCYJJ240803001YG-13-03.DWG 
[event 3] delete, attachment/IMOS炸单DWG文件/2024/8/2024-08-05/b5ef8d18-4660-49b9-8907-7235682b5ea0/AJ0SDS022407008YG-10-02.DWG 
[event 4] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031001.mpr 
[event 5] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041001.mpr 
[event 6] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031002.mpr 
[event 7] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041002.mpr 
[event 8] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031003.mpr 
[event 9] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041003.mpr 
[event 10] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031004.mpr 
[event 11] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041004.mpr 
[event 12] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041005.mpr 
[event 13] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031005.mpr 
[event 14] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041006.mpr 
[event 15] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031006.mpr 
[event 16] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041007.mpr 
[event 17] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031007.mpr 
[event 18] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031008.mpr 
[event 19] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041010.mpr 
[event 20] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031009.mpr 
[event 21] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041011.mpr 
[event 22] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031010.mpr 
[event 23] delete, mp4/AJ0SCP012407006YG-08-04/AJ0SCP012407006YG-08-041012.mpr 
[event 24] delete, mp4/AJ0SCP012407006YG-08-03/AJ0SCP012407006YG-08-031011.mpr 
事件驱动好处

逻辑解耦: 不需要关心太多的业务复杂度,只需要在需要的时候发起对应的业务逻辑调用。

时序性保证:通过事件发出就像将处理放入队列一样,能够保证时序性。

可靠性保证:由于事件的时序性很强,从而使数据一致性和可靠性得到保证。

本地联思文件同步云联思真实案例

先介绍下业务背景:由于工业软件的特殊性需要将文件进行不同磁盘目录的合并,通过seafile的同步中转能力实现文件的归档,使得在对外开放的服务器上能够正常访问到文件。

本地联思文件同步云联思架构

架构设计图如下:

 由于seafile上传虽然宣称是可靠的,但是在实际操作中发现并不是百分之百的文件都上去了,还是有掉文件的情况。于是本地联思需要负责检查云联思seafile和云联思目录是否真实存在相应的文件。通过云联思部署客户端对外访问的API接口判定云联思seafile或MES目录是否真实存在上传文件,任意一个目录存在就表示同步完成,当然文件还要校验md5,不是名称一样就表示存在。

云联思客户端检查文件API

云联思客户端提供REST HTTP接口访问,提供心跳接口和相关的校验接口:

@RestController
@RequestMapping("/localMes/productionFiles")
@RequiredArgsConstructor
public class ProductionFileController extends BaseController {

    private final SyncFileMappingConfig syncFileConfig;

    /**
     * 远端请求心跳测试
     *
     * @return
     */
    @GetMapping("/heartbeat")
    public Response<String> heartbeat(HttpServletRequest request) {
        String ipAddress = request.getRemoteAddr();
        String message = String.format("请求心跳:%s %s", ipAddress, DateUtil.formatDate(new Date().getTime(), "yyyy-MM-dd HH:mm:ss.SSS"));
        logger.info(message);
        return onSuccess(message);
    }

    /**
     * 验证路径attachment文件是否存在
     *
     * @param syncFileModel
     *

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1981745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ANTD PRO VUE使用

目录 1.访问Antd Pro Vue官网 2.安装 3.目录结构 4.安装运行 5.npm run serve可能会报以下错误 6.解决办法 ​7.缩放会报以下错误 ​8.解决办法 1.访问Antd Pro Vue官网 https://pro.antdv.com 点击开始使用 2.安装 从 GitHub 仓库中直接安装最新的脚手架代码。 git…

TF卡(SD NAND)参考设计和使用提示

目录 电路设计 Layout 设计说明 贴片注意事项 电路设计 1、参考电路&#xff1a; R1~R5 (10K-100 kΩ)是上拉电阻&#xff0c;当SD NAND处于高阻抗模式时&#xff0c;保护CMD和DAT线免受总线浮动。 即使主机使用SD NAND SD模式下的1位模式&#xff0c;主机也应通过上拉电…

《Attention Is All You Need》总结

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃斜杠君&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &#…

H5 使用微信地址

效果图 1.先引入sdk 文件 $.ajax({type: "get",url: baseUrl "api/wechat/Pubaccount/jssdk?url" linkurl,//请求接口&#xff0c;获取授权success:function(data){let res data;jWeixin.config({debug: false,appId: res.appId,timestamp: res.time…

【批处理】一、批量修改文件的后缀名

一、简介 批处理(Batch)是常被应用于windows系统下的脚本语言&#xff1b; 此文章主要讲解如何利用批处理批量修改指定后后缀名的文件&#xff0c;具体过程如下所示&#xff1b; 二、批处理代码实现 REM 关闭请求回显功能 echo offREM 延迟环境变量拓展 setlocal enabledela…

Transformers实战04-微调gpt-2生成python代码。

文章目录 简介案例描述收集数据数据集处理回顾预处理input\_ids和attention_mask&#xff1a;special tokenchunkdatacollatormap 预处理 初始化模型回顾模型参数计算 初始化 完整代码测试 简介 GPT-2&#xff08;Generative Pre-trained Transformer 2&#xff09;是由OpenAI…

C语言——自定义函数调用

今天&#xff0c;在完成大小写转换时遇到了一个问题&#xff1a; 注释&#xff1a;本VS版本为2022&#xff0c;使用了更为安全的scanf_s()函数 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> void daxiaoxie(char *p,int n) {int i;for (i 0; …

奥运会Ⅶ--史上最快AI芯片“搜狐”,比B200快10倍

生成式AI推理的性价比是GPU的140倍。 大模型时代&#xff0c;全球算力短缺&#xff0c;买来铲屎的Nvidia市值被推上天。 如今&#xff0c;终于有一家公司拿出了自己的AI芯片来挑战。 今天早上&#xff0c;科技圈迎来一则重磅消息&#xff0c;美国芯片初创公司Etched推出了旗下…

以太网UDP测试实验

目录 一.UDP简介 1.1UDP概述 1.2UDP协议 二.实验任务 三.模块设计 3.1总体模块设计 3.2UDP模块设计 3.2.1udp_rx模块设计 3.2.2udp_tx模块设计 四.板级验证 一.UDP简介 1.1UDP概述 UDP &#xff08;User Datagram Protocol)用户数据协议 是一种面向无连接的传输层协…

65、zookeeper+kafka实现订阅号生产及阅读

前言回顾 elk es–elasticsearch l–logstash k–kibana f–filebeat 一、elkfk kafka带入集群当中 zookeeper集群kefka集群 zookeeper是一个开源的&#xff0c;分布式的&#xff0c;为分布式架构提供协调服务的APACHE的项目。 保存元数据。 1.1、zookeeper的工作机…

微信支付海外走红,中国企业跨境支付‘轻装上阵’

当我们谈论中国企业走向世界&#xff0c;拓展海外市场的征程时&#xff0c;一个不可忽视的助力者就是微信支付。它不仅是一个支付工具&#xff0c;更是连接中国企业和全球消费者的桥梁&#xff0c;让中国企业在海外也能享受到与国内同等的支付便利与信任。 早在2016年1 月 15 …

AGV的四点关键技术,你都了解吗?

AGV 在现代化工业的发展中&#xff0c;提倡高效&#xff0c;快速&#xff0c;可靠&#xff0c;提倡将人从简单的工作中解放出来。机器人逐渐替代了人出现在各个工作岗位上。机器人具有可编程、可协调作业和基于传感器控制等特点&#xff0c;自动导向小车&#xff08;Automated …

吃透张宇1000题和660题,能保底100分吗?

暑假已经过一半了&#xff0c;很多人都在埋头做题&#xff0c;如果你选择的是1000题660题 一定要好好看这篇笔记&#xff01; 因为很多人做题做到现在&#xff0c;有点迷茫 主要的迷茫点有三个&#xff1a; 1、为什么1000题和660题也都做不少了&#xff0c;遇到新题&#x…

[MRCTF2020]Ezpop1

打卡题目 代码审计 果我们把modifiy对象的var改为php伪协议&#xff0c;然后成功调用invoke魔术方法就可以读出flag 调用invoke魔术方法需要将对象当做一个函数来使用&#xff0c;这样invoke方法就会自动调用 <?php class Modifier { protected $var "php:…

多模态大模型系列解读

人类通过视觉、语言等多种表征媒介&#xff08;模态&#xff09;与世界互动&#xff0c;每种模态都可能在某个方面的表达和交流上有它自己的优势&#xff0c;融合在一起帮助我们更系统、更完整地理解这个世界。随着技术的发展&#xff0c;大预言模型基本实现独立自然的表达&…

IP 地址在 SQL 注入攻击中的作用及防范策略

数据库在各个领域的逐步应用&#xff0c;其安全性也备受关注。SQL 注入攻击作为一种常见的数据库攻击手段&#xff0c;给网络安全带来了巨大威胁。今天我们来聊一聊SQL 注入攻击的基本知识。 SQL 注入攻击的基本原理 SQL 注入是通过将恶意的 SQL 代码插入到输入参数中&#xf…

搭建pxe网络安装环境实现服务器自动部署(基于rhel7)

1.kickstart自动安装脚本制作 1.1开启主机图形 init 5 1.2打开vmware左上角的编辑&#xff0c;打开虚拟网络编译器 1.3安装/启动图形工具 kickstart ​ [rootrhel7 ~]# ls /root/ anaconda-ks.cfg initial-setup-ks.cfg [rootrhel7 ~]# less /root/anaconda-ks.cfg //此…

SSM相关

文章目录 SSM导坐标相关类config文件夹下result文件夹下其他文件夹下自定义异常类 拦截器相关分模块开发可选依赖&#xff08;不透明&#xff09;排除依赖&#xff08;不需要&#xff09;聚合继承 mvn命令 SSM 导坐标 <build><plugins><plugin><groupId…

【方法】如何给7Z压缩包添加密码?

在日常工作中&#xff0c;我们经常需要将文件或文件夹压缩成7Z压缩文件&#xff0c;这样可以节省空间或方便传输。对于重要而敏感的压缩文件&#xff0c;往往还需要设置密码保护。下面一起来看看如何给7Z压缩包添加密码。 我们可以使用7-ZIP解压缩软件&#xff0c;按以下步骤来…

Linux常用命令------文件管理

1.新建目录 mkdir是创建目录的命令 mkdir text mkdir 创建多个目录 mkdir -p a/b/c2.创建文件夹 touch是创建文件夹的命令 touch 文件名 touch 创建多个文件夹 touch a.txt b.txt c.txt3.删除文件 rm 是删除文件的目录删除一个文件&#xff1a; rm example.txt 强制删除一…