跳到主要内容

事件网格

事件网格是一种事件总线服务,支持使用了不同技术栈的分布式架构,支持接入多种类型的事件源和事件目标,并提供事件过滤、路由的能力。

一、技术特性​

  • CloudEvents:事件格式遵循CloudEvents标准,使用标准的字段来标识事件。
  • 通信协议:事件网格可以使用 TCP、HTTP 或 gRPC 与客户端通信。
  • 采用发布-订阅模式,实现组件和应用程序之间的松耦合事件驱动架构。
  • 支持基于消息的 request-reply 同步通信模式。
  • 所有事件都通过同一个端点发布,简化了API管理;支持动态的事件主题,无需预先定义端点;可以轻松添加新的事件类型,无需修改API结构。

二、应用场景​

  • 微服务通信: 服务间异步通信
  • 数据集成: 异构系统数据同步
  • 事件驱动架构: 构建事件驱动的应用
  • 流处理: 实时数据流处理
  • 云原生应用: 容器化环境中的事件处理

三、什么是CloudEvents?​

CloudEvents 是一个以通用格式来描述事件数据的规范,旨在简化不同服务、平台间的事件声明和传输。

(一)核心目标​

1、标准化事件格式:提供统一的事件数据结构

2、跨平台兼容:支持不同云平台和系统间的互操作

3、简化集成:减少系统间集成的复杂性

4、提高可观测性:标准化的事件格式便于监控和调试

(二)标准格式​

{
"specversion":"1.0",
"id":"13a3f42d-7258-4ada-da6d-023a333b4662",
"type":"cos:created:object",
"source":"cos.cloud.tencent",
"subject":"qcs::cos:ap-guangzhou:uid1250000000:bucketname",
"time":"1615430559146",
"region":"ap-guangzhou",
"datacontenttype": "application/json;charset=utf-8",
"data":{
$data_value
}
}

(三)字段说明​

1、必需字段​

字段类型必需说明
idString✅事件的唯一标识符
sourceURI-Reference✅事件的来源
specversionString✅CloudEvents规范版本
typeString✅事件的类型

2、可选字段​

字段类型说明
subjectString事件的主题或对象
timeTimestamp事件发生的时间
datacontenttypeString数据内容的MIME类型
dataschemaURI数据模式的URI
dataAny事件的具体数据

发布事件时,将CloudEvent转换为消息中间件的原生Message对象,通过 cloudEvent.getSubject()获取事件的主题,作为消息中间件的主题(topic)。

3、事件源​

  • 内部事件源(TUS内部)

    • ESB服务:微服务架构中的业务服务可以发送任意格式的消息到消息队列,或者通过HTTP API向事件网格发送CloudEvents格式的事件。
    • 已集成的第三方服务:比如:泛微OA、SAP等,通过Webhook向事件网格的接收端点发送事件,支持签名验证。
    • 其它服务:比如:CDC服务、磁盘占用率监控服务,主动向事件网格提供的HTTP端点发送事件,适用于微服务架构。
  • 外部事件源

    • Webhook:外部系统主动向事件网格提供的HTTP端点发送事件,适用于第三方系统集成。
    • API网关:外部系统主动向API网关发送事件,API网关转发给事件网格,适用于统一API管理。
    • 消息队列:对于RocketMQ、Rabbit、Kafka、pulsar等外部消息中间件,事件网格内部可以集成相应的消费者组件,可以直接订阅和消费消息队列中的事件,自动转换为CloudEvents格式。
  • 如何接收事件(事件网格)