一、入門
事件源生產事件,協議封裝事件,觸發行為
事件可以通過各種行業標準協議(如HTTP、AMQP、MQTT、SMTP)、開源協議(例如 Kafka、NATS)或 平臺/供應商專有協議(AWS Kinesis、Azure Event Grid)傳輸
設計目標
規范目標:各事件系統的互操作性
核心規范:定義一組事件元數據(事件屬性),序列化,批處理,適配器
非目標
協議級路由信息,事件持久化,授權、數據完整性和保密機制
架構
基本規范(屬性(鍵值對)),擴展屬性,事件格式編碼,協議綁定
互操作性約束條件:事件大小 <= 64KB
協議錯誤處理
屬性版本控制
type, dataschema
屬性
id: 同一事件源,唯一id
屬性擴展
必要屬性: 任何情況下,對所有事件
可選屬性: 大多數情況下使用
擴展屬性: 不夠常見,但會使系統間的互操作性級別受益
JSON擴展: 上面3種屬性,都是 JSON 對象的頂層屬性
創建CloudEvents
原始事件源、CloudEvents生產者 可能分離,事件嵌套
合理化協議與編碼:廣泛使用的協議
專有的協議與編碼
現有技術
生產事件:生產者或中間人
消費事件
顯示、存檔、分析、工作流處理、監控狀態、提供業務解決方案
事件唯一性、時間順序、關聯多個事件
中間件
管理消費者、過濾、轉碼、轉換事件格式、推送、存儲、監控
元數據鑒別器、數據編碼、數據結構布局
規范的價值
現有數據格式:各廠商事件格式
二、核心規范
符號和術語
OPTIONAL屬性:生產者、消費者可選支持,中間人要轉發
上下文:上下文環境元數據,用來識別事件與系統、事件與其他事件的關系
事件格式:序列化,獨立事件格式、協議綁定
消息
結構化模式消息:使用獨立事件格式
二進制模式消息:事件數據存儲在消息體,事件屬性作為消息元數據的一部分
協議綁定:描述如何通過給定的協議發送和接收事件
上下文屬性
命名約定:小寫字母或數字,長度<=20
類型系統
轉換:規范字符串編碼<-->對應抽象類型的運行時/編程語言類型,規范字符串編碼<-->協議元數據字段中的對應數據類型
必要屬性
id:source+id表示唯一事件,可能重復發送
source:使用UUIDs、URNs、DNS權威機構或特定于應用程序的方案來創建唯一source
specversion
type:事件類型,以反向DNS名稱作為前綴
可選屬性
datacontenttype:data值的內容類型
dataschema:標識data遵守的規范
subject:source的內部子結構
time:事件發生的時間戳
擴展屬性
像HTTP自定義頭部
避免名稱沖突、目的沖突
事件數據
datacontenttype指定媒體格式
大小限制
包括協議幀元數據、事件元數據和事件數據
中間人<=64KB,消費者>=64KB
大型數據項:外鏈
外鏈好處:能實現差異化訪問控制和選擇性披露,避免將敏感詳細數據直接嵌入到事件
隱私與安全
敏感信息不應在上下文屬性中攜帶
數據加密
協議級別的安全性機制
三、SDK
技術性要求
支持CloudEvents規范,CloudEvents標準事件<--(編解碼)-->傳輸協議
支持HTTP structured+binary模型
對象模型結構
構建事件
編碼并發送事件
接收并解碼事件
https冒號//github.com/cloudevents/spec/blob/v1.0.2/cloudevents/translated/zh-cn/SDK_CN.md
四、適配器
AWS S3 events --> CloudEvents
CouchDB Document events, CouchDB Database events --> CloudEvents
GitHub webhook events --> CloudEvents
GitLab webhook events --> CloudEvents
其他格式的事件轉換為CloudEvents
https冒號//github.com/cloudevents/spec/blob/v1.0.2/cloudevents/translated/zh-cn/adapters_CN.md
五、協議綁定
HTTP: 3種數據模式,HTTPS安全訪問
AMQP: 2種模式, structured, binary
Kafka: 2種模式, structured, binary
MQTT: 2種模式, structured, binary
NATS: 1種模式, structured
WebSockets
1種模式, structured
子協議: json, avro, proto
六、事件格式
avro, json, proto
七、擴展屬性
不是正式、穩定的,不屬于核心規范
數據引用
dataref
數據太大、防篡改、訪問鑒權
事件追蹤
traceparent, tracestate
分區
partitionkey, 相同key事件放同一個桶
采樣率
sampledrate: 30, 每30次生成一個事件
降低事件頻次,降低產生事件開銷,提高性能
事件順序
sequence(32位連續數字), sequencetype(Integer)
八、Webhooks
https, post
認證: Authorization, URI參數
濫用保護機制:
驗證請求: WebHook-Request-Origin, WebHook-Request-Callback, WebHook-Request-Rate
驗證響應: WebHook-Allowed-Origin, WebHook-Allowed-Rate
九、CloudEvent 專有協議與編碼規范
Apache RocketMQ Transport Binding
Google Cloud Pub/Sub Protocol Binding