国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

分布式文件系統(tǒng)FastDFS文件尋址算法研究與應(yīng)用

2021-04-04 10:07:55許金財(cái)
信息記錄材料 2021年10期
關(guān)鍵詞:個(gè)字符客戶端分組

許金財(cái)

(廈門(mén)身份寶網(wǎng)絡(luò)科技有限公司 福建 廈門(mén) 361008)

1 引言

隨著互聯(lián)網(wǎng)的高速發(fā)展,分布式文件系統(tǒng)的應(yīng)用越來(lái)越廣泛。FastDFS是為互聯(lián)網(wǎng)應(yīng)用量身定做的分布式文件系統(tǒng),充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo),適合用來(lái)存儲(chǔ)大量的圖片、視頻、電子文檔等文件。本文對(duì)分布式文件系統(tǒng)FastDFS進(jìn)行研究,并提出了文件編碼到文件地址的轉(zhuǎn)換算法,有效地提升了文件地址的檢索速度[1]。

2 分布式文件系統(tǒng)FastDFS簡(jiǎn)述

FastDFS是一個(gè)開(kāi)源的輕量級(jí)分布式文件系統(tǒng),采用C語(yǔ)言開(kāi)發(fā),支持Linux、FreeBSD等UNIX系統(tǒng),充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,簡(jiǎn)單、靈活、高效。2008年7月FastDFS發(fā)布第一個(gè)版本V1.00,截至目前最新版本是V6.07。FastDFS由跟蹤服務(wù)器(tracker server)、存儲(chǔ)服務(wù)器(storage server)和客戶端(client)3個(gè)部分組成,包括文件存儲(chǔ)、文件同步、文件訪問(wèn)以及高容量和負(fù)載均衡,主要解決海量數(shù)據(jù)存儲(chǔ)問(wèn)題。跟蹤服務(wù)器主要做調(diào)度工作,起到均衡的作用;存儲(chǔ)服務(wù)器主要采用分組方式提供容量和備份服務(wù)。FastDFS文件地址由FastDFS服務(wù)端生成并返回,包含了組名、文件目錄和文件名。

3 FastDFS應(yīng)用

FastDFS客戶端與服務(wù)端采用TCP通信協(xié)議,協(xié)議包由header和body兩部分組成,其中header由8字節(jié)的消息體長(zhǎng)度、1字節(jié)的命令字和1字節(jié)的狀態(tài)碼組成,消息體由不同的命令字確定,允許空內(nèi)容[2]。

FastDFS應(yīng)用中主要包括文件上傳和文件下載兩種應(yīng)用流程。

3.1 文件上傳

文件上傳時(shí),由FastDFS客戶端向跟蹤服務(wù)器發(fā)送帶有101命令字的消息請(qǐng)求,跟蹤服務(wù)器按照負(fù)載均衡算法返回可用的存儲(chǔ)服務(wù)器Socket地址,再由FastDFS客戶端向指定的Socket地址發(fā)送帶有11命令字和文件內(nèi)容(可攜帶文件信息)的消息請(qǐng)求完成文件的上傳,存儲(chǔ)節(jié)點(diǎn)返回帶有組名和文件地址的文件標(biāo)識(shí),例如:group2/M07/1B/D8/ClhYsVz0lV6AWXPXAABKRaBPLb0897.jpg,見(jiàn)圖1。

圖1 文件上傳流程

在FastDFS中,上傳后的文件標(biāo)識(shí)不是由客戶端指定,而是由Storage節(jié)點(diǎn)生成后返回給客戶端的,文件標(biāo)識(shí)作為文件訪問(wèn)憑證。

3.2 文件下載

文件下載時(shí),由FastDFS客戶端向Tracker服務(wù)器發(fā)送帶有102命令字和文件標(biāo)識(shí)的消息請(qǐng)求,Tracker按照文件標(biāo)識(shí)找到匹配的Storage存儲(chǔ)節(jié)點(diǎn)服務(wù)器Socket地址,再由FastDFS客戶端向指定的Socket地址發(fā)送帶有14命令字和文件標(biāo)識(shí)的消息請(qǐng)求,存儲(chǔ)節(jié)點(diǎn)返回文件內(nèi)容,見(jiàn)圖2。

圖2 文件下載流程

4 FastDFS文件尋址算法研究

FastDFS返回的文件標(biāo)識(shí),其表現(xiàn)形式類(lèi)似于文件路徑,字符長(zhǎng)度在46~61,與業(yè)務(wù)系統(tǒng)整合應(yīng)用時(shí),常規(guī)做法是增加UUID唯一識(shí)別碼與文件標(biāo)識(shí)進(jìn)行映射,然后將UUID唯一標(biāo)識(shí)碼作為業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的文件編碼進(jìn)行存儲(chǔ)。文件標(biāo)識(shí)映射需要使用到數(shù)據(jù)庫(kù)或Redis緩存,在高并發(fā)查詢檢索時(shí)會(huì)給服務(wù)器帶來(lái)不小的負(fù)擔(dān)。

結(jié)合FastDFS系統(tǒng)特點(diǎn),本文采用了幾種常見(jiàn)的Base編碼方案來(lái)研究FastDFS文件尋址算法。文件上傳時(shí),將服務(wù)端返回的FastDFS文件標(biāo)識(shí)解析為210 bit數(shù)據(jù)內(nèi)容,經(jīng)過(guò)Base編碼后生成36個(gè)字節(jié)的文件編碼作為文件的業(yè)務(wù)標(biāo)識(shí)。文件下載時(shí),將文件編碼經(jīng)過(guò)Base解碼為210 bit數(shù)據(jù)內(nèi)容,再轉(zhuǎn)換為文件標(biāo)識(shí)。目前已在多個(gè)項(xiàng)目的生產(chǎn)環(huán)境中使用FastDFS分布式文件系統(tǒng)和文件尋址算法。

4.1 Base編碼方案

把二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為可打印字符集數(shù)據(jù)稱(chēng)為base encoding,編碼后的數(shù)據(jù)方便用于存儲(chǔ)和網(wǎng)絡(luò)傳輸,本文中涉及Base32、Base64和Base62 3種編碼方案。

Base32基于32個(gè)包括字母A~V、數(shù)字0~9的可打印字符。

Base64按照bit流進(jìn)行編碼,24(6和8的最小公倍數(shù))bit為一組。

Base62是一種基于62個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法,可打印字符包括字母A~Z、a~z、數(shù)字0~9,共有62個(gè)字符。Base62提供了一種無(wú)符號(hào)輸出的Base64的編碼方案,在許多應(yīng)用場(chǎng)合其純字母和數(shù)字的輸出形式,可以有效規(guī)避因?yàn)榉?hào)帶來(lái)的各種負(fù)面影響,并能夠有效削減或兼容各種Base64的變種形式。

4.2 文件標(biāo)識(shí)解析

FastDFS文件標(biāo)識(shí)由組名、主目錄索引、一級(jí)子目錄、二級(jí)子目錄、文件名5個(gè)部分組成。

(1)最大支持512個(gè)分組(V2.06之前的版本最大支持64個(gè)分組);

(2)最大支持256個(gè)主目錄;

(3)最大支持256×256個(gè)子目錄;

(4)文件名固定為34個(gè)字符,可包含“-”和“_”半角符號(hào);

(5)支持不超過(guò)6個(gè)字符的文件擴(kuò)展名(允許無(wú)擴(kuò)展名)。

文件名的前27個(gè)字符是base64編碼字符,文件名可解析為以下6個(gè)信息。

(1)存儲(chǔ)節(jié)點(diǎn)服務(wù)器IPv4(32位整數(shù));

(2)文件創(chuàng)建時(shí)間(UNIX時(shí)間戳,32位整數(shù));

(3)文件大?。?4位整數(shù));

(4)文件CRC32校驗(yàn)碼(32位整數(shù));

(5)文件擴(kuò)展名(例如.jpg);

(6)隨機(jī)數(shù)(用來(lái)填補(bǔ)文件編號(hào)長(zhǎng)度,其長(zhǎng)度與文件擴(kuò)展名的長(zhǎng)度加起來(lái)等于7)。

前4個(gè)信息組合起來(lái)的160 bit數(shù)據(jù)內(nèi)容經(jīng)過(guò)base64編碼后形成27個(gè)字符的唯一識(shí)別碼,F(xiàn)astDFS支持不超過(guò)6個(gè)字符的文件擴(kuò)展名,為了保持長(zhǎng)度的一致性,當(dāng)文件擴(kuò)展名小于6個(gè)字符時(shí),F(xiàn)astDFS將隨機(jī)生成的阿拉伯?dāng)?shù)字填入文件標(biāo)識(shí)中。

4.3 文件尋址算法

FastDFS文件標(biāo)識(shí)編碼原則,見(jiàn)圖3。

