[www] 網站分流問題

昨天在上台大 ptt 的bbs,逛到php版,發現裏面有人提問到,如何做到分流的問題,其實這個問題很多方式可以解決,以下我擷取一篇 ptt 上面的回文
作者: MrMarcus (請勿忘記密碼) 看板: PHP 標題: Re: [問題] 網站分流問題 時間: Sun Mar 11 00:26:04 2007 ※ 引述《timyau (我討厭Sony)》之銘言: : 我架了一個網站, : 使用了一台轉址主機、 : 兩台 Web Server 進行分流 : 另外還有一台主機當資料庫使用 : 每次使用者輸入轉址主機的位置 : 主機就會自動將使用者於內部導向兩台Web Server的其中一台 : 所以每次網站只要更新,就得同時更新兩台Web Server的網頁 : 這樣一來就有問題了 : 一但只更新其中一台Web Server, : 使用者連到網站來就會有可能看到不一樣的內容 : 因為有時候可能連到有更新的那一台,有時候會連到沒有更新的那一台 : 有嚐試過把檔案都放在第三台資料庫的 SERVER : 而PHP取得資料庫Server的內部IP(例如192.168.1.3) : 來讀取使用到的相同資源檔案 : 但是從外面要讀取圖片的時候卻發生網址上面是 http://192.168…./ : 的情況 : 這樣當然是有問題的啊 Orz : 想請問這樣的架構是否有問題? : 還是有什麼解決方法嗎?謝謝 這問題我以前有遇到過,狀況很類似。不但每次更新要FTP兩次 到兩台伺服器去,而且在程式裡面也有這個問題,變成凡是使用者 上傳檔案的地方,程式接收到檔案後除了把檔案存在自己這台的 硬碟裡面外,還得把該檔案複製到另一台伺服器硬碟的相對應位置去, 否則被帶到另一台機器去的使用者就會找不到那個檔案。 (上面指的使用者不是維護網站的人,是來瀏覽網站的使用者) 我把這個問題提出來給客戶,因為我覺得讓兩台伺服器的檔案內容 保持同步這種工作不應該在網站程式這端來執行,應該在更底層 的地方由伺服器本身自己處理掉,網站程式這層級不需要去知道 現在到底有幾台伺服器在分散負荷。而且還要考慮到日後擴充的問題, 現在是兩台,以後變成三台,程式要改成把收到的上傳檔案複製到 另外兩台去,變成四台,五台呢? 我那時提出的建議是,增加一套獨立的儲存設備,兩台伺服器上面 設定好把某個目錄,例如/webupload,共同mount到該儲存設備去, 程式裡面就把使用者透過程式上傳的檔案儲存到/webupload去。 然後在http server裡面指定某個目錄名稱對應到/webupload。例如 在httpd.conf裡面: Alias /upload /webupload 前面的/upload是web server上使用的目錄名稱,後面的/webupload 是檔案系統上的目錄名。換句話說,使用者在瀏覽www1.mycompany.com 的時候會看到 myimage.jpg實際上是 /webupload/album/user1/myimage.jpg 這個檔案,而/webupload這個目錄並不在www1本機的硬碟裡面, 是在前面提到的共用儲存設備裡面。對於另一台www2來說也是 一模一樣的狀況。 也就是說www1和www2上面都做了兩件事 1. 把/webupload這個目錄掛載到共用儲存設備上的同一個目錄去。 2. 在httpd.conf裡面加上Alias指向設定。 以上這些步驟(其實只有兩個動作)可以解決使用者透過程式上傳 的檔案的同步問題。至於網站維護人員透過ftp更新的檔案要上傳 兩邊的問題,其實也可以透過類似的方式解決,在www1, www2上面 建立一個目錄掛載到共用儲存設備上的某個目錄去,然後在兩台 的httpd.conf裡面把document_root指向到該目錄去即可。 但是那時候客戶並沒有採行我的建議:( 他們的理由是 1. www1,www2的web server都共用一個儲存設備,萬一該共用 儲存設備掛了怎辦?這樣一來雖然有兩台web server,但是 整個網站都會掛點。 2. 我們沒有預算添購這個儲存設備。 第一個問題我覺得其實不是那麼嚴重,因為該儲存設備不會只有 一顆硬碟,必定是至少兩顆做Raid 1或者三顆做Raid 5甚至以上。 透過Raid可以不用太擔心這個問題。 第二個問題,無解。所以最後還是一樣,FTP兩邊丟,程式裡面兩邊存。 ╮(╯_╰)╭ 回到原po的狀況,其實你只要把你那台資料庫server當成前面 提到的共用儲存設備就可以了。
其實上面的解法算是不錯,目前 國史館台灣文獻館 數位點藏網站就是利用此發法來運作的,上次我自己寫的一篇系統報告,報告給館內長官看的,[報告] 數位典藏網站報告,這一篇裏面我自己有畫一張系統架構圖,如下 數位點藏專案報告 當然這個系統就類似那個人的回覆,後端是放資料的,然後前端可以放程式部份就可以了,我想這樣是最安全的,當然做到網站分流的方法很多,以目前來說,有硬體機器可以達到此要求,不過那也是要看貴單位是否買的起了,如果買不起的話,我想到的方法就是利用dns的技術了 Round Robin DNS Load Balancing,這個方法非常好用,之前我在中正大學的時候,就是利用此方法架設機器,如果一個domain name 對應2個ip,當DNS服務器收到第一個客戶端的請求時,伺服器會把第一個ip給使用者,當第2個人要求的時候,伺服器則會回應第二個ip給使用者,以此類推。通過這樣的循環分配IP地址,就可以讓不同的客戶器訪問不同的服務器,從而達到分擔服務器的負載的功能,當然2台伺服器www要程式達到同步,我想這並不難,如何跟後面資料連接,就如同回文者說的,利用 NFS 或者是 SAMBA ,如果是存放圖片,我想利用link的方式是最好的,以目前線上比較有名的網站,都是利用link方是在show圖,上傳之後,先壓縮一張縮圖,然後在存放原檔圖。