随着云原生的发展(云原生的下一个五年在哪里?),逐步进入深水区,业界需要一种统一的事件定义和描述规范,以提供跨服务、跨平台的交互能力。CloudEvents事件规范应运而生,并得到了行业的广泛关注,包括主要的云提供商和 SaaS 公司。
对于CloudEvent的介绍、规范说明及实践落地,将以三篇系列文章进行说明,本文为《CloudEvent三部曲:初识篇》.
一、规范背景
需求背景
事件在系统设计中已经变的无处不在,但各类事件的提供方倾向于以不同的方式来描述事件,缺乏一种对事件的统一描述,事件使用方和提供方往往要花费大量的时间沟通字段定义,设计事件属性,并在将来的使用过程中疲于新增或修改事件的属性。这也限制了类库、工具和基础设施在跨环境时发送事件数据的潜力,如SDK、事件路由器或跟踪系统等。
随着云原生的发展(云原生的下一个五年在哪里?),逐步进入深水区,业界需要一种统一的事件定义和描述规范,以提供跨服务、跨平台的交互能力。CloudEvents事件规范应运而生,并得到了行业的广泛关注,包括主要的云提供商和 SaaS 公司。
历史背景
CloudEvents 是一种以通用方式描述事件数据的供应商中立的规范,该事件数据定义规范旨在简化跨服务,平台及其他方面的事件声明和发送。
CloudEvents 的相关工作最初是作为云原生计算基金会(Cloud Native Computing Foundation,简称 CNCF)Serverless工作组的一部分开展的,当规范达到v0.1的里程碑之后,于2018年5月15日获得技术监督委员会(Technical Oversight Committee,简称 TOC)批准作为一个全新的独立的CNCF沙盒项目。
2019年10月24日,CloudEvents项目取得了两项重大成果。第一,CNCF的技术监督委员会批准该项目成为 “孵化器“项目(从而使其从CNCF的“沙盒”毕业)。第二,CloudEvents规范发布了1.0版本,这是该规范的第一个主要版本!
现状
目前各大第三方云提供商都在大力推广落地CloudEvents规范,例如:
- 2018年,微软宣布将通过Event Grid服务(一项由Azure集中管理的事件服务,支持用户通过“发布-订阅”机制发送和接收事件)提供对CloudEvents的支持
- 2019年,阿里云开始推广 OpenMessaging 标准协议,希望让 Apache RocketMQ 兼容 Cloudevent 体系,成为 Serverless 的桥梁
- 2020年,字节跳动在其函数计算产品中利用CloudEvents规范统一事件源标准,极大方便之后的能力扩展。
但大多数云目前缺乏CloudEvents规范的相应支持,导致各能力服务之间的联动效率较差,该问题丞待解决。
二、规范优势
从历史上看,行业缺乏描述无服务器的事件元数据的标准,这意味着开发人员需要重新学习如何跨系统使用各种类型的事件数据,从而难以构建可移植的工具。 CloudEvents 定义了一套一致的元数据,且首次将业界的云供应商、企业软件巨头和初创企业的无服务器社区聚集在一起,实现并支持该规范。
CloudEvents 具有如下一些优势:
消费优势
生产者生产事件供消费者使用时,由于使用了 CloudEvents 规范,消费者不再需要为平台或服务的差异性编写特定的消费逻辑,改而使用通用逻辑处理事件数据,方便事件消费者提高开发效率,并降低系统复杂度。例如:阿里云的事件总线 EventBridge,微软Azure的Event Grid服务都极大方便了产品的端到端集成。
路由优势
中间件将事件从生产者路由到消费者,或者转发到其他中间件的时,CloudEvents会保留事件的身份和语义完整性。 用于事件的分类过滤或元数据的鉴别。例如:消费者利用过滤功能只关注特定用户;或者利用元数据鉴别只接收后缀为 .doc 的新建文件等。
利用 CloudEvents中间件可以在改变事件的语义含义时承担生成器的角色,在基于事件采取行动时承担消费者的角色,或在路由事件不进行语义更改时承担中间件的角色。例如: Apache RocketMQ 社区发布的OpenMessaging 标准协议兼容CloudEvents规范,从而成为 Serverless 的桥梁,更加高效广泛的进行消息路由。
交互优势
利用 CloudEvents系统框架对内解耦各模块的通信能力,提高可维护性;对外与其他事件平台基础设施的交互将更简单,并且方便为其他平台设施提供通用 API,降低交互的复杂性,提高系统平台的扩展性。
三、落地场景
CloudEvents 在如下场景中有广泛的应用价值:
跨平台和服务的事件规范化
不同的云提供商都在各自的平台上以不同的格式发布事件,此外同一云提供商上的不同服务也可能以不同的格式发布事件。这就迫使事件消费者不得不针对各类平台或各类服务编写针对性逻辑来消费事件数据。而CloudEvents 可以为处理跨平台和跨服务的事件的消费者提供统一的体验。
事件追踪
从事件源发送的事件可能会导致各种中间件设备(如事件代理和网关)产生的附加事件序列。利用CloudEvents 包含事件的元数据这一特性(例如:事件经过多个代理时,代理会将自身IP追加到CloudEvents扩展属性中,最终事件消费者可以通过扩展属性中的 IP 信息,知道事件经过哪些代理),可以将这些附加的事件信息作为源事件序列的一部分进行关联,从而进行事件追踪和故障排除。
提高Serverless的可移植性
Serverless(也称无服务器计算)是IT领域发展最快的趋势之一,它主要是由事件驱动。然而,供应商的锁定是FaaS的一个主要问题,这种锁定部分主要是由于各供应商函数内部接收事件数据的格式差异造成的。CloudEvents 对事件数据的通用描述方式解决了该问题,从而提高了FaaS的可移植性。
微软Azure的Event Grid事件服务提供了对CloudEvens的支持,用户可以将自己的CloudEvents推送到指定的Azure Grid Event主题(topic)。此后,Grid Event支持将符合CloudEvent模式的事件转换为符合特定Event Grid模式的事件,或者反之。