網路與網站服務升級的最終挑戰:移機 (Data migration)
當既有網路服務因為年久失修需要重整,或單純升級需求而要大改版,改版完成後,通常還要再面臨一個大挑戰,叫做「移機」。
什麼是移機?
移機是將現有服務程式,從元有的軟硬體環境中,遷移到另一組軟硬體環境;或是在表皮(介面與使用者流程)不變的狀況下,變更其背後的程式全部或一部份(通稱:大改版);以上兩者狀況或許單獨發生,或許同時存在,皆稱為「移機」(Migration)。
更白話一點來說,移機就像搬家。想像你原本住在五層公寓,二房一廳的空間規劃。但你接下來打算搬到電梯華廈,新的格局是四房二廳,那麼就必須考慮好搬家方式,怎麼搬行李(=往站的內容)才不會亂,如何才能有效率地把東西歸位到應去的空間,以及為了不讓搬家這辛苦的過程拖太久,如何搬才有效率。
哪些狀況需要考慮移機?
當我們指「需要考慮移機」時,通常是指遇到以下狀況:
1. 你的網站服務要更換硬體環境
例如從實體伺服器遷移到雲端,或是將程式從一組伺服器搬到另一組。
2. 你的網站服務要更換軟體環境
例如程式大改版,新版程式需要在不一樣的軟硬體環境上執行;或服務背後的資料庫結構(或稱 Schema)有極大變更時。
3. 你的網站服務需要調整硬體資源和架構
如服務變的越來越熱門,原有的軟硬體已經不敷使用,需要擴充或改版時。
以上三個情況,通常都牽涉到「需將舊版網站服務暫時或永久停止」,意即服務商轉暫停,盈利也暫停。因此進行大改版時必需非常重視這個作業,規劃出能無痛接軌的操作方式。
移機失敗是大災難,不可不慎
做為新服務上線的必經歷程,移機作業如果失敗,輕則資料混亂,對經營者造成營運阻礙,重則引發營收與商譽的多重損失,在這個以線上服務為主要收入的數位時代,業主都必須慎重以對。
可說無論前面花多少時間升級服務,若移機沒有處理好,便是功敗垂成。
移機有哪些步驟,每步驟需要注意什麼?
1. 掌握舊有服務環境
首先要對既有服務程式的執行、佈建(Deploy)以及軟硬體執行環境都有通盤了解,才能擬定出合適的移機計畫。特別是針對新接手網站服務、或負責改版的新團隊來說,花時間多做功課就特別重要。對新團隊來說,如果遇到無法和前任團隊做交接的情況時,則至少需要調查清楚以下幾點:
- 服務啟動的方式:啟動服務時,需要做什麼前置作業,啟動程序中每個步驟的相依性等。
- 設定值調整的方式:如何調整服務運作所需的各項設定,例如資料庫連線帳密、第三方服務(金流、郵件伺服器)的存取私密資訊等,務必釐清資料存放位置,調整後是否可以立刻生效等。
- 服務需先安裝哪些軟體才能正常運作:例如所需資料庫與 OS 版本等。
理想上,接手團隊要能把舊版服務複製一份到不同環境,讓服務能正常執行;對於前手交接狀況不佳的專案,至少要盡可能做到在調整設定後也能正常重新啟動。否則在日後移機時,如果新服務無法順利運行,想先把舊服務啟動重新上線復舊時,可能會遇到不可預期的問題導致服務全部停擺。
2. 對移機條件的設想與討論
首先要考慮的是服務移機中可不可以停機。如果是屬於完全不能停機的關鍵服務,改版移機時就要考慮如何讓新舊資料庫同時存在,並達到即時資料同步。如果可以停機,就要考慮對這個服務而言可以接受停機多久、哪些時段適合停機等。
3. 設想可能的方案
綜合以上兩點後,擬定一個從建置環境並啟動新服務 -> 資料移轉 -> 讓新服務對外服務,最後將原有服務關閉的計畫。其中需要包含每個步驟需要的時間預估、可能遇到的問題以及應對方式,以及如果失敗時要如何讓舊服務繼續使用的方式。
4. 盡可能接近真實地、自動化的預演
建立一組測試環境,並盡可能地用自動化環境佈建(例如 Terraform、Packer)與軟體佈建軟體或服務(例如 Ansible、Chef、AWS CodeDeploy)等,建立從基礎環境到軟體安裝、建置都盡可能大幅自動化的腳本,並事前反覆測試,確認是否能順利安裝。
5.依照計畫執行
當前面的事前準備都完成,理論上移機就能順利執行完畢。
新服務要上線,舊系統即將功成身退,新舊交替時為了讓新服務能無縫接軌,事前需要盡可能審慎地規劃、反覆地演練,並盡可能自動化移機乃至佈建新版服務的過程,才能避免使用者不便、營業甚或商譽上的損失。
在我們替客戶接手前任團隊的專案時,經常會遇到移機的問題。許多客戶也曾經在與其他團隊合作時,在移機上吃盡苦頭。如果你也有移機上的困擾,歡迎隨時聯繫我們,讓我們來為您解答可以怎麼做。