Django集成FASTdfs分布式文件系统

简介

FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单、灵活、高效,采用C语言开发,由阿里巴巴开发,并应用的淘宝等APP。

FastDFS对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量文件存储的问题,特别适合以文件为载体的在线服务,如相册网站、文档网站、图片网站、视频网站等等。

FastDFS充分考虑了冗余备份、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

结构

FastDFS文件系统由两大部分构成,一个是客户端,一个是服务端。

客户端通常指我们的程序,比如我们的Java程序去连接FastDFS、操作FastDFS,那我们的Java程序就是一个客户端,FastDFS提供专有API访问,目前提供了C、Java和PHP几种编程语言的API,用来访问FastDFS文件系统。

服务端由两个部分构成:一个是跟踪器(tracker),一个是存储节点(storage)。

跟踪器(tracker)主要做调度工作,在内存中记录集群中存储节点storage的状态信息,是前端Client和后端存储节点storage的枢纽。因为相关信息全部在内存中,Tracker server的性能非常高,一个较大的集群(比如上百个group)中有3台就足够了。

存储节点(storage)用于存储文件,包括文件和文件属性(meta data)都保存到存储服务器磁盘上,完成文件管理的所有功能:文件存储、文件同步和提供文件访问等。

如何部署Fastdfs

  • 常规部署

常规部署需要将Fastdfs安装在服务器上进行配置,如果是集群则比较麻烦

  • Docker部署

Docker只需要几条命令就可以实现部署,本文主要使用这种方式

Docker部署Fastdfs

请确保你的服务器安装了Docker

  • 下载镜像
docker pull delron/fastdfs
  • 构建tracker容器(跟踪服务器)
 docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs youkou1/fastdfs tracker
  • 构建storage容器(存储服务)
docker run -dti --network=host --name storage -e TRACKER_SERVER=IP地址:22122 -v /var/fdfs/storage:/var/fdfs youkou1/fastdfs storage
  • 修改storage容器的端口,非必要
docker exec -it 容器id /bin/bash
cd /etc/fdfs/

在这里插入图片描述

vi storage.conf

在这里插入图片描述

  • 修改完以后退出容器
# 查看已经启动的容器
docker container ls
# 启动或者停止tracker
docker container start/stop tracker
# 启动或者停止storage
docker container start/stop storage
  • 请一定要开放8888和22122端口

如何在Django中使用Fastdfs

  • 这里说一下,为什么网上有很多教程我还要总结?

网上很多成功使用的案例并不适合所有人,有很多是因为环境不同的原因导致出错。

  • 我的环境
python	3.9
django	4.0.6
Centos	7.6
docker	20.10.17
py3Fdfs 2.2.0
  • 安装py3Fdfs
pip install py3Fdfs 
  • 在django项目的settings文件中写入配置信息
fastDFS_conf = {
	'host_tuple': ['192.168.1.1'],
	'connect_timeout': 30,
	'network_timeout': 60,
	'timeout': 30,
	'tracker_server': '192.168.1.1:22122',
	'name': 'Tracker Pool',
	'port': 22122,
}
  • 在需要上传文件的地方加入如下代码
from xxx.settings import fastDFS_conf
from fdfs_client.client import Fdfs_client

# 加载配置文件
client = Fdfs_client(fastDFS_conf)
# 上传文件
rets = client.upload_by_filename(files_path)

'''
	上传成功后的返回值
    {
        'Group name': b'group1',
        'Remote file_id': b'group1/M00/00/00/rBEp7mLM01eAM3j5AAyom-DZDaM495.jpg',
        'Status': 'Upload successed.',
        'Local file name': 'C:\\下载\\aaa.jpg',
        'Uploaded size': '810.15KB',
        'Storage IP': b'192.168.1.1'
    }

'''
# 拿到文件的url地址
if 'successed' in rets['Status']:
    img_url = config['img_url'] + rets['Remote file_id'].decode()
print(img_url)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值