上傳文件服務器與web內容服務分離

如今難點在: 
    1\單擊表單提交按鈕後,圖片上傳到圖片服務器,文字內容上傳web服務器數據庫,這兩個服務器分別在兩個城市. 
    2\圖片不能經過web服務器中轉. 
    3\web服務器內容能夠登陸認證,可是怎麼保證"upload"的提交圖片表單是合法的用戶?javascript

 

分析一下: 
1. WEB服務器和圖片服務器分隔兩地,這決定了確定有圖片文件傳遞到遠處的圖片服務器上。那麼可能有2種方式:1是先上傳到WEB服務器,而後它在轉到圖片服務器;2是用戶上傳圖片時直接上傳到圖片服務器上,不中轉(這是我建議的) 

2. 前面幾樓朋友介紹了各類技術,無論哪一種,底層其實都有數據傳輸的,即無論什麼同步軟件,都是要先讓用戶上傳圖片到WEB服務器,而後那個同步系統自動把圖片傳遞到圖片服務器。因此,我上面建議採用用戶直接上傳的方式。在圖片服務器上創建個專門處理文件上傳的應用(固然最好弄個web服務器),用戶在頁面提交上傳時,檢查若是是圖片,則上傳到圖片服務器,其餘內容傳到WEB服務器。 

具體實現我就不細說了,有人說圖片服務器創建WEB程序了會影響圖片服務器的,可是那些同步軟件或者FTP方式不同嗎,和apache/tomcat之類底層都是socket通訊;與其先socket到WEB服務器而後再socket圖片服務器,不如一步到位,前者影響了2個服務器性能,後者隻影響一個。若是怕圖片服務器效果下降,從此能夠把圖片服務器擴充爲2臺,它們之間能夠搞個同步系統,而後用負載均衡來搞定壓力問題。 至於,怎麼在一個頁面上將一個form的東西分傳到2個服務器,這個就不用說了吧,好多方法可用,好比圖片單獨一個form,用javascript來讓用戶點一個提交,同時執行2個form等等......php

 

評論:css

(1) 用到了SSO 單點登錄 html

(2) 遠程mount過來前端

(3) 硬盤映射 吧B服務器的一個文件夾 映射到 A服務器的一個文件夾下!  操做系統本身會吧文件寫到B服務器java

(4) 咱們公司是經過監控數據庫服務器上的對應目錄,只要該目錄文件存在改變,立刻自動同步到文件服務器上,你須要解決幾個問題:找到對對應的windows API、編寫網絡傳輸程序(能夠用FTP實現,效率比較低。)node

 

 

WEB框架實現動靜分離linux

  HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速而且可靠的一種解決方案。
      HAProxy特別 適用於那些負載特大的web站點,這些站點一般又須要會話保持或七層處理。HAProxy運行在當前的硬件上,徹底能夠支持數以萬計的併發鏈接。而且它的 運行模式使得它能夠很簡單安全的整合進您當前的架構中,同時能夠保護你的web服務器不被暴露到網絡上。
   HAProxy實現了一種事件驅動,單一進程模型,此模型支持很是大的併發鏈接數。多進程或多線程模型受內存限制、系統調度器限制以及無處不在的鎖限 制,不多能處理數千併發鏈接。事件驅動模型由於在有更好的資源和時間管理的用戶端(User-Space) 實現全部這些任務,因此沒有這些問題。此模型的弊端是,在多核系統上,這些程序一般擴展性較差。這就是爲何他們必須進行優化以 使每一個CPU時間片(Cycle)作更多的工做。web

wKioL1Npn2qDdiOwAAEUH5H3E2Y175.jpg

 

第一步:安裝httpd、php以及haproxy,這裏咱們直接用yum來安裝便可,這裏咱們使用三臺虛擬機來作測試,前端一臺haproxy作調度,後端兩臺httpd服務器提供web服務,在作動靜分離時時前端haproxy來判斷動態和靜態內容分別調度到哪臺服務器上;數據庫

1. [root@node0 ~]# yum -y install httpd php haproxy

   第二步:安裝好以後給這三臺虛擬配置好相關的網絡設備以及提供相關的測試頁面等,在eth3這張網卡上選擇相同的一個通訊通道,node0這臺虛擬機上haproxy的主機,node1和node2是不一樣的兩臺後端提供web服務器的虛擬主機;

wKiom1NpycrTigk9AAFTVY806zA030.jpg

