简介:Serverless 是云计算下一个10年的主要形态,通过大量端到端的整合和云服务的集成,能极大地提高研发效率。了解阿里云 Serverless 产品家族的最新进展,包括函数计算FC、Serverless应用引擎SAE和 Serverless事件总线EventBridge。
EventBridge 简介
近年来,随着云原生和 Serverless 概念的深入人心,事件驱动再一次成为了云应用架构领域的热门词汇。在 2018 年,Gartner 评估报告将 Event-Driven Model 列为10大战略技术趋势之一,事件驱动架构(EDA)将成为未来微服务的主流。该报告同时做出了以下预言:
到 2022 年,事件通知的软件模型将成为超过 60% 的新型数字化商业的解决方案;
到 2022 年,超过 50% 的商业组织将参与到事件驱动的数字化商业服务的生态系统当中;
同年 5 月,云原生 CNCF 基金会托管了开源 CloudEvents 项目,该项目旨在用统一和规范的格式来描述事件,来加强不同的服务、平台以及系统之间的互操作性,事件在云原生大图中的重要性不言而喻。
与此同时,在阿里云上实践事件驱动架构却不是一件简单的事情:
阿里云的云产品,从 IaaS 到 PaaS,每天都有数以亿计的事件产生,但却没有一种简单和统一的方式来触达这些事件;
很多云产品有自建的事件中心,但没有采用统一的标准和规范来描述这些事件,用户无法用同样的方式来解释这些事件;
云上的的事件目前非常独立,无法形成规模效应,很难挖掘出有用的业务价值,只有充分发挥数据的规模效应,建立起数据的血缘关系,我们才能更好的发掘出数据的价值;
目前事件应用的场景偏离线分析,因缺乏开箱即用的中心化事件处理能力,无法应用在在线业务的场景。
为了解决这些问题,阿里云正式发布了最新云产品 EventBridge,一款无服务器事件总线服务,其使命是作为云事件的枢纽,以标准化的 CloudEvents 1.0 协议连接云产品和云应用,提供中心化的事件治理和驱动能力,帮助用户轻松构建松耦合、分布式的事件驱动架构;另外,在阿里云之外的云市场上有海量垂直领域的 SaaS 服务,EventBridge 将以出色的跨产品、跨组织以及跨云的集成与被集成能力,助力客户打造一个完整的、事件驱动的、高效可控的上云新界面。
EventBridge 核心能力
作为一款全新的云产品,EventBridge 是完全面向云原生设计和架构的,EventBridge 提供的核心能力分为以下几类。
集成与被集成
集成能力和集成度是产品的关键点,EventBridge 将以低成本甚至零成本,低代码甚至0代码,跨组织和跨云的方式去连接云产品、云应用以及SaaS应用。
集成云产品
今天的阿里云,有数百个成熟的云产品,有数百万应用的计算实例,它们每天会产生亿级的云事件,但这些事件目前处于失控的状态,是一片尚未被挖掘的数据宝藏。EventBridge 将连接大部分阿里云的云产品,作为事件源或者事件目标,提高阿里云事件的中心化治理能力,充分挖掘云事件的业务价值;同时,通过一站式的云产品连接服务,帮助用户更好地上云和用云。
集成云应用
用户上云的最终目的是充分撬动云计算带来的技术红利,所以上云的过程不仅仅是 Rehost,还需要进行 Replatform 和 Refactor,EventBridge 提供丰富的集成能力,让应用更好地连接和使用云服务。目前用户可以通过 EventBridge 官方的 HTTP 接口、多语言客户端(Java、Golang、Python、C#、PHP)以及 CloudEvents 社区的开源客户端轻松接入阿里云的 EventBridge 生态。
集成第三方 SaaS
对于 SaaS,阿里云坚持被集成的战略,可以预计在阿里云上会成长出一批又一批优秀的 SaaS 提供商,EventBridge 将为 SaaS 提供便捷的方式融入阿里云生态体系,与阿里云一方云产品深度融合。
协调与驱动
Serverless 应用架构的最佳实践便是事件驱动,无论是传统的微服务还是函数计算,EventBridge 将极大地简化事件驱动架构的研发成本,海量的函数以及微服务将以事件的形式被有序协调。
关于编排(Orchestration)和协调(Choreography),Gartner 报告中对比了两种架构的区别,通过请求驱动来组合和编排微服务和函数的方式带来了很多不必要的强耦合,而通过事件驱动的方式来协调微服务和函数,将是更彻底的解耦,提高程序的韧性,业务的开发也将变得更加敏捷和高效。
数据通道
EventBridge 另一个核心能力是为流式的数据承担通道的责任,通过 CloudEvents 规范和 Schema 注册表(Coming Soon)来统一描述这些数据,并提供基础的过滤和转换的能力,在不同的数据仓库之间、数据处理程序之间、数据分析和处理系统之间进行数据路由。
为此,EventBridge 即将上线 Connect 能力,通过大量的 Source 和 Sink Connector 将用户的数据在云上流动起来。
EventBridge 基本模型
EventBridge 产品包含几个基本概念:事件、事件总线、事件源、事件规则以及事件目标。
如上图所示,事件从事件源被投递至事件总线,经过规则的过滤和转换处理,最终被投递给多种事件目标,完成事件的处理。
事件
事件,代表了事情的发生、条件和状态的变化。在云的时代,事件是无处不在的,云的任何一个产品、一个应用、甚至一个资源都在时刻发生事件,它们称为事件源。事件源来自不同的组织和环境,事件源对事件将被如何响应没有任何预期,事件目标通过中心化的事件总线来订阅事件,依赖事件具备的自描述能力,来低成本地理解和处理事件。
EventBridge 中的事件通过云原生事件标准 CloudEvents 来描述,CloudEvents 是 EventBridge 生态系统中的一等公民。EventBridge 采取 CloudEvents 的主要原因为:
采取统一的云原生事件标准,有助于统一表达来自不同事件源中的事件,提升事件驱动程序的互操作性。
标准化,用户没有厂商锁定的担忧,基于 CloudEvents 的事件驱动程序可以在不同云之间随意移植。
CloudEvents 具备非常简单的结构,如下 JSON 文本为一个 CloudEvents 事件。
阿里云 EventBridge 目前支持两类事件:自定义事件和阿里云服务事件。
阿里云服务事件:具备预先定义好的 Schema,来自各个云产品关于用户资源状态变更的事件,比如云视频会议事件,包括会议开始、结束、成员变更等会议事件。
自定义事件:用户可以使用 CloudEvents 社区的开源 SDK、EventBridge 官方的多语言轻量级 SDK、EventBridge Connect、WebHook等(后两种能力即将开放)方式投递自定义事件至 EventBridge,丰富的事件源接入方式助力客户快速打造事件驱动的 Serverless 应用程序。
事件总线
事件总线是一个抽象概念,是事件的载体,阿里云 EventBridge 的事件总线具备用户纬度的多租户能力,每个总线有唯一的资源 ARN。事件发送至事件总线,随后被事件规则路由至事件目标。
如上图所示,阿里云的事件总线分为两类:
默认事件总线:用户开通 EventBridge 时自动创建 default 总线,所有接入的云服务事件都将主动投递至 default 上,对于用户来说云产品的事件是开箱即用的。
自定义事件总线:用户自行创建,用来接受自定义的事件,是用户研发事件驱动架构程序的必备资源。
规则
规则对事件总线中的事件进行过滤,过滤成功的事件经过一定的转换路由到规则中指定的阿里云目标服务或者HTTP网关。
EventBridge 中的规则有两端,一端连接事件总线,一端连接事件目标,并且是一对多的关系,每个规则最多关联 5 个事件目标。同时,规则中的过滤和转换组件,为用户提供了轻量级的事件过滤和转换的能力。
规则中过滤能力由事件模式(Event Pattern)提供,当前支持的过滤模式包含:
- 指定值匹配
- 前缀匹配
- 后缀匹配
- 除外匹配
- 数值匹配
- 数组匹配
- 以及复杂的组合逻辑匹配
规则中的转换用于将 CloudEvents 转变事件目标接受的格式,EventBridge 提供了四种转换器:
- 完整事件:不做转换,直接投递原生 CloudEvents。
- 部分事件:通过 JsonPath 语法从 CloudEvents 中提取部分内容投递至事件目标。
- 常量:事件只起到触发器的作用,投递内容为常量。
- 模板转换器:通过定义模板,灵活地渲染自定义的内容投递至事件模板。
EventBridge 产品架构
EventBridge 作为一款全新的云产品,全面采用了云原生技术栈,如下图所示,EventBridge 搭建在容器服务提供的 Kubernetes 集群之上,设计了一整套基于 K8S 的 DevOps 研发体系,研发阶段实践 GitOps 提高交付和迭代效率,测试阶段配备了大量的自动化测试,发布阶段有完善的灰度机制,运维阶段依赖 K8S 的自愈能力大幅度降低运维成本,并通过 Prometheus ,SLS 等产品建立了云原生的监控体系。
除此之外,EventBridge 依赖 RocketMQ 提供核心的事件存储能力,RocketMQ 作为阿里自研的消息中间件,经历过多次双11流量高峰的考验和无数个阿里内部业务场景的验证,为 EventBridge 提供了高 SLA 的,高性能的事件传输服务。
EventBridge 典型场景
在本章节,我们根据 EventBridge 当前以及具备的能力,列举三个典型的案例。随着 EventBridge 生态的丰富,未来可以挖掘更多的业务场景,我们后续也会出一系列的样板间项目,方便用户快速将事件驱动的方式契合大盘自己的业务场景中。
场景 1:360 度业务全景
随着企业业务规模的扩大,业务的稳定性愈发重要,为了避免故障随着场景的复杂化而频繁发生,对应用建设 360 度全方位的可观测和监控体系尤为重要。传统的应用基于云原生重构后,享受云原生技术红利的同时也为应用的稳定性治理带来了更多的复杂性,最主要的就是变更难以控制:业务依赖了整套云的基础设施,IaaS 层物理资源、网络资源以及 PaaS 层云服务,甚至依赖的上下游服务,时刻都在进行变更,用户很难立马感知到变更的发生以及相应的影响,而 95% 的故障都是由变更导致的。
为了解决这个问题,通过 EventBridge 打造 360 度业务全景图,清晰地感知整个产品业务链路上,做了哪些变更,有哪些异常反应,这些异常反应是不是跟最近的变更有关联,遇到特殊问题时,我们甚至可以通过自运维的方式,帮助产品更快的恢复,将影响面降低到最小。
而这些能力的拥有,离不开 EventBridge 集成多个云产品事件的能力,也离不开 EventBridge 可以通过事件触发多个云产品响应的能力。事件作为一个信息的重要载体,通过 EventBridge 优雅的协调各个云产品进行有序工作。
场景 2:网页截图制作每日快报
场景 1 是一个比较复杂的案例,再来看一个可以快速上手的场景:使用 EventBridge 驱动函数计算帮我们进行网页截图,并通过邮箱发送出去,制作每日快报。
- 首先,业务系统通过分析,计算出今日有价值的头条新闻,并把新闻 URL 地址通过 Event,发送给EventBridge;
- EventBridge 接收到 Event 后,根据预配置的规则,开始触发函数计算的网页截图程序进行工作;
- 函数计算接收到 Event 后,自动创建资源,并运行网页截图程序进行截图,保存到 OSS,同时通知 EventBridge 截图完成,然后自动释放资源;
- EventBridge 接收到函数计算完成的 Event 后,根据预配置的规则,开始触发邮箱服务,将网页截图以邮件的形式发送给目标用户;
从这个例子中,可以发现:Serverless 和 EventBridge,是云原生时代一个非常强有力的组合。通过事件去驱动函数计算,让业务按需调度资源,不仅可以预防突发流量带来的稳定性风险,还可以最大程度的降低成本,按需付费。
场景 3:新零售智慧家具门店
EventBridge 未来可以触达的场景有多大?让我们看一个新零售智慧家具门店的场景:
- 仓库的家具商品入库事件、门店的顾客进店事件通过 EventBridge 实时流转到在线分析系统,让我们知道现在店内有哪些家具商品,进店顾客的家具偏好是什么,并推送给商场门店的导购员或则广告屏,帮助门店更好的下单转化;
- 顾客在线电子支付后,订单信息发送到 EventBridge,并触发第三方物流公司进行送货上门;
- 第三方物流公司,可以实时的将家具的位置信息通过 EventBridge 推送给移动端APP,客户可以通过 APP 很方便的实时了解到自己的家具到哪了,预估还需要多久送到家;
- 所有这些通过EventBridge流转的在线业务事件数据,最终通过EventBridge流转到离线分析系统,自动生成业务报表,供管理层做绩效考核或则运营决策。
在这个场景中,EventBridge 起着关键的通道作用,无论是 IoT、在线业务、还是大数据场景,EventBridge 将事件信息高效的流转,推动业务目标达成。Event 既作为在线业务数据,又作为离线分析数据,这种方式,既降低了成本,同时也提高了效率。
EventBridge 未来规划
作为云上的事件枢纽,EventBridge 最核心的能力就是连接。所以,未来EventBridge会重点建设生态网络。无论是在线业务场景、IoT 场景、还是大数据场景,都能够通过低代码甚至 0 代码的方式,集成到 EventBridge。如果你的应用部署在私有 IDC 机房,或则其他云厂商环境,我们也都将提供安全可靠的集成方式。
当然,云时代下这么庞大的神经中枢系统,不是一日可以建成的,需要大家一起的努力。所以未来,EventBridge 同时会致力于开源社区建设,也希望志同道合的朋友一起加入进来,成为云原生时代,Event-Driven Model 的第一批布道师。
本文为阿里云原创内容,未经允许不得转载