小型分布式文件存储系统GoFastDfs应用简介

news2025/2/2 5:47:39

前言

最近稍微留意了一下各个文件存储系统的协议,发现minio是LGPLV3, 而fastdfs 是GPL3,这些协议其实对于商业应用是一个大坑。故而寻找一些代替品。
go-fastdfs就是其中之一,官网在:
go-fastdfs

具体应用

其实可以直接查看官网教程的。
下面简单提一下大概流程,重点提一下有些业务需求的满足以及二次开发[例如,md5直到,多url转发同一文件等]。

简要部署流程

编译

首先从 github上下载源代码:
https://github.com/sjqzhang/go-fastdfs
然后使用本身自带脚本:
build.sh

进行编译— 当然了,你也可以自行编译的。

得到:
在这里插入图片描述

ps:我额外添加了部分参数进去–因为需要适配业务需求的。。。请无视。

然后执行命令运行程序:

./fileserver server

然后在浏览器上可以看到:
在这里插入图片描述

任意传一个文件,有:
在这里插入图片描述
到这里其实一个简单的原型部署就已经完成了,剩下的其实就是添加启动脚本,关闭脚本,或者添加它作为系统服务开机启动,然后前台进行对接上传文件。

服务器部署用脚本

下面顺便补充一下脚本:
start.sh

#!/bin/sh
touch log.log
nohup ./fileserver server  >> log.log 2>&1 &
tail -f log.log

stop.sh

#!/bin/sh
ps -ef|grep "./fileserver server" |grep -v grep|awk '{printf $2}'|xargs kill -9
ps -ef|grep "./fileserver server"
DATE=`date +%Y-%m-%d-%H-%M` #获取当前系统时间
mkdir logs
mv log.log logs/${DATE}_log.log

具体管理界面

目前这个版本是没有完善的管理界面的,
api倒是有:
https://sjqzhang.github.io/go-fastdfs/api.html
界面的话,可能是以下这个:
在这里插入图片描述
可以查看一下:
在这里插入图片描述

如果需要完善管理后台,又是一个工作量了。

不足/弥补之处

权限限制 回调不灵活

但这里要提一下一些问题,或者需要弥补的地方:
具体可以看看自动生成的配置文件:
在这里插入图片描述

其中有一份内容是:
在这里插入图片描述
上传时候验证方式有几种。。但是,个人感觉还是得根据业务系统来决定是否能够上传或者下载–
比如:每个会员有自己的存储空间,空间有大有小的,那么这种情况怎么算?万一超过了会员空间怎么算?
还有,上传完成了需要尽心回调通知业务服务器的-----客户端进行回调就很不靠谱了。
那就是1、需要回调。
不同的业务系统可能对后续操作不一样,
例如,场景1:
如果是会员成功上传了头像,这时候就需要通知系统进行头像审核了【头像也不是随便能上传的啊,一不小心内容有问题是要进去喝咖啡的】。
例如,场景2:
某个供应商上传了合同,需要通知甲方进行查看。 等等。
所以,其实文件上传成功与否其实也可以是决定下一步业务的关键点来的。
所以。。。嗯,估计重新加业务逻辑进去。

例如,场景3:
积分下载。
某个文件的下载是有权限的,不同会员角色,例如,level2才能进行下载,而且下载完毕以后要扣除一定数量的金币,level2的扣除10个金币,level3的扣除5个金币,level4或以上的免费。这个时候除了authToken以后还得有下载时候需要回调给业务系统一个扣除金币的操作。

没有完整的管理界面。

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

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

相关文章

【学习】JMeter和Postman两种测试工具的主要区别有哪些

Postman和JMeter都是常用的API测试工具,但它们之间存在一些不同之处。以下是Postman和JMeter的主要区别: 语言支持 Postman是一个基于Chrome的应用程序,因此它使用JavaScript作为编程语言。这意味着你可以使用JavaScript来编写测试脚本和断…

【蓝桥杯选拔赛真题50】C++简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C简易炸弹超人 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 有一块矩形游戏场地&#x…

k8s局域网通过operator部署rabbitmq

参考:Installing RabbitMQ Cluster Operator in a Kubernetes Cluster | RabbitMQ 1、下载cluster-operator.yml wget https://github.com/rabbitmq/cluster-operator/releases/download/v2.7.0/cluster-operator.yml 2、拉取对应的镜像,这里的版本是根…

【动态规划】1223. 掷骰子模拟

作者推荐 视频算法专题 LeetCode1223. 掷骰子模拟 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数。 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始编号&#xff09…

跃然纸上的灵感再现,手绘风格的开源绘图白板工具:Excalidraw

Excalidraw:即绘即思,直观呈现未来流程图!- 精选真开源,释放新价值。 概览 在撰写文章或构建演示案例的过程中,为了增强视觉表现力和信息传达深度,适时融入图表或图形显得至关重要。Excalidraw作为一款基于…

mysql之MyBatis核心工作原理

