1. 什么是FastDFS
FastDFS 是用 c 語(yǔ)言編寫(xiě)的一款開(kāi)源的分布式文件系統(tǒng)荔茬。FastDFS 為互聯(lián)網(wǎng)量身定制霸琴, 充分考慮了冗余備份雄家、負(fù)載均衡、線性擴(kuò)容等機(jī)制碰酝,并注重高可用霎匈、高性能等指標(biāo),使用 FastDFS 很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳送爸、下載等服務(wù)铛嘱。
FastDFS 架構(gòu)包括Tracker(欻葛) server和Storage(死多V吃) server暖释。客戶端請(qǐng)求 Tracker server 進(jìn)行文 件上傳墨吓、下載球匕,通過(guò) Tracker server 調(diào)度最終由 Storage server 完成文件上傳和下載。
Tracker server作用是負(fù)載均衡和調(diào)度帖烘,通過(guò) Tracker server 在文件上傳時(shí)可以根據(jù)一些 策略找到 Storage server 提供文件上傳服務(wù)亮曹。可以將 tracker 稱為追蹤服務(wù)器或調(diào)度服務(wù)器蚓让。
Storage server作用是文件存儲(chǔ),客戶端上傳的文件最終存儲(chǔ)在 Storage 服務(wù)器上讥珍, Storageserver 沒(méi)有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來(lái)管理文件历极。可以將 storage 稱為存儲(chǔ)服務(wù)器衷佃。
服務(wù)端兩個(gè)角色:
Tracker?: 管理集群趟卸,tracker 也可以實(shí)現(xiàn)集群。每個(gè) tracker 節(jié)點(diǎn)地位平等氏义。收集 Storage 集群的狀態(tài)锄列。
Storage?: 實(shí)際保存文件, Storage 分為多個(gè)組惯悠,每個(gè)組之間保存的文件是不同的邻邮。每 個(gè)組內(nèi)部可以有多個(gè)成員,組成員內(nèi)部保存的內(nèi)容是一樣的克婶,組成員的地位是一致的筒严,沒(méi)有 主從的概念。
2. 文件上傳流程
客戶端上傳文件后存儲(chǔ)服務(wù)器將文件 ID 返回給客戶端情萤,此文件 ID 用于以后訪問(wèn)該文 件的索引信息鸭蛙。文件索引信息包括:組名,虛擬磁盤(pán)路徑筋岛,數(shù)據(jù)兩級(jí)目錄娶视,文件名。
組名:文件上傳后所在的 storage 組名稱睁宰,在文件上傳成功后有 storage 服務(wù)器返回肪获, 需要客戶端自行保存。
虛擬磁盤(pán)路徑:storage 配置的虛擬路徑柒傻,與磁盤(pán)選項(xiàng) store_path*對(duì)應(yīng)贪磺。如果配置了 store_path0 則是 M00,如果配置了 store_path1 則是 M01诅愚,以此類推寒锚。
數(shù)據(jù)兩級(jí)目錄:storage 服務(wù)器在每個(gè)虛擬磁盤(pán)路徑下創(chuàng)建的兩級(jí)目錄劫映,用于存儲(chǔ)數(shù)據(jù) 文件。
文件名:與文件上傳時(shí)不同刹前。是由存儲(chǔ)服務(wù)器根據(jù)特定信息生成泳赋,文件名包含:源存儲(chǔ) 服務(wù)器 IP 地址、文件創(chuàng)建時(shí)間戳喇喉、文件大小祖今、隨機(jī)數(shù)和文件拓展名等信息。
使用
使用FastDFS客戶端拣技,需要有配置文件千诬。我們?cè)趍all/utils目錄下新建fastdfs目錄,將提供給大家的client.conf配置文件放到這個(gè)目錄中膏斤。
需要修改一下client.conf配置文件
base_path=FastDFS客戶端存放日志文件的目錄
tracker_server=運(yùn)行tracker服務(wù)的機(jī)器ip:22122
上傳文件需要先創(chuàng)建fdfs_client.client.Fdfs_client的對(duì)象徐绑,并指明配置文件,如
from fdfs_client.client import Fdfs_client
client = Fdfs_client('utils/fastdfs/client.conf')
通過(guò)創(chuàng)建的客戶端對(duì)象執(zhí)行上傳文件的方法
client.upload_by_filename(文件名)
或
client.upload_by_buffer(文件bytes數(shù)據(jù))
需要自定義Django文件存儲(chǔ)系統(tǒng)