一、入门
事件源生产事件,协议封装事件,触发行为
事件可以通过各种行业标准协议(如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