分布式文件存储系统-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.rhkb.cn/news/88032.html

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

相关文章

Scratch 详解 之 线性→代数之——求两线段交点坐标

可能有人要问:求交点坐标有什么用呢?而且为啥要用线代来求?直线方程不行吗??? 这个问题,我只能说,直线方程计算的次数过多了,而且动不动就要考虑线的方向,90的…

【软件测试】Linux环境下Docker搭建+Docker搭建MySQL服务(详细)

目录:导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Linux之docker搭…

Java-类型和变量(基于C语言的补充)

一个简单的Java程序 args){ System.out.println("Hello,world"); } }通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构由如下三个部分组成: 1.源文件(扩展名为*.java):源文件带有类的定义…

【软件测试】UI自动化框架,数据驱动 vs 关键字驱动怎么选

一、UI自动化测试用例剖析 让我们先从分析一端自动化测试案例的代码开始我们的旅程。以下是我之前写的一个自动化测试的小Demo。这个Demo基于Selenium与Java。 自动化测试小Demo 它要测试的东西其实是要看一下百度搜索能不能返回兴业银行的官网。我们分析一下这段代码都包含些…

Linux基础知识学习

一、i.mx6ull交叉编译QT项目 1、步骤 2、安装交叉编译链 使能交叉编译链,使能刚安装的编译器,不然还是老版本的 source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi 3、命令行交叉编译QT项目 wandzhangwa…

81. 搜索旋转排序数组 II

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路: 解法一:直接从前往后搜索,时间复杂度O(n) AC代码: class Solution {public boolean search(int[] nums, int target)…

【报童模型】随机优化问题二次规划

面对需求的不确定性,报童模型是做库存优化的常见模型。而标准报童模型假设价格是固定的,此时求解一个线性规划问题,可以得到最优订货量,这种模型存在局限性。因为现实世界中价格与需求存在一定的关系,本文假设需求q是价…

CSV文件编辑器——Modern CSV for mac

Modern CSV for Mac是一款功能强大、操作简单的CSV文件编辑器,适用于Mac用户快速、高效地处理和管理CSV文件。Modern CSV具有直观的用户界面,可以轻松导入、编辑和导出CSV文件。它支持各种功能,包括排序、过滤、查找和替换,使您能…

锁与原子操作的底层原理

偏向锁 在一个系统当中,大部分时间都不存在并发问题,但频繁的加锁释放锁又会占用大量系统资源。因此为了让线程获得锁的代价更低而引入了偏向锁。 获得偏向锁 1)检查该锁是否被当前线程持有 2)通过CAS操作修改对象头 3&#…

[保研/考研机试] KY109 Zero-complexity Transposition 上海交通大学复试上机题 C++实现

描述: You are given a sequence of integer numbers. Zero-complexity transposition of the sequence is the reverse of this sequence. Your task is to write a program that prints zero-complexity transposition of the given sequence. 输入描述&#xf…

AtcoderABC222场

A - Four DigitsA - Four Digits 题目大意 给定一个整数N,其范围在0到9999之间(包含边界)。在将N转换为四位数的字符串后,输出它。如果N的位数不足四位,则在前面添加必要数量的零。 思路分析 可以使用输出流的格式设…

【Vue3】keep-alive 缓存组件

当在 Vue.js 中使用 <keep-alive> 组件时&#xff0c;它将会缓存动态组件&#xff0c;而不是每次渲染都销毁和重新创建它们。这对于需要在组件间快速切换并且保持组件状态的情况非常有用。 <keep-alive> 只能包含&#xff08;或者说只能渲染&#xff09;一个子组件…

【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型模式。它定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 观察者模式使用三个类Subject、Observer和Client。Subject…

opencv 基础50-图像轮廓学习03-Hu矩函数介绍及示例-cv2.HuMoments()

什么是Hu 矩&#xff1f; Hu 矩&#xff08;Hu Moments&#xff09;是由计算机视觉领域的科学家Ming-Kuei Hu于1962年提出的一种图像特征描述方法。这些矩是用于描述图像形状和几何特征的不变特征&#xff0c;具有平移、旋转和尺度不变性&#xff0c;适用于图像识别、匹配和形状…

JDK 8 升级 JDK 17 全流程教学指南

JDK 8 升级 JDK 17 首先已有项目升级是会经历一个较长的调试和自测过程来保证允许和兼容没有问题。先说几个重要的点 遇到问题别放弃仔细阅读报错&#xff0c;精确到每个单词每一行&#xff0c;不是自己项目的代码也要点进去看看源码到底是为啥报错明确你项目引入的包&#x…

设计模式之简单工厂模式

一、概述 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。 简单工厂模式&#xff1a;又叫做静态工厂方法模式&#xff0c;是由一个工厂对象决定创建出哪一种产品类的实例。 二、适用性 1.当一个类不知道它所必须…

Microsoft SQL Server 2008中,语法生成错误“并行数据仓库(PDW)功能未启用“(已解决)

案例&#xff1a; 原表有两列&#xff0c;分别为月份、月份销售额&#xff0c;而需要一条 SQL 语句实现统计出每个月份以及当前月以前月份销售额和 sql 测试数据准备&#xff1a; DECLARE Temp Table ( monthNo INT, --- 月份 MoneyData Float --- 金额 ) insert INTO TEM…

1.阿里云对象存储OSS

1.对象存储概述 文件上传&#xff0c;是指将本地图片、视频、音频等文件上传到服务器上&#xff0c;可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛&#xff0c;我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务&#xff0c;需要有存储的支持…

变形金刚在图像识别方面比CNN更好吗?

链接到文 — https://arxiv.org/pdf/2010.11929.pdf 一、说明 如今&#xff0c;在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;转换器已成为goto架构&#xff08;例如BERT&#xff0c;GPT-3等&#xff09;。另一方面&#xff0c;变压器在计算机视觉任务中的使用…

将tp5项目、fastadmin项目部署到服务器宝塔面板

目录 一、将你的fastadmin或者tp5项目文件夹上传至你的服务器域名根目录下 二、修改你的网站目录指向&#xff0c;指向public目录&#xff0c;点击保存&#xff0c;并取消勾选防跨站攻击。 三、配置伪静态 四、fastadmin框架上传至服务器后如果想要访问后台可以进行重定向&am…