Walkaway DR — 一支手機如何重建一台壞掉的伺服器
手術進行中,伺服器壞了。所有病患紀錄、血品、藥品記錄全在那台裝置上。護理師插上一台全新的備用機,用手機在三分鐘內還原一切。Walkaway 災難復原的運作原理。
沒人計劃過的情境
企業軟體的災難復原靠的是容錯叢集、資料庫複製和全天候維運團隊。假設你有資料中心、網路工程師和預算。
現在把這些全部拿掉。你在災區用一台小型裝置跑醫療站。電源線被踢掉了。儲存卡損壞了。餘震中裝置從折疊桌上掉下來。機器壞了。
過去 72 小時的所有病患紀錄都在那台裝置上。檢傷分類。配藥紀錄。血品保管鏈。進行中的手術案例。全部。
傳統災難復原說:從備份還原。但備份伺服器就是剛壞掉的那台。沒有雲端。沒有第二個資料中心。沒有 IT 團隊。
有的是:一名護理師的手機,過去一直在背景每五分鐘同步資料。
救生艇協議
我們稱之為「救生艇協議」(Lifeboat Protocol),因為這個比喻很精確。船沉了,救生艇載著乘客。伺服器壞了,手機載著資料。
xGrid 裡的每個應用程式都在背景執行「救生艇用戶端」。每五分鐘,它無聲地從伺服器拉取新資料,存放在手機瀏覽器的本地資料庫中——這個資料庫在應用程式重啟、手機重開甚至飛航模式下都能保存。
備份不是一個檔案。它是一個結構化的事件儲存庫,包含伺服器上發生的每一個變更,加上所有關鍵資料表的定期快照——病患紀錄、血品、手術案例、藥品排程、照護計畫。
伺服器壞了,手機不會立刻知道。下次嘗試同步時,它發現伺服器不在了。當一台全新的備用裝置出現在網路上,手機自動偵測到:伺服器身份改變了,資料庫是空的。
這就觸發了還原。
三分鐘完全復原
復原流程是為護理師設計的,不是工程師:
步驟一
偵測
手機看到新伺服器,資料庫是空的。橫幅出現:「偵測到新伺服器,要還原資料嗎?」
步驟二
驗證
護理師輸入管理員密碼。這防止未授權的還原——沒有密碼,你無法覆寫伺服器的資料。
步驟三
還原
手機分批送出所有快取的事件和快照。伺服器以交易方式處理。典型還原:三分鐘以內。
快照立即恢復當前狀態——儀表板幾秒內就能使用。事件重播完整歷史,確保每一條稽核軌跡完好無損。
為什麼需要事件,不只是快照
快照告訴你現在的狀態。事件告訴你怎麼到這個狀態的。
如果只還原快照,你知道病患 A 被配了兩袋血。但你不知道誰配的、什麼時候、為什麼。你不知道這是凌晨兩點的緊急調用,因為病患大量出血,而醫師正在另一台手術。
xGrid 將每個狀態變更記錄為不可變的事件:誰做的、什麼時候、在哪台裝置、基於什麼理由。事件儲存只能新增——事件永遠不會被刪除或修改。每個事件都帶有內容的密碼學雜湊值。
手機還原到新伺服器時,它傳送完整的事件鏈。伺服器可以重建的不只是當前狀態,而是每一個決策、每一個覆寫、每一次交班的完整歷史。
鏈式雜湊驗證
怎麼知道還原的資料是完整且未被篡改的?
每種實體類型(血品、手術案例、病患紀錄)維護一個滾動鏈式雜湊:
chain[i] = SHA-256(chain[i-1] + event_id + payload_hash)
概念類似區塊鏈,但沒有那些額外負擔。如果原始伺服器有 500 個血品事件產生鏈式雜湊 a3f2...,還原伺服器處理同樣的 500 個事件,也必須產生相同的 a3f2...。
如果任何事件遺失、被修改或順序錯亂,鏈式雜湊就會分歧。系統會標記。在任何人開始使用資料之前,你就知道出了問題。
在我們的端對端測試中,我們在伺服器上建立病患資料、血品和手術案例,匯出所有東西,啟動一台全新伺服器,還原,然後比對鏈式雜湊。每次都完全吻合。
冪等性:不穩定網路的安全網
如果護理師的手機在還原中途斷線了怎麼辦?她重新連線,再按一次「還原」。會不會產生重複資料?
不會。每個事件都有唯一識別碼和內容雜湊。伺服器收到已處理過的事件時,它會檢查:
- 相同 ID、相同雜湊:已存在。跳過。不會重複。
- 相同 ID、不同雜湊:衝突。拒絕並記錄待調查。
- 新 ID:正常寫入。
護理師可以按十次「還原」。結果跟按一次一模一樣。這不是便利功能——這是關鍵的安全特性。在壓力大、連線不穩定的環境中,人們會重試。系統必須優雅地處理重試。
還原的內容
救生艇快照涵蓋 20 張關鍵資料表:
核心醫療
麻醉案例、設備狀態、血品及保管鏈
戰場醫療模組
延長照護計畫、生命徵象、醫療介入、藥品排程、臨床警示
野戰作業
戰傷卡、後送請求、損害控制手術階段紀錄、延後手術追蹤
治理
簽核請求、投票紀錄、升級日誌、權限模式、預授權
每一張影響病患安全的資料表都包含在內。如果它會影響臨床決策,它就能在還原中存活。
儲存卡的現實
這類小型裝置使用儲存卡。儲存卡會磨損。它們不是為資料庫伺服器的寫入模式設計的。在 24 小時不間斷的野戰部署中,儲存卡故障不是會不會的問題,而是什麼時候的問題。
這就是救生艇協議存在的原因。不是作為罕見事件的保險,而是系統運作假設的常規部分。系統本來就預期硬體會壞。
還原流程也保護新的儲存卡。不是寫入數千個獨立的資料庫操作,而是每批事件在單一交易中處理。更少的寫入操作意味著更少的儲存卡磨損,延長替換裝置的壽命。
12 步驗證
我們的端對端災難復原測試執行 12 個步驟:
- 在原始伺服器上建立病患、血品、手術案例和戰場醫療資料
- 建立延長照護計畫及生命徵象、戰傷卡、後送請求
- 匯出所有事件和快照(分頁、游標式)
- 記錄原始伺服器的鏈式雜湊指紋
- 啟動一台全新伺服器,資料庫為空
- 還原第一批:快照 + 第一批事件
- 還原剩餘批次
- 比對原始和還原伺服器的鏈式雜湊
- 重新送出所有事件(冪等測試)——驗證零重複
- 驗證所有戰場醫療資料存活:照護計畫、戰傷卡、後送請求
- 檢查還原歷史:零拒絕事件
- 確認完整稽核軌跡完整性
12 個步驟全部通過。還原後的伺服器與原始伺服器無法區分——相同的資料、相同的歷史、相同的鏈式雜湊。
實際意義
野戰醫院團隊帶著兩台裝置和一盒備品部署。當裝置故障——這是必然的——替換流程只需幾分鐘,不是幾小時。不需要工程師。不需要命令列。不需要特殊訓練,只需要「手機問你密碼時輸入密碼」。
資料不住在伺服器上。它住在每一支曾經連接過伺服器的手機和平板上。伺服器不是唯一真相來源。它是一個方便的彙整點。手機才是救生艇,而且它們隨時待命。
這就是 Walkaway 在實踐中的意義。不只是開發團隊可以離開(他們可以——見閃人測試)。硬體也可以「離開」。從桌上掉下去。被踩到。在餘震中起火。資料存活,因為資料從來不只在一個地方。
延伸閱讀:閃人測試 · 戰場上的 SQLite · 中心-衛星架構:斷線環境的網路拓撲