2013-03-31 29 views
9

我需要最佳實踐來更新我的網站上的一個或多個文件,而不會讓它停止;如何更新網站而不讓它停下來?

例如,如果我更新Model.php文件,上傳將需要幾秒鐘,比如在替換服務器上的文件之前的一秒或兩秒鐘,同時,網站將顯示一些錯誤,該model.php是沒有找到,或不完整,即使我壓制錯誤,網站將最終死亡。

這樣做的最佳做法是什麼?

+0

使用數據庫。 – jeremy

+1

有維護模式 – ElefantPhace

+0

重定向所有流量到一個臨時頁面可能? – Songo

回答

10

一個做法是 -

  • 使用版本控制系統(VCS),如SVN或Git的

  • 現場服務器上,使網站的網頁根目錄指向包含您網站最新版本的目錄(例如/www/domain.com/r555)的符號鏈接。 555

  • 當變化來臨時,請檢查在更改VCS

  • 有一個腳本,檢查出的最新修訂到一個新的目錄,攜帶修訂名字(比如,/www/domain.com/r556

  • 結賬完成後,更改符號鏈接並將其指向/www/domain.com/r556

有幾個碰壁,如果你有這樣的文件上傳等,你不能在VCS動態數據,但他們都可以用,無需停機處理。

但是,像數據庫更改等事情可能仍然需要某種維護模式。

+0

也許有點離題...那麼用php代碼來協調數據庫模式更新呢? – Tucker

+1

標準程序是在進行模式更改時將站點置於維護模式。一些數據庫設計允許花哨的東西像[「藍綠色」部署](http://martinfowler.com/bliki/BlueGreenDeployment.html),其中實際上有兩個完整的應用程序和數據庫實例,前面有一個東西作爲更新過程的一部分切入它們之間。 – Charles

+0

夠好,謝謝@Pekka。 – Emad

1

更新生產時,創建一個名爲1.1的文件夾,並將新應用程序放在該文件夾中(無論是手動還是通過某個VCS),然後將公共html目錄符號鏈接到它。該開關將是瞬時的。

這不是一種不常見的方法,因爲如果代碼有問題,管理員可以立即將符號鏈接回1.0文件夾。

另一件好事是將VCS標籤命名爲與文件夾相同,以便可以輕鬆跟蹤正在使用的版本。我經常使用,並在實踐中看到

0

使用緩存服務器/應用程序爲用戶保留可用的緩存副本。 Varnish就是一個例子。您可以將Varnish設置爲在設定的時間內緩存內容,並在實際網站的服務器無法訪問的情況下(Model.php not found錯誤和類似情況)另外處理一段時間。

在這種情況下,如果更新生產系統,Varnish可以繼續提供網站的緩存副本,直到後端啓動並再次正常運行(2秒或2小時)。請記住在更新後清除清漆緩存以防萬一(用戶界面,內容等)爲用戶更改。

所有的web服務器都有一些緩存功能可用,但是varnish等是用於緩存的

另一種選擇是在HAProxy之類的負載均衡器後面運行同一網站的兩個或多個實例。一次更新一個,HAProxy可以將流量重定向到您當前未更新的流量。

如果您需要有關服務器級緩存或負載平衡的更多信息,請轉至Server Fault

相關問題