項目 - 雲盤項目-整體流程


項目架構:

client(客戶端)---nginx(負載均衡、反向代理)---nginx(web服務器、文件上傳下載業務邏輯、fastCGI編程)---mysql(存儲用戶信息)+redis(緩存)+fastFDS(開源文件系統、存儲到硬盤)

 

fastFDS框架:client(上傳下載者)---tracker(管理者)---storage(存儲節點)

fastFDS集群:client(大量訪問)、tracker(防止單點故障)、storage(穩定性:同組備份、擴展性:不同組擴容)

 

//

Redis使用:

 數據結構:

  string字符串(最基本數據類型)

  list列表(類似數組)

  set集合(會自行排序、去重)

  sortedset有序集合(按設定權重自動排序,去重)

  hash哈希(鍵值對,存有多個字段的對象)。

 對key(類似表名)操作:

  keys(配合通配符使用):列出當前數據庫中的key

  type / rename:看key的數據類型 / 重命名key

  del / exists:刪除 / 查看是否存在

  expire / ttl / persist:設定生存時間 / 查看剩余時間 / 去除生存時間。

 其他功能:發布/訂閱,事務(隔離,原子操作)。

 持久化配置:

  快照(rdb文件):將內存里面的數據以二進制形式拷貝到硬盤上;

  追加文件(AOF):存儲不是二進制數據而是對redis的操作指令。

 編程操作數據庫流程(編程需要找合適的通用接口,在其基礎上進行封裝):

  初始化+連接 redisConnect

  執行命令  redisCommand

  查看返回值 redisReply

  清理指針  freeReplyObject、清理句柄  redisFree。

