分布式文件存储系统-FastDFS

        前言:FastDFS 是一个分布式文件存储系统,主要用于存储和管理大规模文件数据,如图片、视频、文档等,是淘宝前架构师为了存储图片用C语言开发出来的系统。


        服务端有两个组件  Tracker Server 与 Storage Server ,对应两个角色:

Tracker: 管理和调度集群,tracker 也可实现集群。每 tracker 节点地位平等。收集 Storage 集群的状态。
Storage: 实际保存文件,,Storage 分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组内成员保存的内容是一样的,组成员的地位是一致的,无主从的概念。

工作原理过程:

        客户端 Client 请求 Tracker server 进行文件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文上传和下载。
        详细而言即,Storage 会定时向 Tracker 上报状态信息,当 Tracker 接到 Client 上传或下载 文件请求,Tracker 查询可用 Storage 并返回对应可用的IP和端口,接下来 Client 才真正地上传或下载文件到 Storage 并会带回一些文件信息(文件名、文件ID)返回 Client。

设计功能:

(1)组内备份,Storager同组内会做备份操作(实时数据同步)
(2)横向扩容(线性扩容),存在这样一种场景:当前太多人访问 Storager1-1 服务器下载,那此时再往里存文件就会导致性能下降,那么就会找到 Storager1-2 里存文件(读写分离的感觉),同时他们的数据是实时同步的,就能达到目的。如果都存满了,就横向扩容到Storager2-1。
(3)负载均衡能力。

查询方式:

        FastDFS 通过文件名或文件 ID 来定位和访问文件。它不支持复杂的查询操作。

具有特性:

  1. 高性能:FastDFS采用了多级缓存、分布式存储等技术,具有较高的I/O性能。
  2. 高可用:FastDFS支持文件副本,可以自动进行故障转移,确保数据的可靠性。
  3. 高并发:FastDFS可以同时处理大量的文件上传、下载请求,适用于高并发场景。
  4. 易扩展:FastDFS可以通过添加存储服务器来扩展存储容量,支持在线扩容

适用场景:
        FastDFS 适用于大数据处理、云存储、内容分发等场景,特别是对大文件存储和高并发访问有要求的场景。

以下给出Django配置示例:

(1)安装 FastDFS 的 Python 客户端库(如 fdfs_client-py)

pip install fdfs_client-py

(2)Django中FastDFS配置相关环境变量与配置默认的文件存储后端:

# django⽂件存储
DEFAULT_FILE_STORAGE = 'xxx.FastDFSStorage'  # 替换为实际的存储后端类路径
# FastDFS
FDFS_BASE_URL = 'http://系统IP:对应开放端口/'  # FastDFS 访问地址(注意结尾的斜杠)
FDFS_CLIENT_CONF = 'xxx/client.conf'  # FastDFS 客户端配置文件路径

(3)创建一个 Django 存储后端类,用于将文件上传到 FastDFS,比如:
 

from django.core.files.storage import Storage
from django.conf import settings
from fdfs_client.client import Fdfs_clientclass FDFSStorage(Storage):def __init__(self, client_conf=None, base_url=None):if client_conf is None:client_conf = settings.FDFS_CLIENT_CONFif base_url is None:base_url = settings.FDFS_URLself.client_conf = client_confself.base_url = base_urldef _open(self, name, mode='rb'):passdef _save(self, name, content):# 创建 FastDFS 客户端client = Fdfs_client(self.client_conf)# 上传文件result = client.upload_by_buffer(content.read())# 检查上传结果if result.get('Status') != 'Upload successed.':raise Exception('Upload file to FastDFS failed')# 返回文件名return result.get('Remote file_id')def exists(self, name):return Falsedef url(self, name):return self.base_url + name

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter 特殊组件-逻辑控制器与BeanShell PreProcessor 使用示例

