專業(yè)網(wǎng)站建設(shè)要多少錢快手流量推廣網(wǎng)站
目錄
1.項(xiàng)目架構(gòu)圖
1. 項(xiàng)目架構(gòu)圖
1.1 一些概念
1.2 項(xiàng)目架構(gòu)圖
2. 分布式文件系統(tǒng)
2.1 傳統(tǒng)文件系統(tǒng)
2.2 分布式文件系統(tǒng)
3. FastDFS
3.1 fastDFS介紹
3.2 fastDFS安裝
3.3 fastDFS配置文件
3.4 fastDFS的啟動(dòng)
4. fastDFS狀態(tài)檢測(cè)
4.1 對(duì)file_id的解釋
4. 2上傳下載代碼實(shí)現(xiàn)
5. 源碼安裝 - 回顧
1.項(xiàng)目架構(gòu)圖
????????
1. 項(xiàng)目架構(gòu)圖
1.1 一些概念
-
什么是服務(wù)器
- 硬件: 一臺(tái)配置高的電腦
- 軟件: 電腦必須有一個(gè)能夠解析http協(xié)議的軟件
-
常見的Web服務(wù)器
-
tomcat服務(wù)器
- apache組織產(chǎn)品, 開源的免費(fèi)服務(wù)器
-
weblogic 服務(wù)器
- bea公司, 收費(fèi)的服務(wù)器
- 不交費(fèi), 訪問(wèn)量受限制
-
IIS服務(wù)器
-
Internet Information Server
-
微軟公司主推的服務(wù)器
-
-
nginx
- 小巧且高效的HTTP服務(wù)器
- 也可以做一個(gè)高效的負(fù)載均衡反向代理
- 郵件服務(wù)器
- pop3/smtp/imap
-
1.2 項(xiàng)目架構(gòu)圖
????????
?
?
1. 客戶端
? ?- 網(wǎng)絡(luò)架構(gòu):
? ? ?- b/s
? ? ? ?- 必須使用http協(xié)議
? ? ?- c/s
? ? ? ?- 協(xié)議可以隨意選擇
? ? ? ?- Qt -> http
2. 服務(wù)器
? ?- Nginx
? ? ?- 能處理靜態(tài)請(qǐng)求 -> html, jpg
? ? ?- 動(dòng)態(tài)請(qǐng)求無(wú)法處理
? ? ?- 服務(wù)器集群之后, 每臺(tái)服務(wù)器上部署的內(nèi)容必須相同
? ?- fastCGI
? ? ?- 幫助服務(wù)器處理動(dòng)態(tài)請(qǐng)求
3. 反向代理服務(wù)器
? ?- 客戶端并不能直接訪問(wèn)web服務(wù)器, 直接訪問(wèn)到的是反向代理服務(wù)器
? ?- 客戶端靜請(qǐng)求發(fā)送給反向代理服務(wù)器, 反向代理將客戶端請(qǐng)求轉(zhuǎn)發(fā)給web服務(wù)器
4. 關(guān)系型數(shù)據(jù)庫(kù)
? ?- 存儲(chǔ)文件屬性信息
? ?- 用戶的屬性信息
5. redis - 非關(guān)系型數(shù)據(jù)庫(kù) (內(nèi)存數(shù)據(jù)庫(kù))
? ?- 作用提出程序效率
? ?- 存儲(chǔ)是服務(wù)器經(jīng)常要從關(guān)系型數(shù)據(jù)中讀取的數(shù)據(jù)
6. FASTDFS - 分布式文件系統(tǒng)
? ?- 存儲(chǔ)文件內(nèi)容
? ?- 供用戶下載
2. 分布式文件系統(tǒng)
2.1 傳統(tǒng)文件系統(tǒng)
- 傳統(tǒng)的文件系統(tǒng)格式:
? - ntfs / fat32 / ext3 / ext4
- 可以被掛載和卸載
2.2 分布式文件系統(tǒng)
> 文件系統(tǒng)的全部, 不在同一臺(tái)主機(jī)上,而是在很多臺(tái)主機(jī)上,多個(gè)分散的文件系統(tǒng)組合在一起,形成了一個(gè)完整的文件系統(tǒng)。
分布式文件系統(tǒng):
?1. 需要有網(wǎng)絡(luò)
? ?2. 多臺(tái)主機(jī)
? ? ?- 不需要在同一地點(diǎn)
> 3. 需要管理者
> 4. 編寫應(yīng)用層的管理程序
? ? ?- 不需要編寫
????????
3. FastDFS
3.1 fastDFS介紹
1. fastDFS概述
? ?> - 是用**c語(yǔ)言**編寫的一款開源的分布式文件系統(tǒng)。
? ?> ? - 余慶 - 淘寶的架構(gòu)師
? ?> - 為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,注重高可用、高性能等指標(biāo)
? ?> ? - 冗余備份: 縱向擴(kuò)容
? ?> ? - 線性擴(kuò)容: 橫向擴(kuò)容
? ?> - 可以很容易搭建一套高性能的文件服務(wù)器集群提供文件==**上傳、下載**==等服務(wù)。
? ?> ? - 圖床
? ?> ? - 網(wǎng)盤
2. fastDFS框架中的三個(gè)角色
? ?- 追蹤器 ( Tracker ) - 管理者 - 守護(hù)進(jìn)程
? ? ?- 管理存儲(chǔ)節(jié)點(diǎn)
? ?- 存儲(chǔ)節(jié)點(diǎn) - storage - 守護(hù)進(jìn)程
? ? ?- 存儲(chǔ)節(jié)點(diǎn)是有多個(gè)的
? ?- 客戶端 - 不是守護(hù)進(jìn)程, 這是程序猿編寫的程序
? ? ?- 文件上傳
? ? ?- 文件下載
3. fastDFS三個(gè)角色之間的關(guān)系
?
?
1. 追蹤器
? ? ? - 最先啟動(dòng)追蹤器
? ?2. 存儲(chǔ)節(jié)點(diǎn)
? ? ? - 第二個(gè)啟動(dòng)的角色
? ? ? - 存儲(chǔ)節(jié)點(diǎn)啟動(dòng)之后, 會(huì)單獨(dú)開一個(gè)線程
? ? ? ? - 匯報(bào)當(dāng)前存儲(chǔ)節(jié)點(diǎn)的容量, 和剩余容量
? ? ? ? - 匯報(bào)數(shù)據(jù)的同步情況
? ? ? ? - 匯報(bào)數(shù)據(jù)被下載的次數(shù)
? ?3. 客戶端
? ? ? - 最后啟動(dòng)
? ? ? ? - 上傳
? ? ? ? ? - 連接追蹤器, 詢問(wèn)存儲(chǔ)節(jié)點(diǎn)的信息
? ? ? ? ? ? - 我要上傳1G的文件, 詢問(wèn)那個(gè)存儲(chǔ)節(jié)點(diǎn)有足夠的容量
? ? ? ? ? ? - 追蹤器查詢, 得到結(jié)果
? ? ? ? ? ? - 追蹤器將查到的存儲(chǔ)節(jié)點(diǎn)的IP+端口發(fā)送給客戶端
? ? ? ? ? ? - 通過(guò)得到IP和端口連接存儲(chǔ)節(jié)點(diǎn)
? ? ? ? ? ? - 將文件內(nèi)容發(fā)送給存儲(chǔ)節(jié)點(diǎn)
? ? ? ? - 下載
? ? ? ? ? - 連接追蹤器, 詢問(wèn)存儲(chǔ)節(jié)點(diǎn)的信息
? ? ? ? ? ? - 問(wèn)一下, 要下載的文件在哪一個(gè)存儲(chǔ)節(jié)點(diǎn)
? ? ? ? ? ? - 追蹤器查詢, 得到結(jié)果
? ? ? ? ? ? - 追蹤器將查到的存儲(chǔ)節(jié)點(diǎn)的IP+端口發(fā)送給客戶端
? ? ? ? ? ? - 通過(guò)得到IP和端口連接存儲(chǔ)節(jié)點(diǎn)
? ? ? ? ? ? - 下載文件
4. fastDFS集群
?
1. 追蹤器集群
- ? ? ? - 為什么集群?
- ? ? ? ? - 避免單點(diǎn)故障
- ? ? ? - 多個(gè)Tracker如何工作?
- ? ? ? ? - 輪詢工作
- ? ? ? - 如何實(shí)現(xiàn)集群?
- ? ? ? ? - 修改配置文件
? ?2. 存儲(chǔ)節(jié)點(diǎn)集群
- ? ? ? - fastDFS管理存儲(chǔ)節(jié)點(diǎn)的方式?
- ? ? ? ? - 通過(guò)分組的方式完成的
- ? ? ? - 集群方式(擴(kuò)容方式)
- ? ? ? ? - 橫向擴(kuò)容 - 增加容量
- ? ? ? ? ? - 添加一臺(tái)新的主機(jī) -> 容量增加了
- ? ? ? ? ? - 假設(shè)當(dāng)前有兩個(gè)組: group1, group2
- ? ? ? ? ? ? - 需要添加一個(gè)新的分組 -> group3
- ? ? ? ? ? ? ? - 新主機(jī)屬于第三組
- ? ? ? ? ? - 不同組的主機(jī)之間不需要通信
- ? ? ? ? - 縱向擴(kuò)容 - 數(shù)據(jù)備份
- ? ? ? ? ? - 假設(shè)當(dāng)前有兩個(gè)組: group1, group2
- ? ? ? ? ? ? - 將新的主機(jī)放到現(xiàn)有的組中
- ? ? ? ? ? ? - 每個(gè)組的主機(jī)數(shù)量從1 -> N
- ? ? ? ? ? ? ? - 這n臺(tái)主機(jī)的關(guān)系就是相互備份的關(guān)系
- ? ? ? ? ? ? ? - 同一個(gè)組中的主機(jī)需要通信
- ? ? ? ? ? ? ? - 每組的容量 == 容量最小的這臺(tái)主機(jī)
- ? ? ? - 如何實(shí)現(xiàn)?
- ? ? ? ? - 通過(guò)修改配置文件可實(shí)現(xiàn)
3.2 fastDFS安裝
1. fastDFS安裝
? ?- libfastcommon-1.36.zip
? ? ?- fastdfs的基礎(chǔ)庫(kù)包
? ? ?- unzip xxx.zip
? ? ?- ./make.sh
? ? ?- ./make.sh install
? ?- fastdfs-5.10.tar.gz
? ? ?- tar zxvf xxx.tar.gz(x表示解壓縮,z 表示gz)
? ? ?- ./make.sh
? ? ?- ./make.sh install
2. 測(cè)試
? ?```shell
? ?#fastDFS安裝的所有的可執(zhí)行程序:
? ?/usr/bin/fdfs_*
? ?fdfs_test
? ?```
? ? ? ? 進(jìn)入到root用戶 sudo su-? ?退出exit
1. fastDFS安裝
? ?- libfastcommon-1.36.zip
? ? ?- fastdfs的基礎(chǔ)庫(kù)包
? ? ?- unzip xxx.zip
? ? ?- ./make.sh
? ? ?- ./make.sh install
? ?- fastdfs-5.10.tar.gz
? ? ?- tar zxvf xxx.tar.gz(x表示解壓縮,z 表示gz)
? ? ?- ./make.sh
? ? ?- ./make.sh install
2. 測(cè)試
? ?```shell
? ?#fastDFS安裝的所有的可執(zhí)行程序:
? ?ls /usr/bin/fdfs_*
? ?(ls fdfs_* 是一個(gè)命令,用于列出以 "fdfs_" 開頭的文件或目錄)
? ?fdfs_test
? ?```
?
3.3 fastDFS配置文件
配置文件默認(rèn)位置: ?/etc/fdfs
?
> client.conf.sample ?storage.conf.sample ?storage_ids.conf.sample ?tracker.conf.sample
1. tracker 配置文件
? ?```shell
? ?# 將追蹤器和部署的主機(jī)的IP地址進(jìn)程綁定, 也可以不指定
? ?# 如果不指定, 會(huì)自動(dòng)綁定當(dāng)前主機(jī)IP, 如果是云服務(wù)器建議不要寫(ctrl+shift +v )在vi 編輯器里面復(fù)制內(nèi)容
? ?bind_addr=192.168.247.135
? ?# 追蹤器監(jiān)聽的端口
? ?port=22122
? ?# 追蹤器存儲(chǔ)日志信息的目錄, xxx.pid文件, 必須是一個(gè)存在的目錄
? ?base_path=/home/yuqing/fastdfs
? ?```
2. storage 配置文件
? ?```shell
? ?# 當(dāng)前存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的主機(jī)屬于哪一個(gè)組
? ?group_name=group1
? ?# 當(dāng)前存儲(chǔ)節(jié)點(diǎn)和所應(yīng)該的主機(jī)進(jìn)行IP地址的綁定, 如果不寫, 有fastdfs自動(dòng)綁定
? ?bind_addr=
? ?# 存儲(chǔ)節(jié)點(diǎn)綁定的端口
? ?port=23000
? ?# 存儲(chǔ)節(jié)點(diǎn)寫log日志的路徑
? ?base_path=/home/yuqing/fastdfs
? ?# 存儲(chǔ)節(jié)點(diǎn)提供的存儲(chǔ)文件的路徑個(gè)數(shù)
? ?store_path_count=2
? ?# 具體的存儲(chǔ)路徑
? ?store_path0=/home/yuqing/fastdfs
? ?store_path1=/home/yuqing/fastdfs1
? ?# 追蹤器的地址信息
? ?tracker_server=192.168.247.135:22122
? ?tracker_server=192.168.247.136:22122
? ?```
3. 客戶端配置文件
? ?```shell
? ?# 客戶端寫log日志的目錄
? ?# 該路徑必須存在
? ?# 當(dāng)前的用戶對(duì)于該路徑中的文件有讀寫權(quán)限
? ?# 當(dāng)前用戶robin
? ?# 指定的路徑屬于root
? ?base_path=/home/yuqing/fastdfs
? ?# 要連接的追蹤器的地址信息
? ?tracker_server=192.168.247.135:22122
? ?tracker_server=192.168.247.136:22122
? ?```
vi 編輯器撤銷的快捷鍵
在Vi編輯器中,撤銷操作通常由以下快捷鍵完成:
撤銷上一步操作:
- 在普通模式下,按下?
u
?鍵。撤銷多個(gè)操作:
- 在普通模式下,輸入數(shù)字加上?
u
?鍵。例如,要撤銷最近的兩個(gè)操作,可以按下?2u
。請(qǐng)注意,撤銷操作是逐步遞減的,意味著每次按下?
u
?鍵,都會(huì)撤銷先前的操作,直到?jīng)]有更多的操作可撤銷為止。如果你誤操作或者需要撤銷更多的步驟,你可以重復(fù)按下?
u
?鍵來(lái)連續(xù)執(zhí)行撤銷操作。記住,這些操作都是在普通模式下完成的。總結(jié):
- 進(jìn)入普通模式。
- 按下?
u
?鍵來(lái)逐步撤銷操作。- 按下數(shù)字加上?
u
?鍵來(lái)撤銷多個(gè)操作。這些快捷鍵可幫助你在Vi編輯器中輕松地進(jìn)行撤銷操作。
vi 編輯器反撤銷的快捷鍵
在Vi編輯器中,反撤銷操作通常由以下快捷鍵完成:
- 反撤銷上一步操作:
- 在普通模式下,按下?
Ctrl + r
?鍵。與撤銷操作類似,反撤銷操作也是逐步遞減的。每次按下?
Ctrl + r
?鍵,都會(huì)重新應(yīng)用之前被撤銷的操作,直到?jīng)]有更多的操作可反撤銷為止。請(qǐng)注意,反撤銷操作是在普通模式下完成的。
總結(jié):
- 進(jìn)入普通模式。
- 按下?
Ctrl + r
?鍵來(lái)逐步進(jìn)行反撤銷操作。這些快捷鍵可以幫助你在Vi編輯器中進(jìn)行反撤銷操作,恢復(fù)之前被撤銷的更改
?
?
3.4 fastDFS的啟動(dòng)
1. 第一個(gè)啟動(dòng)追蹤器 ?- 守護(hù)進(jìn)程
? ?```shell
? ?# 啟動(dòng)程序在 /usr/bin/fdfs_*
? ?# 啟動(dòng)
? ?fdfs_trackerd 追蹤器的配置文件(/etc/fdfs/tracker.conf)
? ?# 關(guān)閉
? ?fdfs_trackerd 追蹤器的配置文件(/etc/fdfs/tracker.conf) ?stop
? ?# 重啟
? ?fdfs_trackerd 追蹤器的配置文件(/etc/fdfs/tracker.conf) restart
? ?```
查看
ps aux|grep fdfs_*
2. 第二個(gè)啟動(dòng)存儲(chǔ)節(jié)點(diǎn) - 守護(hù)進(jìn)程
? ?```shell
? ?# 啟動(dòng)
? ?fdfs_storaged 存儲(chǔ)節(jié)點(diǎn)的配置文件(/etc/fdfs/stroga.conf)
? ?# 關(guān)閉
? ?fdfs_storaged 存儲(chǔ)節(jié)點(diǎn)的配置文件(/etc/fdfs/stroga.conf) stop
? ?# 重啟
? ?fdfs_storaged 存儲(chǔ)節(jié)點(diǎn)的配置文件(/etc/fdfs/stroga.conf) restart
? ?```
3. 最后啟動(dòng)客戶端 - 普通進(jìn)程
? ?```shell
? ?# 上傳
? ?fdfs_upload_file 客戶端的配置文件(/etc/fdfs/client.conf) 要上傳的文件
?
?
?
? ?# 得到的結(jié)果字符串: group1/M00/00/00/wKj3h1vC-PuAJ09iAAAHT1YnUNE31352.c
? ?# 下載
? ?fdfs_download_file 客戶端的配置文件(/etc/fdfs/client.conf) 上傳成功之后得到的字符串(fileID)
? ?```
4. fastDFS狀態(tài)檢測(cè)
? ? - 命令
? ? ? ```shell
? ? ? fdfs_monitor /etc/fdfs/client.conf
? ? ? ```
? ? - [Storage Server的7種狀態(tài)](https://blog.csdn.net/u014723529/article/details/46048411)
? ? ? https://blog.csdn.net/u014723529/article/details/46048411
? ? ? ```shell
? ? ? # FDFS_STORAGE_STATUS:INIT ? ? ?:初始化,尚未得到同步已有數(shù)據(jù)的源服務(wù)器
? ? ? # FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到同步已有數(shù)據(jù)的源服務(wù)器
? ? ? # FDFS_STORAGE_STATUS:SYNCING ? :同步中
? ? ? # FDFS_STORAGE_STATUS:DELETED ? :已刪除,該服務(wù)器從本組中摘除
? ? ? # FDFS_STORAGE_STATUS:OFFLINE ? :離線
? ? ? # FDFS_STORAGE_STATUS:ONLINE ? ?:在線,尚不能提供服務(wù)
? ? ? # FDFS_STORAGE_STATUS:ACTIVE ? ?:在線,可以提供服務(wù)
? ? ? ```
?
4.1 對(duì)file_id的解釋
????????
- - group1
? - 文件上傳到了存儲(chǔ)節(jié)點(diǎn)的哪一個(gè)組
? - 如果有多個(gè)組這個(gè)組名可變的
- - M00 - 虛擬目錄
? - 和存儲(chǔ)節(jié)點(diǎn)的配置項(xiàng)有映射
? ? - store_path0=/home/yuqing/fastdfs/data ? ?-> ?M00
? ? ? store_path1=/home/yuqing/fastdfs1/data ? -> M01
- - 00/00
? - 實(shí)際的路徑
? - 可變的
- wKhS_VlrEfOAdIZyAAAJTOwCGr43848.md
? - 文件名包含的信息
? - 采用Base64編碼
? ? - 包含的字段包括
? ? ? - 源storage server Ip 地址 ?
? ? ? - 文件創(chuàng)建時(shí)間 ?
? ? ? - 文件大小 ?
? ? ? - 文件CRC32效驗(yàn)碼
? ? ? ? - 循環(huán)冗余校驗(yàn) ?
? ? ? - 隨機(jī)數(shù)
4. 2上傳下載代碼實(shí)現(xiàn)
1. 使用多進(jìn)程方式實(shí)現(xiàn)
? ?- exec函數(shù)族函數(shù)
? ? ?- execl
? ? ?- execlp
- ? ?- 父進(jìn)程
? ? ?- 子進(jìn)程 -> 執(zhí)行
? ? ? ?execlp("fdfs_upload_file" , "xx", arg, NULL), 有結(jié)果輸出, 輸出到終端
? ? ? ?- 不讓它寫到終端 -> 重定向dup2(old, new)
? ? ? ? ?- old-> 標(biāo)準(zhǔn)輸出
? ? ? ? ?- new -> 管道的寫端
? ? ? ? ?- 文件描述符
? ? ? ? ?- 數(shù)據(jù)塊讀到內(nèi)存 -> 子進(jìn)程
? ? ? ? ????????? ?- 數(shù)據(jù)最終要給到父進(jìn)程
? ? ? ?- pipe -> 讀端, 寫端
? ? ? ? ?- 在子進(jìn)程創(chuàng)建之前創(chuàng)建就行了
- ? ? ?- 父進(jìn)程
? ? ? ?- 讀管道 -> 內(nèi)存
? ? ? ?- 內(nèi)存數(shù)據(jù)寫數(shù)據(jù)庫(kù)
2. 使用fastDFS API實(shí)現(xiàn)
? ? ?
5. 源碼安裝 - 回顧
安裝流程:
1. 以下文件, 里邊有安裝步驟
? ?- readme
? ?- readme.md
? ?- INSTALL
2. 找 可執(zhí)行文件 <font color=green>configure</font>
? ?- 執(zhí)行這個(gè)可執(zhí)行文件
? ? ?- 檢測(cè)安裝環(huán)境
? ? ?- 生成 makefile
3. 執(zhí)行**make**命令
? ?- 編譯源代碼
? ? ?- 生成了動(dòng)態(tài)庫(kù)
? ? ?- 靜態(tài)庫(kù)
? ? ?- 可執(zhí)行程序
4. 安裝 **make install** (需要管理員權(quán)限)
? ?- 將第三步生成的動(dòng)態(tài)庫(kù)/動(dòng)態(tài)庫(kù)/可執(zhí)行程序拷貝到對(duì)應(yīng)的系統(tǒng)目錄
?