具代表性的面試主題

系統設計面試題:設計一個多方審批的配置變更服務

系統設計困難
Offer.cc 編輯團隊發佈 更新

題幹

請設計一個配置變更服務:高風險變更必須由獨立審批人批准後才能執行,系統還要支援逾時、撤銷、重試和回滾。

1. 題目與使用場景

平台團隊需要修改防火牆規則、支付限額或服務路由。提交者不能批准自己的變更,審批必須針對確切版本,執行失敗不能留下半更新狀態。系統目標是把「有人說可以」變成可驗證、可稽核、可恢復的流程。

2. 面試官考察點

  • 是否能區分提案、審批、執行和回滾狀態。
  • 是否保證審批人獨立、審批內容不可被靜默替換。
  • 是否處理並發審批、重複請求、逾時、撤銷和權限變化。
  • 是否在控制風險的同時提供小範圍試運行和穩定回退路徑。

NIST SP 800-128 要求配置變更由獨立於請求者的授權人員審查;Google SRE 強調配置版本應進入程式碼審查,並在新配置未通過檢查時繼續使用舊配置。設計應把這些原則落實到資料和狀態機。

3. 回答前需要釐清的問題

  1. 哪些資源和欄位屬於高風險,是否按環境或租戶區分?
  2. 審批是單人、多人任一通過,還是必須達到人數和角色門檻?
  3. 執行是全量切換、分批發布,還是需要目標實例確認?
  4. 回滾目標是上一個已知版本,還是提交者指定的版本?

4. 30 秒回答框架

用「提案快照—策略匹配—審批隔離—執行器—回滾稽核」回答:

我把每次變更凍結成不可變版本,策略根據資源、風險和環境選擇獨立審批人。審批記錄版本摘要和策略版本,提交者不能滿足審批門檻;達到門檻後由冪等執行器分批套用,並在每批做健康檢查。任何失敗都停止擴散、切回上一個已驗證版本,所有狀態和決定寫入不可篡改的稽核日誌。

5. 分步驟深入解答

第一步:定義核心實體與狀態機

配置提案包含資源、差異、作者、版本摘要、目標環境和過期時間;審批包含審批人、角色、決定、時間、策略版本和提案摘要;執行記錄包含批次、目標、結果和回滾版本。狀態可為 DRAFTPENDING_APPROVALAPPROVEDEXECUTINGSUCCEEDEDFAILEDREVOKEDEXPIRED,狀態轉移只能由服務端規則觸發。

第二步:實作獨立且綁定版本的審批

策略服務計算所需角色、人數、是否禁止自批和審批有效期。審批人看到的差異摘要必須與執行版本雜湊一致;提案被修改就自動失效並重新審批。權限在審批和執行時都重新檢查,避免審批後角色被撤銷仍能執行。

第三步:用冪等執行器控制發布

執行器為每個提案和目標產生冪等鍵,記錄外部系統回執。按小批次套用,先做語法、依賴和安全檢查,再觀察健康指標;重試只處理未知結果,不能盲目重複非冪等操作。佇列或工作流負責逾時、重試和並發限制。

第四步:安全回滾與稽核

發布前保存上一個已驗證版本,失敗時停止後續批次並恢復該版本。回滾本身也要記錄操作者和原因,必要時觸發緊急審批。稽核日誌至少包含提案摘要、審批鏈、執行批次、配置版本、失敗原因和回滾結果,並限制刪除和修改權限。

6. 高品質示範回答

我會把系統拆成提案 API、策略服務、審批服務、執行佇列、配置適配器和稽核儲存。提案寫入不可變版本,包含資源差異、環境、作者和過期時間;策略服務根據風險等級計算所需角色和審批人數,並排除作者本人。

>

審批人看到版本摘要和差異,審批記錄綁定提案雜湊與策略版本。提案任何修改都會回到待審批狀態。達到門檻後,執行器用提案 ID 加目標 ID 生成冪等鍵,先做靜態檢查,再按小批次套用並讀取健康訊號。重複請求讀取已有執行結果,未知結果進入人工複核。

>

每個提案保存上一個已驗證版本。某批次失敗時暫停後續批次,恢復舊版本並記錄原因;高風險緊急回滾仍需獨立審批。稽核事件寫入只追加儲存,包含誰在何時批准了哪個摘要、哪些目標已執行以及是否回滾。這樣既滿足 separation of duties,也避免審批通過後配置被悄悄替換。

7. 常見錯誤

  • 審批只綁定資源 ID,不綁定具體差異和版本摘要。
  • 作者可以用第二個角色自批,破壞獨立性。
  • 直接把批准結果寫入配置庫,沒有執行狀態和回執。
  • 失敗後繼續擴大批次,或對非冪等操作無限重試。
  • 回滾沒有版本、權限和稽核記錄。

8. 追問及應對

追問一:審批人批准後提案作者離職怎麼辦?

審批結果綁定不可變提案,不依賴作者在線;執行權限由服務帳號和當前策略決定,撤銷作者不會刪除有效稽核鏈。

追問二:如何防止兩個審批流程同時執行同一資源?

按資源和環境建立互斥鎖或租約,並在執行前再次檢查當前配置版本;衝突時讓較新的提案重新計算差異和審批。

追問三:緊急變更能否跳過審批?

可以定義受限的 break-glass 流程,但仍需雙人授權、最小權限、短效期、事後複核和完整稽核,不能把緊急通道變成日常捷徑。

公開來源

同類題目

相關面試工具

用 Solve 整理系統設計回答

從澄清需求開始,展開規模、架構、元件選擇和取捨。

查看工具