程式需要發佈新版本時,往往需要公告停機時間,並且停機時會影響所有使用者,
為了讓更版程式時對使用者的影響降到最低,因此對不停機更版展開了研究。
必須有的最終結果:
A. 可以先將程式更版到【備援站台】作測試
B. 測試完成後將所有使用者導入【備援站台】
C. 更版【正式站台】
D. 恢復啟用【正式站台】將所有使用者導回
由於我們的系統大多架設在 IIS 上,因此以下解法為 IIS 的專用,
概念上會將 IIS 站台區分為【正式】與【備援】,以下將開始介紹如何部屬:
1. 打開 IIS 選擇到要設定為不停機更版的站台
2. 針對這個站台點選右側清單的繫結
3. 選取 443 Port 的項目選編輯,在主機名稱內輸入xxx.gss.com.tw後按下確定(子網域請設定你申請到的)
4. 修改完成後效果如瀏覽網站下文字
5. 接下來開始設定【備援】站台,請複製正式站台的架構(不包含繫結設定),例如下圖 bb13-2 結構會跟 bb13 一樣。
6. 在你的本機電腦(你桌上的那台),開啟 Hosts Windows 路徑為 C:\Windows\System32\drivers\etc
新增192.168.xxx.xxx xxx-2.gss.com.tw,這邊的網址可自由設定,就看在做【備援站台】測試時想用哪一組網址,但 IP 需為 IIS 的 IP。
7. 大功告成,此時可以來做一些測試:
A. 假設【正式站台】網址為xxx.gss.com.tw,則先到瀏覽器輸入網址上測試是否有結果
B. 將【正式站台】點選 IIS 畫面中最右側 -> 管理網站 -> 停止
C. 停止後再次重新整理瀏覽器並且網址為xxx.gss.com.tw,預期網頁內容仍可正常載入,此時會載入【備援站台】
D. 另開一個網頁輸入為xxx-2.gss.com.tw,預期能夠載入【備援站台】
E. 上述幾點為確保能做到最初要完成的效果
8. 運作原理
A. 當我們在【正式站台】設定下圖時
B. 等同於做出類似於下方的判斷(下方非真實存在,只是以程式碼方式來解釋原理)
C. 當我們在【備援站台】設定下圖時
D. 等同於接續做出類似於下方的判斷(下方非真實存在,只是以程式碼方式來解釋原理)
9. 其他注意事項
程式開發上 Ajax 的 Url Host 應該讀取瀏覽器上的,而非寫死再程式裡面。
10. 【正式站台】與【備援站台】共用驗證
當設定好後可能會面臨兩個站台需要吃同一組登入驗證,此時可參考 Ryan 的這邊文章。
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
評論 4
解決方法 6. 並沒有涵蓋到一般使用者,僅適用於部署人員的測試而已。
一般使用者瀏覽的內容來自【正式站台】或【備援站台】由部屬人員決定,
(關閉【正式站台】可引導所有使用者自動進入【備援站台】)
目標為引導使用者使用最新的網站內容,且使用不中斷,
因此不開放一般使用者操作步驟六。
6. 的下一步 7. 就大功告成了,6. 又不開放一般使用者操作,那是不是省略了什麼?DNS 名稱解析要由誰改變呢?
這個架構最主要就是讓一般使用者無感的情況下更版,
因此不會有任何操作需要使用者設定。
其實要做到不停機更版這點,是不需要設定 DNS 的,
只是就部屬人員的角度來說,會想要在部屬完成之後做一點測試,
因此才會多設定 DNS 這段,能夠直接進入【備援站台】做測試,
因此 DNS 這段是由部屬人員設定。