Nginx使用:(用作:http服務器,email服務器,反向代理,負載均衡)

 常用命令:幫助nginx -h;向nginx發送某個信號nginx -s signal;測試配置文件nginx -t;指定配置文件 -c

 nginx服務中master/worker機制:master進程做管理,worker進程干活(處理外部請求)

 nginx部署靜態站點:修改localtion,網站訪問地址對應服務器上文件的路徑 = root + location

 虛擬主機:nginx支持部署多個站點,同時部署多個站點(法1 通過不同端口,法2 同一端口不同http請求頭)

  域名和IP:ipv4為點分十進制表示法表示4個字節的ip地址(一個域名對一個ip,一個ip可被多個域名綁定

  通過域名尋找IP:法1 找本機的/etc/hosts文件添加【ip   域名】,法2 找DNS添加【ip   域名】

 反向代理:外網機子通過代理訪問內網某台機子(正向代理:概念相反)

  配置:需要另外一台裝有nginx服務器,使用【location下的屬性proxy_pass】

 負載均衡:建立在反向代理基礎上,nginx要創建一個服務器組,使用http模塊下【upstream 模塊】

  配置:創建upstream模塊(上游服務器組名),在location中配置【proxy_pass   ip:port】

  權重:分配服務器被訪問的概率【proxy_pass   ip:port weight=xxx】

  備用:如果用於服務的機器掛掉后,就再指定另一台服務器作為備用【proxy_pass   ip:port backup】

 靜態頁面和動態頁面:判斷條件是否使用網頁編程技術,nginx只支持靜態頁面,提供接口支持動態頁面

Http協議:

 超文本傳輸協議,特點是明文,設計之初看文檔,添加安全傳輸層解決傳輸安全問題,使用協議https-http over ssl

 協議內容:

  請求方式:請求行(請求方法[8種,常用2種]   請求資源路徑   http協議版本號)

       請求頭(都是鍵值對key:value   都是客戶端或者說是瀏覽器支持的屬性)

       空行:\r\n(換行   換言之,只要遇到兩個"\r\n" ,就代表請求頭的結束)

       請求數據:POST/PUT才會帶請求數據,GET/DELTE方法不允許攜帶數據

  響應方式:狀態行(http協議版本號   狀態碼   狀態碼意義)

       響應頭(都是鍵值對key:value   都是服務器的屬性)

       空行:\r\n

       響應數據:服務器發給瀏覽器的數據內容

 http傳參:常用2種方法 GET[常用做查詢,而不是傳輸數據 ]和 POST[可傳遞任何數據]

  GET方法:不允許有請求數據,故可放參數地方為請求行[格式 請求地址?key=value&...]

 http提交數據的形式Content-Type:

  text/plain:內容形式一行一個key=value

  application/x-www-form-urlencoded:內容形式/格式與get方法提交參數類似,key=value&key=value...

  application/json:內容形式json(html不支持json提交)

  text/xml:內容形式xml標記語言,優勢是數據表達形式更加豐富,但是耗性能

  multipart/form-data:內容形式為多部份數據(數據以boudary字符串進行分割)

CGI(common gateway interface 通用網關接口):

 原始:Web服務器和CGI程序是父子進程關系,每次有請求fork一個子進程進行處理(nginx不支持CGI)

 改進:FastCGI是對CGI的升級,其一開始就運行在內存(其與Web服務器不是父子進程關系)

  spawn-fcgi:是fastCGI進程管理器(和fastCGI是父子進程關系)

  其中nginx與spawn通信使用socket,spawn與fastCGI是父子進程通信使用管道重定向

 部署一個fastCGI程序:

  spawn&fastCGI要啟動:spawn-fcgi -f [指定fastCGI程序] -a [指定地址] -p [端口]

  nginx要配置:添加location模塊並使用屬性【fastcgi_pass ip:port】【include fastcgi.conf】

 如果指定fastCGI程序是fastCGI下example下echo,則再訪問web服務器就可以看到FastCGI echo頁面信息

  詳細解析看我另一篇博文:https://www.cnblogs.com/citrus/p/11977710.html

 編程需要考慮的問題:

  1、http請求行、請求頭、請求數據怎么獲取(分別通過環境變量、環境變量、程序的標准輸入獲取

  2、如何響應數據給客戶端(通過標准輸出發送給客戶端)

//

開始編程:

 部署站點:新增/usr/local/ngin/conf/nginx.conf   server指定資源路徑

 檢查端口是否可用:執行firewall-cmd加--query-port=80/tcp;--permanent --add-port=3389/tcp;--reload。

 部署fastcgi程序:將需要處理的請求定位到fastcgi程序中

 上傳文件編程思路(改寫echo.c):

  1、客戶端請求(上傳文件)到web服務器

  2、web服務器配合fastCGI將文件保存到本地

  3、將保存到本地的文件保存到fastFDS上

 下載文件編程思路:

  1、客戶端請求(下載文件)到web服務器

  2、web服務器響應fastFDS上對應文件的地址

  3、客戶端通過http訪問下載地址

 數據庫設計:

  實體對象關系:

    1:1關系:合成一張表

    1:N關系:兩張表,較多實體表中添加id指向較少實體表

    N:N關系:三張表,抽取其中一張表來表示兩者之間的關系

  本項目抽實體:用戶(用戶名、密碼、昵稱、電話號碼、電子郵箱);文件(id、md5、size、createtime)

  功能需求:注冊;登陸;文件操作(上傳,下載,查看,刪除,共享)

 服務端項目框架分析:cgi生成目錄、cgi源碼目錄,公共工具源碼目錄,頭文件目錄,配置文件目錄,makefile,部署腳本

 服務啟動腳本邏輯:conf文件部署,fastFDS重啟,fastCGI重啟,nginx重啟,redis重啟

//

環境搭建:

CentOS、

1、安裝 Gcc:

  yum -y install gcc gcc-c++ kernel-devel    //安裝gcc、c++編譯器以及內核文件

  https://www.cnblogs.com/xiyushimei/p/8550930.html

2、安裝 配置 Mysql:

  https://www.cnblogs.com/h-gallop/p/11645965.html

  https://blog.csdn.net/xiaolong_4_2/article/details/81664582

3、安裝 配置 啟動 FastFDS:

  源碼下載:github阿里開源項目

  源碼安裝:先安裝libfastcommom,再安裝fastFDS

  配置文件位置 /etc/fdfs/ :配置tracker.conf,storage.conf,client.conf

  啟動順序:先啟動fdfs_trackerd /etc/fdfs/tracker.conf start,再啟動storage,最后測試一下

  客戶端常用命令:upload上傳,download下載,delete刪除,info查看文件信息,monitor查看tracker信息

  注意:項目中tracker和storage需部署在不同服務器上,自己搗鼓可以部署在同台服務器上

 4、安裝  配置 啟動 Redis:

  源碼下載並安裝:make編譯,make install安裝

  配置redis.conf:【bind---ip】【port---端口】【protected---遠程保護】【damonize---是否守護進程】

     【tcp-backlog---tcp連接個數】【timeout---客戶端超時連接】【databases---數據庫個數】

  啟動服務:redis-server(沒有指定配置文件就使用默認配置)

  編程所需庫:源碼自帶hiredis,需編譯安裝hiredis,包含頭文件和庫文件即可

 5、安裝 配置 Nginx:

  源碼下載:下載依賴(pcre庫、zlib庫、openssl庫),下載nginx,並全部解壓

  源碼安裝:找到nginx目錄下nginx/configure,配置庫路徑,編譯,安裝

  啟動服務:創建 /usr/local/nginx/sbin/nginx 軟連接到 /user/local/bin,啟動nginx

  開啟訪問端口:防火牆的原因https://blog.csdn.net/qq_40543961/article/details/79654230

  配置nginx.conf:配置文件有特定語法,其中模塊區分【http 配置http服務器】【mail 配置email服務器】;

    user【master進程和worker進程用戶都改為root】,worker_processes【配置worker進程數】,

    error_log【配置錯誤日志】,event【模塊 優化性能】,http【模塊 默認使用數據類型 訪問日志】,

    server【模塊/對外提供站點配置 [listen監聽ip:port] [server_name 服務器域名] [charset 字符集]

    [location 模塊/定位目錄/除去ip和port后的路徑   屬性:root資源定位目錄,index資源目錄下的文件]】

6、整合 Nginx 的模塊-ngx_fastfds_module:

  使用fastDFS-module整合到nginx上(該模塊適用於storage服務器,可以直接拿到fastDFS文件下載路徑)

  源碼下載fastdfs-nginx-module,解壓

  配置./configure --with-pcre=pcre庫 --with-zlib=zlib庫 --with-openssl=openssl庫  --add-module=fastdfs模塊/src

  安裝:make && make install(這里是重新編譯了nginx)

  啟動nginx發現沒有worker進程,nginx沒有正常工作,查看nginx下logs錯誤日志,查看原因:

    缺少mod_fastdfs.conf文件:去fastdfs-nginx-module/src目錄下找

    缺少http.conf、mime.types文件:fastDFS源碼/conf目錄下找

    配置文件配置項無效:修改mod_fastdfs.conf配置文件---要和storage.conf一致(此時nginx可以正常啟動)

  nginx.conf中配置fastDFS-module屬性的location模塊(參考fastdfs-nginx-module安裝說明step5)

  再次啟動nginx會打印ngx_http_fastdfs_set pid=80257,則表明可以通過http直接訪問fastFDS下載文件 整合完成

  測試:可以使用fdfs_upload_file /etc/fdfs/client.conf上傳文件得到文件id,再到瀏覽器去下載

  原理:ngx_fastfds_module模塊讓tracker與storage協同工作,文件有就直接返回,沒有就代理到其他storage上

    通過配置response_mod的proxy代理到其他storage服務器

    或 通過配置redirect發送http頭,讓客戶端重定向跳轉到其他服務器上

7、安裝 Spawn-fcgi  FastCGI:

  源碼下載:源碼指的就是Github下載,下載spawn-fcgi,下載fastCGI,並全部解壓

  安裝:先fastCGI,執行./autogen.sh(需安裝auto工具autoconf2.69、antomake1.13.4、libtool2.4.2)

    會報缺少文件夾錯誤(創建空文件夾即可),再執行./configure,再執行make,再執行make install;

    后spawn-fcgi,操作同上(如果碰到鏡像文件找不到可以執行 yum update)。

//

todo:mysql配置賬號密碼;框架代碼已上傳到vm

//


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM