Skip to content
ADP
API Design PrincipleBETA

[ADP-608] 臨時事件

概述

在分散式系統中,事件可能在某個時間點後變得不再相關。本 ADP 定義了使用 CloudEvents 過期時間擴展來標記臨時事件的標準方法,使消費者和中間件能夠適當處理時間敏感的事件。

指導原則

  1. 必須(MUST)使用 CloudEvents 過期時間擴展來標記臨時事件。

  2. 事件生產者必須(MUST)為臨時事件設置 expirytime 屬性。

  3. expirytime 屬性必須(MUST)為 Timestamp 類型。

  4. expirytime 值應該(SHOULD)等於或晚於 time 屬性(如果存在)。

  5. 中間件和消費者可以(MAY)忽略並丟棄已達到或超過其 expirytime 的事件。

  6. 中間件可以(MAY)修改 expirytime 屬性,但不得(MUST NOT)移除它。

  7. 與消費者互動的系統不應該(SHOULD NOT)僅基於此擴展來假設消費者是否會保留或丟棄事件。

CloudEvents 過期時間擴展

過期時間擴展為 CloudEvents 添加了一個屬性:

  • expirytime: 表示事件不再有用的時間戳。

帶有 expirytime 的 CloudEvent 示例:

json
{
    "specversion" : "1.0",
    "type" : "com.example.temporaryevent",
    "source" : "/mycontext",
    "id" : "C234-1234-1234",
    "time" : "2023-06-01T10:30:00Z",
    "expirytime": "2023-06-01T11:30:00Z",
    "data" : {
        "message" : "此事件將在一小時後過期"
    }
}

實施建議

  1. 在系統間使用一致的時間同步,以確保準確的過期時間比較。

  2. 實現基於 expirytime 屬性的高效事件過濾機制。

  3. 考慮在事件存儲或消息隊列中實現過期事件的清理流程。

  4. 提供清晰的文件,說明您的系統如何處理過期事件。

  5. 考慮記錄或監控被丟棄的過期事件,以進行系統健康檢查和調試。

使用案例

  1. 即時儀表板: 在網頁儀表板中丟棄過時的感測器數據,只顯示最新資訊。

  2. 限時優惠: 發送帶有過期時間的促銷事件,用於限時優惠。

  3. 臨時系統狀態: 使用臨時事件來表示只在特定時間內相關的暫時系統狀態。

  4. 作業調度: 在分散式作業處理系統中為作業請求設置過期時間。

安全考慮

  1. 確保基於時間的事件過濾不會引入漏洞(例如,檢查時間到使用時間的問題)。

  2. 注意惡意行為者可能會嘗試通過發送帶有精心設計的過期時間的事件來操縱系統行為。

  3. 考慮時間同步問題對事件過期處理的影響。

相關 ADP

參考資料