題目與情境
同一用量事件既服務運行時限額,也服務財務報表。事件可能遲到、重複或被修正,噪聲租戶不能拖慢其他租戶,也不能讀取他人資料。
面試官在考察什麼
- 分離不可變事實與可變投影。
- 定義幂等、事件時間窗口、修正和帳單最終性。
- 設計租戶隔離、背壓與核對證據。
作答前的釐清問題
- 事件速率、維度、保留期和帳單最終截止時間是多少?
- 用量按請求接受、完成還是業務效果成功來計量?
- 生產方能否重送事件 ID,修正或退款如何表示?
- 哪些配額決策需要秒級新鮮度,哪些報表可以延遲?
30 秒回答框架
我會記錄帶穩定事件 ID、事件時間、單位、來源和模式版本的租戶範圍不可變事實。追加日誌分別驅動配額與帳單投影。去重鍵是租戶加事件 ID;修正寫成新事實而不是覆蓋。配額讀取快速且有界的投影,帳單在水位線和核對完成後才關閉。每個聚合都能追溯到來源事實。
分步深挖
1. 捕獲事實
認證生產方,校驗租戶範圍和單位,持久化原始事件後再確認。要求生產方事件 ID、來源、事件時間和計量版本。拒絕格式錯誤或跨租戶寫入,並保留摘要以便稽核。
2. 實現幂等寫入
對 (tenant, source, event_id) 建唯一約束。同一摘要的重複返回已有結果;摘要不同則隔離為衝突。不能把發票行當幂等存儲,因為運行時重試早於開票。
3. 分離配額與帳單投影
配額投影維護短窗口、目前計數和新鮮度未知時的閉合策略。帳單按合約單位和價格版本聚合,保留事件時間桶與修正關聯。兩個投影都不修改不可變事實日誌。
4. 處理遲到資料並關閉帳單
用觀測事件時間加約定遲到界限形成水位線。水位線之後到達的事件進入調整台帳,計入下一週期或貸項流程。最終確認前,從日誌核對計數與總和並記錄計算版本。
5. 安全運營
按租戶或公平分配鍵分區佇列與儲存,實施配額和背壓並隔離死信。監控接入延遲、重複與衝突率、水位線年齡、投影漂移、修正量和關帳延遲。加密資料、限制匯出並稽核每次修正。
高品質示範回答
「我會在確認前保存帶事件 ID、來源、事件時間、單位、模式和價格版本的租戶範圍不可變用量事實。追加日誌分別驅動配額與帳單投影。同 ID 同摘要重試幂等,摘要變化進入隔離。配額使用快速有界投影,帳單等遲到水位線和核對完成後再關閉。遲到事件寫入調整記錄,並用租戶分區、背壓、加密和漂移指標保證正確性與公平性。」
常見失誤
- 每個事件直接覆蓋聚合 → 遲到和修正不可見 → 保留不可變事實與投影。
- 用到達時間作為用量時間 → 延遲事件進入錯誤帳單 → 按事件時間和水位線分桶。
- 共享一個全局佇列 → 噪聲租戶造成隊首阻塞 → 分區或實施公平分配。
- 不核對就關帳 → 投影漂移變成帳單爭議 → 與來源事實比較並版本化計算。
追問與回答
如何支援退款或修正?
追加關聯原事件與合約版本的補償事實。重算受影響投影或寫入調整台帳,不能修改原始證據。
配額和帳單暫時不一致怎麼辦?
聲明不同的新鮮度與最終性保證。配額可在有界窗口內近似,帳單等水位線和核對通過後才最終化,並向運營與客戶暴露狀態。
如何阻止租戶讀取他人用量?
在寫入、儲存分區、投影查詢、匯出和支援工具中強制租戶範圍。每個邊界都測試授權,存取日誌不包含敏感事件負載。