MyBatis核心工作原理 一、源码环境 1.手动编译源码 工欲善其事必先利其器。为了方便我们在看源码的过程中能够方便的添加注释,我们可以自己来从官网下载源码编译生成对应的Jar包,然后上传到本地maven仓库,再引用这个Jar。大家可以自行去官…

Java 扫描某包下所有类的注解并获得注解值

背景 : 需求 需要获取某个包下的所有的注解 并不是全部项目的 所以 只用针对某个包 进行扫描 获取注解 数据就行 百度了一圈 spring boot 没有自带的 获取注解集合的方法 在看 php 中 hyperf 框架 看到了 这个方法 就是因为 我需求是 php 和java 合体 微服务开发 …

从代码生成工具看技术手段升级

从代码生成工具看技术手段升级 过去现在在日常工作中,你会用到代码生成工具吗?最喜欢哪一种呢?你一般使用代码生成工具来做什么?面对尚处于“成长期”的代码生成工具,你有哪些期待和诉求呢? 过去 在过去的…

小程序UI设计规范,界面设计尺寸详解

作为互联网技术的重要组成部分,小程序在日常生活中发挥着越来越重要的作用。因此,了解和严格遵守小程序的 UI 设计标准非常重要,它不仅可以帮助我们在保证良好用户体验的同时优化小程序,还可以使我们的产品在竞争激烈的市场中占据…

java中的继承和组合

继承 在java中继承指的是让类与类之间产生父子关系,被继承的类叫做父类或者基类、超类,继承的类叫做子类或者派生类。这里所说的继承和现实生活中的继承可以理解为同一个意思。当子类继承父类时,子类就能使用父类之中的非私有成员&#xff0c…

深度学习pytorch——卷积神经网络(持续更新)

计算机如何解析图片? 在计算机的眼中,一张灰度图片,就是许多个数字组成的二维矩阵,每个数字就是此点的像素值(图-1)。在存储时,像素值通常位于[0, 255]区间,在深度学习中&#xff0…

C++多线程:线程的创建、join、detach、joinable方法(二)

1、线程的开始与结束 程序运行起来,生成一个进程,该进程所持有的主线程开始自动运行,main主线程运行完所有的代码从main函数中返回表示整个进程运行完毕,标志着主线程和进程的死亡,等待操作系统回收资源,因…

五、基于KubeAdm搭建多节点K8S集群

如需查阅上一步骤,请点击下面链接:四、戴尔R630本地服务器Linux Centos7.9系统安装docker-ce-20.10.10-3.el7版本-CSDN博客文章浏览阅读727次,点赞12次,收藏13次。1、准备工作3、Linux Centos7.9系统的iDRAC远程管理、网络设置、SecureCRT远程登录终端、企业级静态ip地址配…

SpringBoot实现RabbitMQ的定向交换机(SpringAMQP 实现Direct定向交换机)

文章目录 Direct 交换机特点实战声明交换及其队列(以注解方式)发消息 应用 上一篇文章中的 Fanout 模式,一条消息,会被所有订阅其交换机的队列都消费。 但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到 Dir…

Unity-通过AB包使用SpriteAtlas图集(基于unity2018)

项目遇到了一个性能问题,需要优化UI。其中就涉及UI的合批问题,其中自然而然就会关联到图集的概念。旧版图集,Legacy Atlas,还没有太研究。今天主要看一下SpriteAtlas怎么使用的。 因为我们项目资源工程和Runtime是分离的&#xf…

(十二)图像的Sobel梯度锐化

环境:Windows10专业版 IDEA2021.2.3 jdk11.0.1 OpenCV-460.jar 系列文章: (一)PythonGDAL实现BSQ,BIP,BIL格式的相互转换 (二)BSQ,BIL,BIP存储格式的相互转换算法 (三…

RabbitMQ 延时消息实现

1. 实现方式 1. 设置队列过期时间:延迟队列消息过期 死信队列,所有消息过期时间一致 2. 设置消息的过期时间:此种方式下有缺陷,MQ只会判断队列第一条消息是否过期,会导致消息的阻塞需要额外安装 rabbitmq_delayed_me…

327京东一面

1.项目相关 2.手撕SQL 两道 3.JMeter性能测试 首先,进行基准测试: 单用户测试(单用户循环多次得到的数据);为多用户并发执行提供参考 其次,进行负载测试: 通过逐步增加系统负载&#xff0…

2024年水电站大坝安全监测工作提升要点

根据《水电站大坝运行安全监督管理规定》(国家发改委令第23号)和《水电站大坝运行安全信息报送办法》(国能安全〔2016〕261号)的相关规定、要求,电力企业应当在汛期向我中心报送每日大坝汛情。近期,全国各地…

Qt+OpenGL入门教程(三)——绘制三角形

通过前两篇文章的学习,我想大家应该有了基本的理解,我们接下来实操一下。 创建Qt OpenGL窗口 QOpenGLWidget QGLWidget是传统QtOpenGL模块的一部分,与其他QGL类一样,应该在新的应用程序中避免使用。相反,从Qt5.4开始…