文章目录 前言JMeter 特殊组件-逻辑控制器与BeanShell PreProcessor 使用示例1. 逻辑控制器使用1.1. While Controller 使用示例1.2. 如果(If)控制器 使用示例 2. BeanShell PreProcessor 使用示例 前言 如果您觉得有用的话,记得给博主点个赞…

最小生成树 — Prim算法

同Kruskal算法一样,Prim算法也是最小生成树的算法,但与Kruskal算法有较大的差别。 Prim算法整体是通过“解锁” “选中”的方式,点 -> 边 -> 点 -> 边。 因为是最小生成树,所以针对的也是无向图,所以可以随意…

ES6自用笔记

原型链 引用类型:__proto__(隐式原型)属性,属性值是对象函数:prototype(原型)属性,属性值是对象 ​​​​​​​ 相关方法 person.prototype.isPrototypeOf(stu) Object.getPrototypeOf(Object)替换已不推荐的Object._ _ pro…

系统架构设计专业技能 · 软件工程之软件测试与维护(六)【系统架构设计师】

系列文章目录 系统架构设计专业技能 网络规划与设计(三)【系统架构设计师】 系统架构设计专业技能 系统安全分析与设计(四)【系统架构设计师】 系统架构设计高级技能 软件架构设计(一)【系统架构设计师…

HDFS原理剖析

一、概述 HDFS是Hadoop的分布式文件系统(Hadoop Distributed File System),实现大规模数据可靠的分布式读写。HDFS针对的使用场景是数据读写具有“一次写,多次读”的特征,而数据“写”操作是顺序写,也就是…

百万奖金、大厂offer请你接收!

第三届中国移动“梧桐杯”大数据创新大赛 火热进行中 报名速来~ 今年大学生就业形势格外严峻:全国高校毕业生人数破千万为历年来最多,校招竞争激烈,高薪岗位宁缺毋滥。想弯道超车拿到心仪的offer?仅靠“求神拜佛”对着神明念自己…

初始C语言(6)——详细讲解表达式求值以及其易错点

系列文章目录 第一章 “C“浒传——初识C语言(1)(更适合初学者体质哦!) 第二章 初始C语言(2)——详细认识分支语句和循环语句以及他们的易错点 第三章 初阶C语言(3)——…

QT-Mysql数据库图形化接口

QT sql mysqloper.h qsqlrelationaltablemodelview.h /************************************************************************* 接口描述:Mysql数据库图形化接口 拟制: 接口版本:V1.0 时间:20230727 说明:支…

EmbedPress Pro 在WordPress网站中嵌入任何内容

EmbedPress Pro可让您通过高级自定义、自定义品牌、延迟加载和更多惊人功能嵌入源。为古腾堡块和Elementor编辑器提供支持的一体化 WordPress 嵌入解决方案。使用 EmbedPress 在古腾堡创建交互式内容。使用 EmbedPress 的古腾堡块立即将任何内容嵌入到您的网站。 网址: EmbedP…

互联网发展历程:跨越远方,路由器的启示

互联网的蓬勃发展,一直在追求更广阔的连接,更遥远的距离。然而,在早期的网络中,人们面临着连接距离有限的问题。一项重要的技术应运而生,那就是“路由器”。 连接受限的问题:距离有限 早期的网络受限于直接…

哈夫曼树(赫夫曼树、最优树)详解

目录 哈夫曼树(赫夫曼树、最优树)详解 哈夫曼树相关的几个名词 什么是哈夫曼树 构建哈夫曼树的过程 哈弗曼树中结点结构 构建哈弗曼树的算法实现 哈夫曼树(赫夫曼树、最优树)详解 哈夫曼树相关的几个名词 路径:…

网络通信原理UDP协议(第五十课)

UDP协议:用户数据包协议,无连接、不可靠,效率高 字段长度描述Source Port2字节标识哪个应用程序发送(发送进程)。Destination Port2字节标识哪个应用程序接收(接收进程)。Length2字节UDP首部加上UDP数据的字节数,最小为8。Checksum2字节覆盖UDP首部和UDP数据,是可…