事件驱动架构(EDA)是一种以事件为纽带,将不同系统进行解耦的异步架构设计模型。在EDA中,事件驱动的运行流程天然地划分了各个系统的业务语义,用户可以根据需求对事件与针对此事件做出的响应灵活定制,这使得基于EDA架构可以方便地构建出高伸缩性的应用。据DaitanGroup的调研报告,早在2017年,例如UBER、Deliveroo、Monzo等公司就已经采用了EDA去设计他们的系统。
为了便于用户更加轻松地开发以EDA为架构的应用,在2020年云栖大会上,阿里云正式推出了EventBridge。EventBridge是一款无服务器事件总线服务,能够以标准化的协议在应用之间路由事件。目前,EventBridge已经集成了众多成熟的阿里云产品,用户可以低代码甚至零代码完成各个阿里云产品和应用之间的打通,轻松高效地构建分布式事件驱动架构。
事件源是事件驱动的基石,如何获取更多事件源也是EventBridge一直在探索和尝试的方向。针对市场上其他云厂商和垂直领域的Saas服务,EventBridge发布了HTTPSource能力,提供简单且易于集成的三方事件推送,帮助客户更加高效、便捷地实现业务上云。
HTTPSource概述接入EventBridge应用有多种情况:用户自定义应用、阿里云服务、其他云厂商服务或者其他SaaS产品。
对于用户自定义应用,用户可以使用EventBridge官方的API接口、多语言客户端以及CloudEvents社区的开源客户端来完成接入。
对于阿里云的云产品,EventBridge原生支持,用户可以在默认事件总线中选择对应的云产品与其相关的触发事件。
而对于其他云厂商、SaaS产品,EventBridge同样也提供便捷的接入方式便于用户进行集成,HTTPSource事件源便是一种典型的接入方式。
具体而言,HTTPSource事件源是EventBridge支持的事件源的一种,它以Webhook形式暴露了发布事件的HTTP请求地址,用户可以在有URL回调的场景配置HTTPSource事件源,或者直接使用最简单的HTTP客户端来完成事件的发布。HTTPSource事件源提供了支持HTTP与HTTPS,公网与阿里云VPC等不同请求方式、不同网络环境的WebhookURL,便于用户将其集成到各类应用中。接入时无需使用客户端,仅需保证应用可以访问到对应WebhookURL即可,这使得接入过程变得简单而高效。
在将HTTP请求转换为CloudEvent的时候,EventBridge会将请求的头部和消息体部分置于CloudEvent字段中,其余字段会依据用户EventBridge资源属性以及系统默认规则进行填充。用户可以在事件规则中,对所需的内容进行过滤、提取,最终按照模板拼装成所需的消息内容投递给事件目标。
请求方法:用户可以配置当前请求此事件源时合法的HTTP请求方法,如果方法类型不满足配置规则,请求将被过滤,不会投递到事件总线。
源IP:用户可以设置允许访问此事件源时合法的源IP(支持IP段和IP),当请求源IP不在设置的范围内时,请求将被过滤,不会投递到事件总线。
抛砖引玉,下面就介绍如何使用HTTPSource来构建SaaS应用集成的最佳实践,帮助大家快速上手SaaS集成方案。
SaaS集成最佳实践钉钉监控GitHub代码推送事件
本节我们展示如何通过钉钉监控GitHub代码推送事件的最佳实践,主要包含以下几个步骤:
创建一个钉钉机器人;
创建EventBridge相关资源:事件总线、事件源(HTTPSource类型)、事件规则、事件目标(钉钉);
创建自定义事件总线;
选择GitHub代码仓库创建Webhook;
向GitHub代码仓库推送代码变更;
钉钉群接收此次代码推送相关信息。
1)创建钉钉机器人
参考钉钉官方文档[1],创建一个群机器人。创建群机器人时,安全设置请勾选“加签”并妥善保管密钥和稍后生成的机器人Webhook地址。
2)创建EventBridge相关资源
创建EventBus事件总线
创建完成后,进入事件源详情页,保存刚刚生成的WebhookURL。
创建时间目标。选择钉钉,并将钉钉机器人的Webhook地址和密钥填入,推送内容侧可以按照需求设计。
我们填写模板变量为:
{"repo":"$._name","branch":"$.","pusher":"$."}
模板为:
{"msgtype":"text","text":{"content":":${repo},gitreference:${branch},pusher:${pusher}."}}
3)在GitHub代码仓库创建Webhook
登陆GitHub,在GitHub代码仓库“setting”中选择左侧“Webhooks”,选择新建Webhook。
4)向GitHub代码仓库推送代码变更
本地仓库做一定变更,commit后推送GitHub。
5)钉钉群接收此次代码推送相关信息
异步消费监控报警信息业务上存在异步消费报警信息的场景,例如报警内容备份,根据报警频率自适应调整报警阈值等。而且对于多云业务的用户,如何将跨云服务的报警信息整合起来也是一个麻烦的问题。依托HTTPSource,用户可以将不同云厂商(腾讯云、华为云等)、不同监控产品(Grafana、Zabbix、Nagios等)统一集成到EventBridge平台,以便于实现对报警信息的异步消费。
本节我们介绍如何使用EventBridge集成Grafana,实现异步消费监控报警信息。Grafana是一款开源数据可视化工具,也同时具有监控报警功能,具体使用可以参阅Grafana官方文档[2]。本节主要包含以下步骤:
创建MNS队列;
创建EventBridge相关资源;
Grafana上配置Webhook;
测试接收结果。
创建MNS队列
在MNS控制台,选择“队列列表-创建队列”。
创建EventBridge相关资源
同上文所述,这里仅示例创建事件目标时相关配置。
Grafana上配置Webhook
测试接收结果
更多集成HTTPSource支持的三方集成包括Prometheus,Zabbix,Skywalking,Grafana,Open-Falcon,Cacti,Nagios,Dynatrace,Salesforce,Shopify,Gitee等SaaS应用。通过简单配置Webhook无需开发既可实现事件接收能力。
总结本文重点介绍EventBridge的新特性:HTTPSource事件源。作为一款无服务器事件总线服务,EventBridge已经将阿里云云产品管控链路数据、消息产品业务数据整和到事件源生态中,提高了上云用户业务集成的便捷性,OpenAPI与多语言sdk的支持,为客户自身业务接入EventBridge提供了便利。
在此基础之上,HTTPSource事件源更进一步,以Webhook形式开放了针对了其他云厂商、SaaS应用的集成能力,无需代码改动,仅需要简单配置即可完成EventBridge集成操作。
[1]钉钉官方文档
[2]Grafana官方文档
本文为阿里云原创内容,未经允许不得转载。