我們當前的部署過程是這樣的:導致CDN緩存舊的或損壞的文件部署的競爭條件
- 使用
grunt
創造生產資產。 創建我們的CDN一個郵戳,並指向文件(例如
/scripts/20140324142354/app.min.js
)。旁註:我聽說過這個過程叫做「版本控制」,但我不確定它是否是合適的術語。
將構建提交給github。在Web服務器上
- 運行
git pull
檢索從GitHub的新代碼。
這是一個node.js網站,我們正在使用forever -w
來監視文件更改並相應地更新網站。
我們有一個路線設置在我們的應用程序通過/scripts/*/app.min.js
服務於最新版本的應用程序。
我們這樣版本的原因是因爲我們的CDN被設置爲無限期地緩存JavaScript文件,這故意創建緩存未命中,以便在CDN(以及我們用戶的瀏覽器中)更新代碼。
這工作正常大多數的時間。但是,如果其中一臺服務器在檢查新代碼時稍微有些滯後,那麼它會崩潰。
有時一個客戶端點擊網頁而部署正在進行中,並試圖找回從CDN新的JavaScript代碼。 CDN嘗試檢索它,但點擊未完成檢查新代碼的服務器並緩存舊的或部分下載的文件,從而導致各種問題。
由於我們的CDN有許多邊緣位置,所以這個問題更加嚴重,所以我們的辦公室並不總是立即顯示問題。某些邊緣位置可能拉下了舊/壞的代碼,而其他邊緣位置可能拉下了新的/好的代碼。
有沒有更好的辦法做到這些部署將避免這個問題?
儘管可以做到這一點(我們使用EC2),那麼這樣的部署需要多長時間?當我們每天進行多個部署時,部署需要幾分鐘的時間似乎不可行。 –
您花費多少時間將一切事物每天兩次升級兩次?如果您擔心必須坐在每臺機器上觀看升級,只需將其自動化,以便您可以處理其他事情。 – Daniel