01. [root@node0 ~]# ifconfig eth3 192.168.27.10/24 up   # 給eth3配置ip地址
02. [root@node0 ~]# ifconfig
03. eth0      Link encap:Ethernet  HWaddr 00:0C:29:B2:AD:BA 
04. inet addr:172.16.27.88  Bcast:172.16.255.255  Mask:255.255.0.0
05. inet6 addr: fe80::20c:29ff:feb2:adba/64 Scope:Link
06. UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
07. RX packets:11122303 errors:0 dropped:0 overruns:0 frame:0
08. TX packets:1193136 errors:0 dropped:0 overruns:0 carrier:0
09. collisions:0 txqueuelen:1000
10. RX bytes:697850934 (665.5 MiB)  TX bytes:74549101 (71.0 MiB)
11.  
12. eth3      Link encap:Ethernet  HWaddr 00:0C:29:B2:AD:C4 
13. inet addr:192.168.27.10  Bcast:192.168.27.255  Mask:255.255.255.0
14. inet6 addr: fe80::20c:29ff:feb2:adc4/64 Scope:Link
15. UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
16. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
17. TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
18. collisions:0 txqueuelen:1000
19. RX bytes:0 (0.0 b)  TX bytes:468 (468.0 b)
20. [root@node0 ~]#

[root@node1 ~]# ifconfig eth0 192.168.27.18/24 up在node1和node2上設置好相關配置,選擇虛擬機上的VMnet2與haproxy上的eth3的同一通訊通道,再配置IP地址和默認網關接口,然後再提供不一樣的頁面以便測試用;

1. [root@node1 ~]# route add defaulte gw 192.168.27.18  # 網關指向haproxy主機的eth3地址
2. [root@node1 ~]# ping 192.168.27.10  # ping一下haproxy的節點看是否ping通
3. [root@node1 ~]# vim /var/www/html/index.html
4. <h3>node1.tanxw.com</h3>
5. [root@node1 ~]# service httpd start # 配置好以後就把web服務啓動起來,再訪問測試一下,測試的鏈接改成橋接方式                        
01. [root@node2 ~]# ifconfig eth0 192.168.27.19/24 up
02. [root@node2 ~]# route add defaulte gw 192.168.27.18  # 網關指向haproxy主機的eth3地址
03. [root@node2 ~]# ping 192.168.27.10  # ping一下haproxy的節點看是否ping通
04. [root@node2 ~]# vim /var/www/html/index.php
05. <h3>node2.tanxw.com</h3>
06. <?php
07. phpinfo();
08. ?>
09. [root@node2 ~]# service httpd start # 配置好以後就把web服務啓動起來,再訪問測試一下,測試的鏈接改成橋接方式
01. ############## 以上的使用默認配置就能夠了 #######################
02.  
03. frontend web *:80   # *表示haproxy監聽全部地址,監聽的端口爲80
04. # 定義訪問控制,表示以url以.css .js .html .php結尾的分別調度到哪臺服務器上訪問
05. acl url_static       path_end       -i .css .js .html   
06. acl url_dynamic      path_end       -i .php
07.  
08. # usr_backend表示使用backend服務,if表示若是知足url_static這個條件就調度到這臺服務器上
09. use_backend        static          if url_static   
10. default_backend    dynamic
11.  
12. backend static   # 定義調用後端的靜態頁面的服務器上
13. server node1 192.168.27.18:80 check inter 3000 rise 2 fall 2 maxconn 5000
14. backend dynamic  # 定義調用後端的動態頁面的服務器上
15. server node2 192.168.27.19:80 check inter 3000 rise 2 fall 2 maxconn 5000  
16. listen statspage # 定義監控管理接口的界面
17. bind *:8888    # 定義訪問頁面端口
18. stats enable    # 啓用管理界面
19. stats hide-version    # 隱藏版本
20. stats uri /admin?stats    # 訪問路徑
21. stats auth xiao:linux    # 訪問時須要驗證登陸
22. stats admin if TRUE    # 若是登陸成功就能夠管理在線服務器

   第三步:配置haproxy的相關配置信息;

第四步:登陸到咱們配置好的管理界面:

wKioL1NpyEvQG7J1AAFJFJbGr34770.jpg

wKioL1NpyJGDqzq2AAXT8Ek41q0971.jpg

第五步:配置好相關的配置以後就能夠測試一下了,

wKioL1NpyMmRMgcTAAC7idNwGA8311.jpg

wKiom1NpyRCSCcioAAJBUPeM-gA579.jpg

最後咱們再分別對這兩個頁面的請求作一下壓力測試看看:

wKioL1NpyUSDI2rLAAVLyURyTn4797.jpg

wKioL1NpyWbjjJwLAAV5MtRD1BY046.jpg

總結:

   HAProxy是一款比較輕量級的負載均衡服務器,特別適用於那些負載特大的web站點,這些站點一般又須要會話保持或七層處理。HAProxy運行在 當前的硬件上,徹底能夠支持數以萬計的併發鏈接。而且它的運行模式使得它能夠很簡單安全的整合進您當前的架構中,同時能夠保護你的web服務器不被暴露到 網絡上。

相關文章
相關標籤/搜索