圖3 FastDFS文件標(biāo)識(shí)編碼圖解

(1)使用group1至group512對(duì)分組名稱(chēng)進(jìn)行統(tǒng)一命名(不支持其他自定義命名的組名),編碼時(shí)僅保留分組索引;

(2)對(duì)通用的文件擴(kuò)展名進(jìn)行映射管理,最多可設(shè)置36個(gè)通用的文件擴(kuò)展名映射編碼;

(3)使用Base編碼后的文件編碼長(zhǎng)度固定為36個(gè)字符;

(4)支持未設(shè)置映射編碼的文件擴(kuò)展名(此時(shí)應(yīng)使用文件編碼.后綴名完成文件尋址)。

FastDFS文件標(biāo)識(shí)編碼方式如下。

(1)使用2個(gè)32進(jìn)制編碼裝載10位二進(jìn)制(方便快速識(shí)別分組信息);

(2)使用7個(gè)62進(jìn)制編碼裝載41位二進(jìn)制;

(3)使用9個(gè)62進(jìn)制編碼裝載53位二進(jìn)制。

FastDFS文件編碼尋址過(guò)程如下。

(1)使用Base32將文件編碼的前兩個(gè)字符解碼為10 bit數(shù)據(jù)內(nèi)容;

(2)使用Base62將文件編碼的第3~9個(gè)字符解碼為41 bit數(shù)據(jù)內(nèi)容;

(3)使用Base62將文件編碼的剩余27個(gè)字符分3次解碼為3組53 bit數(shù)據(jù)內(nèi)容;

(4)將開(kāi)頭的10 bit數(shù)據(jù)內(nèi)容轉(zhuǎn)換為分組索引并加上group分組前綴(見(jiàn)圖3的group2);

(5)從41 bit數(shù)據(jù)內(nèi)容中取出前3個(gè)字節(jié),轉(zhuǎn)換為文件目錄(見(jiàn)圖3的M07/1B/D8);

(6)從41 bit數(shù)據(jù)內(nèi)容中取出1 bit,其他3個(gè)53 bit數(shù)據(jù)內(nèi)容中分別取出5 bit,按順序組成擴(kuò)展數(shù)據(jù)項(xiàng),其中十進(jìn)制的第1個(gè)數(shù)據(jù)位為預(yù)定義文件擴(kuò)展名(見(jiàn)圖3的.jpg),其他數(shù)值為文件標(biāo)識(shí)中擴(kuò)展部分的隨機(jī)阿拉伯?dāng)?shù)字(見(jiàn)圖3的897);

(7)其他剩下的160 bit數(shù)據(jù)內(nèi)容,使用Base64解碼為27個(gè)字符的唯一識(shí)別碼(見(jiàn)圖3的ClhYsVz0lV6AWXP XAABKRaBPLb0);

(8)最終尋址結(jié)果:group2/M07/1B/D8/ClhYsVz0lV6 AWXPXAABKRaBPLb0897.jpg。

5 結(jié)語(yǔ)

本文結(jié)合公司多個(gè)項(xiàng)目開(kāi)發(fā)過(guò)程中碰到的圖片存儲(chǔ)服務(wù)文件編碼和檢索問(wèn)題,研究了基于FastDFS分布式文件系統(tǒng)的文件編碼到文件地址的轉(zhuǎn)換算法,有效提升了文件地址的檢索速度[3]。

猜你喜歡
個(gè)字符客戶端分組
分組搭配
怎么分組
縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
分組
不讓長(zhǎng)文件名成為“絆腳石”
電腦迷(2014年8期)2014-04-29 07:37:40
客戶端空間數(shù)據(jù)緩存策略
工資報(bào)表計(jì)算機(jī)軟件論述
卷宗(2011年9期)2011-05-14 17:51:19
庖丁解牛,小說(shuō)按章分割
深水埗区| 泰来县| 凤台县| 桐梓县| 阿坝县| 巴彦淖尔市| 本溪市| 芦山县| 故城县| 漳州市| 会宁县| 承德县| 缙云县| 靖江市| 大悟县| 连州市| 那坡县| 六盘水市| 商河县| 常山县| 化德县| 乌鲁木齐县| 通渭县| 邛崃市| 徐闻县| 荥阳市| 和林格尔县| 花莲县| 资兴市| 凉山| 普定县| 缙云县| 香格里拉县| 桦南县| 马山县| 沁水县| 龙岩市| 宿迁市| 抚顺市| 门源| 玉田县|