版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、問(wèn)題引導(dǎo) 互聯(lián)網(wǎng)環(huán)境中的文件如何存儲(chǔ)?(待完善)不能存儲(chǔ)本地、NFS(mount掛載)、HDFS、FastDFS、云存儲(chǔ)(圖床等) 互聯(lián)網(wǎng)環(huán)境中的文件如何進(jìn)行HTTP訪問(wèn)?(待完善)web服務(wù)器:Nginx、Apache等二、FastDFS介紹 FastDFS是什么 FastDFS 是一個(gè)使用C編寫的開源的高性能分布式文件系統(tǒng)(Distributed File System,簡(jiǎn)稱DFS)。它由淘寶開發(fā)平臺(tái)部資深架構(gòu)師余慶開發(fā)。FastDFS孵化平臺(tái)(ChinaUnix)版塊/ forum-240-1.html。FastDFS可以做什么 它對(duì)文件
2、進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件訪問(wèn)(文件上傳、文件下載)等,解決了大容量存 儲(chǔ)和負(fù)載均衡的問(wèn)題。特別適合以文件為載體的在線服務(wù),如相冊(cè)網(wǎng)站、視頻網(wǎng)站、電商網(wǎng)站等等。特別適合以中小文件(建議范圍:4KB file_size T1),tracker接收到這些同步進(jìn)度信息時(shí),就會(huì)進(jìn)行整理,將最小的那個(gè)做為C的同步時(shí)間戳,本例中T1即為C的同步時(shí)間戳為T1(即所有T1以前寫的數(shù)據(jù)都已經(jīng)同步到C上了);同理,根據(jù)上述規(guī)則,tracker會(huì)為A、B生成一個(gè)同步時(shí)間戳。6. 文件下載流程分析 客戶端upload file成功后,會(huì)拿到一個(gè)storage生成的文件名,接下來(lái)客戶端根據(jù)這個(gè)文件名即
3、可訪問(wèn)到該文件。流程說(shuō)明: 1、tracker server收集storage server的狀態(tài)信息1 storage server定時(shí)向已知的tracker server(可以是多個(gè))發(fā)送磁盤剩余空間、文件同步狀況、文件上傳下載次數(shù)等統(tǒng)計(jì)信息2 storage server會(huì)連接整個(gè)集群中所有的Tracker server,向他們報(bào)告自己的狀態(tài)。2、選擇tracker server1跟upload file一樣,在download file時(shí)客戶端可以選擇任意tracker server。3、選擇可用的storage server1 client發(fā)送download請(qǐng)求給某個(gè)tracker
4、,必須帶上文件名信息,tracker從文件名中解析出文件的group、路徑信息、文件大小、創(chuàng)建時(shí)間、源storage server ip等信息,然后為該請(qǐng)求選擇一個(gè)storage用來(lái)服務(wù)讀請(qǐng)求。2 由于group內(nèi)的文件同步是在異步進(jìn)行的,所以有可能出現(xiàn)在讀的時(shí)候,文件還沒有同步到某些storage server上,為了盡量避免訪問(wèn)到這樣的storage,tracker按照如下規(guī)則選擇group內(nèi)可讀的storage:3 1. 該文件上傳到的源頭storage - 源頭storage只要存活著,肯定包含這個(gè)文件,源頭的地址被編碼在文件名中。4 2. 文件創(chuàng)建時(shí)間戳=storage被同步到的時(shí)間
5、戳 且(當(dāng)前時(shí)間-文件創(chuàng)建時(shí)間戳) 文件同步最大時(shí)間(如5 分鐘) - 文件創(chuàng)建后,認(rèn)為經(jīng)過(guò)最大同步時(shí)間后,肯定已經(jīng)同步到其他storage了。5 3. 文件創(chuàng)建時(shí)間戳 同步延遲閥值(如一天)。 - 經(jīng)過(guò)同步延遲閾值時(shí)間,認(rèn)為文件肯定已經(jīng)同步了。7. 新增Storage server分析 組內(nèi)新增加一臺(tái)storage server A 時(shí),由系統(tǒng)自動(dòng)完成已有數(shù)據(jù)同步,處理邏輯如下:1. storage server A連接tracker server,tracker server將storage server A的狀態(tài)設(shè)置為FDFS_STORAGE_STATUS_INIT 。storage s
6、erver A詢問(wèn)追加同步的源服務(wù)器和追加同步截至?xí)r間點(diǎn),如果該組內(nèi)只有storage server A或該組內(nèi)已成功上傳的文件數(shù)為0,則沒有數(shù)據(jù)需要同步,storage server A就可以提供在線服務(wù),此時(shí)tracker將其狀態(tài)設(shè)置為FDFS_STORAGE_STATUS_ONLINE ,否則tracker server將其狀態(tài)設(shè)置為FDFS_STORAGE_STATUS_WAIT_SYNC ,進(jìn)入第二步的處理;2. 假設(shè)tracker server分配向storage server A同步已有數(shù)據(jù)的源storage server為B。同組的storage server和tracker
7、server通訊得知新增了storage server A,將啟動(dòng)同步線程,并向tracker server詢問(wèn)向storage server A追加同步的源服務(wù)器和截至?xí)r間點(diǎn)。storage server B將把截至?xí)r間點(diǎn)之前的所有數(shù)據(jù)同步給storage server A;而其余的storage server從截至?xí)r間點(diǎn)之后進(jìn)行正常同步,只把源頭數(shù)據(jù)同步給storage server A。到了截至?xí)r間點(diǎn)之后,storage server B對(duì)storage server A的同步將由追加同步切換為正常同步,只同步源頭數(shù)據(jù);3. storage server B向storage server
8、 A同步完所有數(shù)據(jù),暫時(shí)沒有數(shù)據(jù)要同步時(shí),storage server B請(qǐng)求tracker server將storage server A的狀態(tài)設(shè)置為FDFS_STORAGE_STATUS_ONLINE ;4. 當(dāng)storage server A向tracker server發(fā)起heart beat時(shí),tracker server將其狀態(tài)更改為FDFS_STORAGE_STATUS_ACTIVE 。四、FastDFS安裝 1. 下載 下載libfastcommon包(github源碼)1/happyfish100/libfastcommon/releases
9、linux wget下載1wget /happyfish100/libfastcommon/archive/V1.0.39.tar.gz下載fastdfs源碼包(github源碼)1/happyfish100/fastdfs/releaseslinux wget下載1wget /happyfish100/fastdfs/archive/V5.11.tar.gz2. 需求 Tracker Server:35Storage Server:36、192
10、.168.10.1373. 安裝 tracker和storage安裝 tracker server和storage server都有一些相同的安裝操作,如下:安裝gcc環(huán)境 1yum install -y gcc-c+安裝libevent,F(xiàn)astDFS依賴libevent庫(kù)(暫不安裝)1yum install -y libevent安裝libfastcommon,libfastcommon是FastDFS官方提供的包,包含了FastDFS運(yùn)行所需要的一些基礎(chǔ)庫(kù)。tar -zxvfV1.0.39.tar.gzcd libfastcommon-1.0.39./make.sh & ./make.s
11、hinstallwget /happyfish100/libfastcommon/archive/V1.0.39.tar.gz1234567拷貝libfastcommon.so文件至/usr/lib目錄(新版本不需要此步) 1cp/usr/lib64/libfastcommon.so /usr/lib/注: libfastcommon安裝好后會(huì)自動(dòng)將庫(kù)文件拷貝至/usr/lib64下,由于FastDFS程序引用usr/lib目錄,所以需 要將/usr/lib64下的庫(kù)文件拷貝至/usr/lib下。下載安裝FastDFS,進(jìn)入FastDFS目錄,編譯安裝tar
12、-zxvfV5.11.tar.gzcd cd fastdfs-5.11./make.sh & ./make.sh installwget /happyfish100/fastdfs/archive/V5.11.tar.gz1234567拷貝/root/fastdfs-5.11/conf目錄下的文件到/etc/fdfs目錄下 1cp /kkb/soft/fastdfs-5.11/conf/* /etc/fdfstracker server配置 注意:base_path目錄要存在 修改/etc/fdfs/tracker.conf1vim /etc/fdfs/tra
13、cker.conf修改內(nèi)容如下:1base_path=/kkb/server/fastdfs/tracker創(chuàng)建tracker服務(wù)器上面的目錄 1mkdir /kkb/server/fastdfs/tracker -p storage server配置 注意:base_path和store_path0目錄要存在 修改/etc/fdfs/storage.conf1vim /etc/fdfs/storage.conf修改內(nèi)容如下:1 #指定storage的組名2 group_name=group13 base_path=/kkb/server/fastdfs/storage4 store_path
14、0=/kkb/server/fastdfs/storage5 #如果有多個(gè)掛載磁盤則定義多個(gè)store_path,如下6#store_path1=.7#store_path2=.8#配置tracker服務(wù)器IP和端口9tracker_Server=21:2212210#如果有多個(gè)則配置多個(gè)tracker11#tracker_Server=:22122創(chuàng)建storage服務(wù)器上面的目錄 1mkdir /kkb/server/fastdfs/storage -p 4. 啟動(dòng) 4.1 Tracker啟動(dòng)命令 1/usr/bin/fdfs_track
15、erd /etc/fdfs/tracker.conf4.2 Storage啟動(dòng)命令 1/usr/bin/fdfs_storaged /etc/fdfs/storage.conf 4.3 Tracker開機(jī)自啟動(dòng) 1vim /etc/rc.d/rc.local將運(yùn)行命令行添加進(jìn)文件:1/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf4.4 Storage開機(jī)自啟動(dòng) 1vim /etc/rc.d/rc.local將運(yùn)行命令行添加進(jìn)文件:1/usr/bin/fdfs_storaged /etc/fdfs/storage.conf5. 上傳圖片測(cè)試 1vim
16、/etc/fdfs/client.confFastDFS安裝成功后可通過(guò)【fdfs_test】命令測(cè)試上傳、下載等操作。 修改client.conf修改內(nèi)容如下:1base_path=/kkb/server/fastdfs/client 2tracker_Server=21:22122創(chuàng)建client的數(shù)據(jù)目錄1mkdir -p /kkb/server/fastdfs/client使用fdfs_test命令將/home下的tomcat.png上傳到FastDFS中1/usr/bin/fdfs_test /etc/fdfs/client.conf upload/etc/
17、fdfs/anti-steal.jpg說(shuō)明: 35/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png就是文件的訪 問(wèn)路徑。對(duì)應(yīng)storage服務(wù)器上的磁盤路徑:/home/fastdfs/fdfs_storage/data/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png 文件。6. tracker.conf6.1 基本配置 1 disable2 #func:配置是否生效3 #valu:true、false4 disable=false5 bind_addr
18、6 #func:綁定IP7 #valu:IP地址8bind_addr=029 port10 #func:服務(wù)端口11 #valu:端口整數(shù)值12port=2212213 connect_timeout14 #func:連接超時(shí)15 #valu:秒單位正整數(shù)值16 connect_timeout=3017 network_timeout18 #func:網(wǎng)絡(luò)超時(shí)19 #valu:秒單位正整數(shù)值20 network_timeout=6021 base_path22 #func:Tracker數(shù)據(jù)/日志目錄地址23 #valu:路徑24 base_path=/home/mich
19、ael/fdfs/base4tracker25 max_connections26 #func:最大連接數(shù)27 #valu:正整數(shù)值28 max_connections=25629 work_threads30 #func:線程數(shù),通常設(shè)置CPU數(shù)31 #valu:正整數(shù)值32 work_threads=433 store_lookup34 #func:上傳文件的選組方式。35 #valu:0、1或2。36 # 0:表示輪詢37 # 1:表示指定組38 # 2:表示存儲(chǔ)負(fù)載均衡(選擇剩余空間最大的組)39 store_lookup=240 store_group41 #func:指定上傳的組,
20、如果在應(yīng)用層指定了具體的組,那么這個(gè)參數(shù)將不會(huì)起效。另外如果store_lookup如果是0或2,則此參數(shù)無(wú)效。42 #valu:group1等43 store_group=group144 store_Server45 #func:上傳服務(wù)器的選擇方式。(一個(gè)文件被上傳后,這個(gè)storage Server就相當(dāng)于這個(gè)文件的storage Server源,會(huì)對(duì)同組的storage Server推送這個(gè)文件達(dá)到同步效果)46 #valu:0、1或247 # 0: 輪詢方式(默認(rèn))48 # 1: 根據(jù)ip 地址進(jìn)行排序選擇第一個(gè)服務(wù)器(IP地址最小者)49 # 2: 根據(jù)優(yōu)先級(jí)進(jìn)行排序(上傳優(yōu)先級(jí)
21、由storage Server來(lái)設(shè)置,參數(shù)名為upload_priority),優(yōu)先級(jí)值越小優(yōu)先級(jí)越高。50 store_Server=051 store_path52 #func:上傳路徑的選擇方式。storage Server可以有多個(gè)存放文件的base path(可以理解為多個(gè)磁盤)。53 #valu:54 # 0: 輪流方式,多個(gè)目錄依次存放文件55 # 2: 存儲(chǔ)負(fù)載均衡。選擇剩余空間最大的目錄存放文件(注意:剩余磁盤空間是動(dòng)態(tài)的,因此存儲(chǔ)到的目錄或磁盤可能也是變化的)56 store_path=057 download_Server58 #func:下載服務(wù)器的選擇方式。59 #v
22、alu:60# 0:輪詢(默認(rèn))61 # 1:IP最小者62 # 2:優(yōu)先級(jí)排序(值最小的,優(yōu)先級(jí)最高。)63 download_Server=064 reserved_storage_space65 #func:保留空間值。如果某個(gè)組中的某個(gè)服務(wù)器的剩余自由空間小于設(shè)定值,則文件不會(huì)被上傳到這個(gè)組。66 #valu:67 # G or g for gigabyte68 # M or m for megabyte69 # K or k for kilobyte70 reserved_storage_space=1GB71 log_level72 #func:日志級(jí)別73 #valu:74 #
23、emerg for emergency75 # alert76 # crit for critical77 # error78 # warn for warning79 # notice80 # info for information81 # debug for debugging82 log_level=info83 run_by_group / run_by_user84 #func:指定運(yùn)行該程序的用戶組85 #valu:用戶組名或空86 run_by_group= 8788 #func:89 #valu:90 run_by_user=91 allow_hosts92 #func:可以
24、連接到tracker Server的ip范圍??稍O(shè)定多個(gè)值。93 #valu94 allow_hosts=95 check_active_interval96 #func:檢測(cè) storage Server 存活的時(shí)間隔,單位為秒。97 #storage Server定期向tracker Server 發(fā)心跳,98 #如果tracker Server在一個(gè)check_active_interval內(nèi)還沒有收到storage Server的一次心跳,99 #那邊將認(rèn)為該storage Server已經(jīng)下線。所以本參數(shù)值必須大于storage Server配置的心跳時(shí)間間隔。100 #通常配置為s
25、torage Server心跳時(shí)間間隔的2倍或3倍。101 check_active_interval=120102 thread_stack_size103 #func:設(shè)定線程棧的大小。 線程棧越大,一個(gè)線程占用的系統(tǒng)資源就越多。104 #如果要啟動(dòng)更多的線程(V1.x對(duì)應(yīng)的參數(shù)為max_connections,V2.0為work_threads),可以適當(dāng)降低本參數(shù)值。105 #valu:如64KB,默認(rèn)值為64,tracker Server線程棧不應(yīng)小于64KB106 thread_stack_size=64KB107 storage_ip_changed_auto_adjust108
26、 #func:這個(gè)參數(shù)控制當(dāng)storage Server IP地址改變時(shí),集群是否自動(dòng)調(diào)整。注:只有在storage Server進(jìn)程重啟時(shí)才完成自動(dòng)調(diào)整。109 #valu:true或false110 storage_ip_changed_auto_adjust=true6.2 同步 1 storage_sync_file_max_delay2 #func:同組storage服務(wù)器之間同步的最大延遲時(shí)間。存儲(chǔ)服務(wù)器之間同步文件的最大延遲時(shí)間,根據(jù)實(shí)際情況進(jìn)行調(diào)整3 #valu:秒為單位,默認(rèn)值為1天(24*3600)4 #sinc:v2.05 storage_sync_file_max_de
27、lay=864006 storage_sync_file_max_time7 #func:存儲(chǔ)服務(wù)器同步一個(gè)文件需要消耗的最大時(shí)間,缺省為300s,即5分鐘。8#sinc:v2.09 storage_sync_file_max_time=30010 sync_log_buff_interval11 #func:同步或刷新日志信息到硬盤的時(shí)間間隔。注意:tracker Server 的日志不是時(shí)時(shí)寫硬盤的,而是先寫內(nèi)存。12 #valu:以秒為單位13 sync_log_buff_interval=106.3 trunk 和 slot1#func:是否使用trunk文件來(lái)存儲(chǔ)幾個(gè)小文件23456
28、78910111213141516171819#valu:true或false #sinc:v3.0use_trunk_file=false#func:最小slot大小#valu:= slot_min_size,當(dāng)小于這個(gè)值的時(shí)候就存儲(chǔ)到trunk file中。默認(rèn)為16MB。#sinc:v3.0slot_max_size=16MB#func:trunk file的size #valu:= 4MB,默認(rèn)為64MB #sinc:v3.0 trunk_file_size=64MB6.4 HTTP相關(guān) 1 是否啟用 HTTP2 #func:HTTP是否生效3 #valu:true或false4 ht
29、tp.disabled=false5 HTTP 服務(wù)器端6 #func:tracker Server上的http port7 #valu:8 #note:只有http.disabled=false時(shí)才生效9 http.Server_port=727110 檢查Storage存活狀態(tài)的間隔時(shí)間(心跳檢測(cè))11 #func:檢查storage http Server存活的間隔時(shí)間12 #valu:?jiǎn)挝粸槊?3 #note:只有http.disabled=false時(shí)才生效14 http.check_alive_interval=3015 心跳檢測(cè)使用的協(xié)議方式16 #func:檢查storage
30、http Server存活的方式17 #valu:18 # tcp:連接到storage Server的http端口,不進(jìn)行request和response。19 # http:storage check alive url must return http status 200.20 #note:只有http.disabled=false時(shí)才生效21 http.check_alive_type=tcp22 檢查 Storage 狀態(tài)的 URI23 #func:檢查storage http Server是否alive的uri/url24 #note:只有http.disabled=false時(shí)
31、才生效25 http.check_alive_uri=/status.html五、FastDFS-Nginx擴(kuò)展模塊源碼分析 1. 背景 在大多數(shù)業(yè)務(wù)場(chǎng)景中,往往需要為FastDFS存儲(chǔ)的文件提供http下載服務(wù),而盡管FastDFS在其storage及tracker 都內(nèi)置了http服務(wù), 但性能表現(xiàn)卻不盡如人意;(余老師在 V4.05 以后的版本就把內(nèi)置 HTTP服務(wù)去掉了)作者余慶在后來(lái)的版本中增加了基于當(dāng)前主流web服務(wù)器的擴(kuò)展模塊(包括nginx/apache),其用意在于利用web服務(wù)器直接對(duì)本機(jī)storage數(shù)據(jù)文件提供http服務(wù),以提高文件下載的性能。不使用Nginx的擴(kuò)展模
32、塊,只安裝web服務(wù)器(Nginx和Apache),也可以對(duì)存儲(chǔ)的文件進(jìn)行訪問(wèn)。那么為什么要使 用Nginx的擴(kuò)展模塊來(lái)訪問(wèn)存儲(chǔ)的文件,原因有兩個(gè):1-如果進(jìn)行文件合并,那么不使用FastDFS的nginx擴(kuò)展模塊,是無(wú)法訪問(wèn)到具體的文件的,因?yàn)槲募喜⒅?,多個(gè)小文件都是存儲(chǔ)在一個(gè)trunk文件中的,在存儲(chǔ)目錄下,是看不到具體的小文件的。23- 如果文件未同步成功,那么不使用FastDFS的nginx擴(kuò)展模塊,是無(wú)法正常訪問(wèn)到指定的文件的,而使用了FastDFS的nginx擴(kuò)展模塊之后,如果要訪問(wèn)的文件未同步成功,那么會(huì)解析出來(lái)該文件的源存儲(chǔ)服務(wù)器ip,然后將該訪問(wèn)請(qǐng)求重定向或者到源存儲(chǔ)服務(wù)
33、器中進(jìn)行訪問(wèn)。2. 概要介紹 2.1 FastDFS整合Nginx的參考架構(gòu) 說(shuō)明: 在每一臺(tái)storage服務(wù)器主機(jī)上部署Nginx及FastDFS擴(kuò)展模塊,由Nginx模塊對(duì)storage存儲(chǔ)的文件提供http下載服務(wù), 僅當(dāng)當(dāng)前storage節(jié)點(diǎn)找不到文件時(shí)會(huì)向源storage主機(jī)發(fā)起redirect 或proxy 動(dòng)作。注: 圖中的tracker可能為多個(gè)tracker組成的集群;且當(dāng)前FastDFS的Nginx擴(kuò)展模塊支持單機(jī)多個(gè)group的情況2.2 幾個(gè)概念 storage_id:指storageserver的id,從FastDFS4.x版本開始,tracker可以對(duì)storag
34、e定義一組ip到id 的映射,以id的形式對(duì)storage進(jìn)行管理。而文件名寫入的不再是storage的ip而是id,這樣的方式對(duì)于數(shù)據(jù)遷 移 十 分 有 利 。storage_sync_file_max_delay: 指storage節(jié)點(diǎn)同步一個(gè)文件最大的時(shí)間延遲,是一個(gè)閾值;如果當(dāng)前時(shí)間 與 文 件 創(chuàng) 建 時(shí) 間 的 差 距 超過(guò) 該 值 則 認(rèn) 為 同 步 已 經(jīng) 完 成 。anti_steal_token:指文件ID防盜鏈的方式,F(xiàn)astDFS 采用token認(rèn)證 的方式進(jìn)行文件防盜鏈檢查。3. 實(shí)現(xiàn)原理 3.1 源碼包說(shuō)明 下載后的源碼包很小,僅包括以下文件:/擴(kuò)展配置文件的dem
35、ocommon.c common.hconfig件下載chunk大小mod_fastdfs.conf5/fastdfs-module核心模塊,實(shí)現(xiàn)了初始化、文件下載的主要邏輯/對(duì)應(yīng)于common.c的頭文件/編譯模塊所用的配置,里面定義了一些重要的常量,如擴(kuò)展配置文件路徑、文ngx_http_fastdfs_module.c/nginx-module接口實(shí)現(xiàn)文件,用于接入fastdfs-module核心模塊邏輯12343.2 初始化 3.2.1 加載配置文件 目標(biāo)文件:/etc/fdfs/mod_fastdfs.conf3.2.2 讀取擴(kuò)展模塊配置 一些重要參數(shù)包括:load_fdfs_par
36、ameters_from_tracker /是否從tracker下載服務(wù)端配置/響應(yīng)模式,proxy或redirectresponse_mode78storage_server_port/storage_server端口,用于在找不到文件情況下連接源storage下載文件(該做法已過(guò)時(shí))/group對(duì)應(yīng)的存儲(chǔ)路徑/連接超時(shí)/接收或發(fā)送超時(shí)group.store_path connect_timeoutnetwork_timeouturl_have_group_name/url中是否包含group/group個(gè)數(shù)group_count1234563.2.3 加載服務(wù)端配置 根據(jù)load_fdfs
37、_parameters_from_tracker 參數(shù)確定是否從tracker獲取server端的配置信息load_fdfs_parameters_from_tracker=true:1. 調(diào)用fdfs_load_tracker_group_ex解析tracker連接配置 ;2. 調(diào)用fdfs_get_ini_context_from_tracker連接tracker獲取配置信息;3. 獲取storage_sync_file_max_delay閾值4. 獲取use_storage_id5. 如果use_storage_id為true,則連接tracker獲取storage_ids映射表(調(diào)用方
38、法:fdfs_get_storage_ids_from_tracker_group)load_fdfs_parameters_from_tracker=false:1. 從mod_fastdfs.conf加載所需配置:storage_sync_file_max_delay、use_storage_id;2. 如果use_storage_id為true,則根據(jù)storage_ids_filename獲取storage_ids映射表(調(diào)用方法:fdfs_load_storage_ids_from_file)3.3 下載過(guò)程(重點(diǎn))3.3.1 解析訪問(wèn)路徑 得到group 和file_id_with
39、out_group 兩個(gè)參數(shù);3.3.2 防盜鏈檢查 根據(jù)g_http_params.anti_steal_token配置(見http.conf文件),判斷是否進(jìn)行防盜鏈檢查;采用token的方式實(shí)現(xiàn)防盜鏈, 該方式要求下載地址帶上token,且token具有時(shí)效性(由ts參數(shù)指明);檢查方式:1md5(fileid_without_group + privKey + ts) = token; 同時(shí)ts沒有超過(guò)ttl范圍 (可參考JavaClient CommonProtocol)調(diào)用方法:fdfs_http_check_token 關(guān)于FastDFS的防盜鏈可參考: http:/bbs.ch
40、/thread-19 16999-1-1.html3.3.3 獲取文件元數(shù)據(jù) 根據(jù)文件ID 獲取元數(shù)據(jù)信息, 包括:源storage ip,文件路徑、名稱,大小 代碼:1if (result=fdfs_get_file_info_ex1(file_id, false, &file_info) != 0).在fdfs_get_file_info_ex1 的實(shí)現(xiàn)中,存在一個(gè)取巧的邏輯: 當(dāng)獲得文件的ip段之后,仍然需要確定該段落是storage的id還是ip。 代碼:fdfs_shared.func.c- fdfs_get_server_id_type(ip_addr.s_a
41、ddr) = FDFS_ID_TYPE_SERVER_ID.if (id 0 & id FDFS_MAX_SERVER_ID(見tracker_types.h)之間; 其中FDFS_MAX_SERVER_ID = (1 0 & (time(NULL) - file_info.create_timestamp storage_sync_file_max_delay)123在通過(guò)有效性檢查之后將進(jìn)行 或重定向處理重定向模式 配置項(xiàng)response_mode = redirect ,此時(shí)服務(wù)端返回返回302響應(yīng)碼,url如下:1http:/ 源storage地址 : 當(dāng)前port 當(dāng)前url 參數(shù)redirect=1(標(biāo)記已重定向過(guò))代碼:response.redirect_url_len = snprintf( response.redirect_url, sizeof(response.redirect_url), http:/%s%s%s%s%c%s, file_
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑工程質(zhì)量事故分析報(bào)告
- 可樂市場(chǎng)分析及行業(yè)分析報(bào)告
- 美宜佳的行業(yè)特點(diǎn)分析報(bào)告
- 中國(guó)面膜行業(yè)規(guī)模分析報(bào)告
- 氧氣分析的行業(yè)報(bào)告
- 住宿生衛(wèi)生制度
- 衛(wèi)生健康制度
- 校園環(huán)境衛(wèi)生消毒制度
- 展示館衛(wèi)生制度
- 明檔衛(wèi)生制度
- 裝修工程施工質(zhì)量檢查標(biāo)準(zhǔn)
- 供銷大集:中國(guó)供銷商貿(mào)流通集團(tuán)有限公司擬對(duì)威海集采集配商貿(mào)物流有限責(zé)任公司增資擴(kuò)股所涉及的威海集采集配商貿(mào)物流有限責(zé)任公司股東全部權(quán)益價(jià)值資產(chǎn)評(píng)估報(bào)告
- 干細(xì)胞臨床研究:知情同意的倫理審查要點(diǎn)
- 檢測(cè)實(shí)驗(yàn)室安全管理與操作規(guī)程
- 2025云南保山電力股份有限公司招聘(100人)筆試歷年參考題庫(kù)附帶答案詳解
- (新教材)2026年人教版八年級(jí)下冊(cè)數(shù)學(xué) 21.1 四邊形及多邊形 課件
- 教師職業(yè)行為規(guī)范手冊(cè)
- 急性胸痛患者的快速識(shí)別與護(hù)理配合
- 法律研究與實(shí)踐
- 單招第四大類考試試題及答案
- 《建設(shè)工程總承包計(jì)價(jià)規(guī)范》
評(píng)論
0/150
提交評(píng)論