引言
事件驱动架构(EDA)是一种以事件为纽带,将不同零碎进行解耦的异步架构设计模型。在 EDA 中,事件驱动的运行流程人造地划分了各个系统的业务语义,用户能够依据需要对事件与针对此事件做出的响应灵便定制,这使得基于 EDA 架构能够不便地构建出高伸缩性的利用。据 Daitan Group 的调研报告,早在 2017 年,例如 UBER、Deliveroo、Monzo 等公司就曾经采纳了 EDA 去设计他们的零碎。
为了便于用户更加轻松地开发以 EDA 为架构的利用,在 2020 年云栖大会上,阿里云正式推出了 EventBridge。EventBridge 是一款无服务器事件总线服务,可能以标准化的 CloudEvents 1.0 协定在利用之间路由事件。目前,EventBridge 曾经集成了泛滥成熟的阿里云产品,用户能够低代码甚至零代码实现各个阿里云产品和利用之间的买通,轻松高效地构建分布式事件驱动架构。
事件源是事件驱动的基石,如何获取更多事件源也是 EventBridge 始终在摸索和尝试的方向。针对市场上其余云厂商和垂直畛域的 Saas 服务,EventBridge 公布了 HTTP Source 能力,提供简略且易于集成的三方事件推送,帮忙客户更加高效、便捷地实现业务上云。
HTTP Source 概述
接入 EventBridge 利用有多种状况:用户自定义利用、阿里云服务、其余云厂商服务或者其余 SaaS 产品。
• 对于用户自定义利用,用户能够应用 EventBridge 官网的 API 接口、多语言客户端以及 CloudEvents 社区的开源客户端来实现接入。
• 对于阿里云的云产品,EventBridge 原生反对,用户能够在默认事件总线中抉择对应的云产品与其相干的触发事件。
• 而对于其余云厂商、SaaS 产品,EventBridge 同样也提供便捷的接入形式便于用户进行集成,HTTP Source 事件源便是一种典型的接入形式。
具体而言,HTTP Source 事件源是 EventBridge 反对的事件源的一种,它以 Webhook 模式裸露了公布事件的 HTTP 申请地址,用户能够在有 URL 回调的场景配置 HTTP Source 事件源,或者间接应用最简略的 HTTP 客户端来实现事件的公布。HTTP Source 事件源提供了反对 HTTP 与 HTTPS,公网与阿里云 VPC 等不同申请形式、不同网络环境的 Webhook URL,便于用户将其集成到各类利用中。接入时无需应用客户端,仅需保障利用能够拜访到对应 Webhook URL 即可,这使得接入过程变得简略而高效。
在将 HTTP 申请转换为 CloudEvent 的时候,EventBridge 会将申请的头部和音讯体局部置于 CloudEvent 字段中,其余字段会根据用户 EventBridge 资源属性以及零碎默认规定进行填充。用户能够在事件规定中,对所需的内容进行过滤、提取,最终依照模板拼装成所需的音讯内容投递给事件指标。
HTTP Source 事件源目前反对 3 种类型的平安设置,别离是申请办法、源 IP 以及申请起源域名。
• 申请办法:用户能够配置以后申请此事件源时非法的 HTTP 申请办法,如果办法类型不满足配置规定,申请将被过滤,不会投递到事件总线。
• 源 IP:用户能够设置容许拜访此事件源时非法的源 IP(反对 IP 段和 IP),当申请源 IP 不在设置的范畴内时,申请将被过滤,不会投递到事件总线。
• 申请起源域名:即 HTTP 申请的 referer 字段,当申请的 referer 与用户配置不相符时,申请被过滤,不会投递到事件总线。
抛砖引玉,上面就介绍如何应用 HTTP Source 来构建 SaaS 利用集成的最佳实际,帮忙大家疾速上手 SaaS 集成计划。
SaaS 集成最佳实际
钉钉监控 GitHub 代码推送事件
GitHub 提供了 Webhook 性能,代码仓库在产生某些特定操作(push、fork 等)时,能够通过回调来帮忙用户实现特定性能。针对多人开发的我的项目,将 GitHub 事件推送到特定钉钉群能够帮忙成员无效关注代码变更,进步协同效率。
本节咱们展现如何通过钉钉监控 GitHub 代码推送事件的最佳实际,次要蕴含以下几个步骤:
• 创立一个钉钉机器人;
• 创立 EventBridge 相干资源:事件总线、事件源(HTTP Source 类型)、事件规定、事件指标(钉钉);
• 创立自定义事件总线;
• 抉择 GitHub 代码仓库创立 Webhook;
• 向 GitHub 代码仓库推送代码变更;
• 钉钉群接管此次代码推送相干信息。
1)创立钉钉机器人
参考 钉钉官网文档[1],创立一个群机器人。创立群机器人时,平安设置请勾选“加签”并妥善保存密钥和稍后生成的机器人 Webhook 地址。
2)创立 EventBridge 相干资源
创立 EventBus 事件总线
创立事件源。事件源配置实现之后,点击跳过,咱们接下来会专门配置事件规定与指标。
创立实现后,进入事件源详情页,保留刚刚生成的 Webhook URL。
在 EventBridge 控制台页面点击进入刚刚创立的 EventBus 详情页,在左侧一栏中“事件规定”抉择“创立规定”。
创立工夫指标。抉择钉钉,并将钉钉机器人的 Webhook 地址和密钥填入,推送内容侧能够依照需要设计。
咱们填写模板变量为:
{“repo”:”$.data.body.repository.full_name”,”branch”:”$.data.body.ref”,”pusher”:”$.data.body.pusher.name”}
模板为:
{“msgtype”: “text”,”text”: {“content”: “Github push event is triggered. repository: ${repo}, git reference: ${branch}, pusher: ${pusher}.” } }
3)在 GitHub 代码仓库创立 Webhook
登陆 GitHub,在 GitHub 代码仓库“setting”中抉择左侧“Webhooks”,抉择新建 Webhook。
在创立 Webhook 的配置项中填入 HTTP Source 事件源的 Webhook 地址,Content type 局部抉择“application/json”,下方触发事件类型抉择“Just the push event.”,随后点击“Add Webhook”,创立实现。
4)向 GitHub 代码仓库推送代码变更
本地仓库做肯定变更,commit 后推送 GitHub。
5)钉钉群接管此次代码推送相干信息
异步生产监控报警信息
业务上存在异步生产报警信息的场景,例如报警内容备份,依据报警频率自适应调整报警阈值等。而且对于多云业务的用户,如何将跨云服务的报警信息整合起来也是一个麻烦的问题。依靠 HTTP Source,用户能够将不同云厂商(腾讯云、华为云等)、不同监控产品(Grafana、Zabbix、Nagios 等)对立集成到 EventBridge 平台,以便于实现对报警信息的异步生产。
本节咱们介绍如何应用 EventBridge 集成 Grafana,实现异步生产监控报警信息。Grafana 是一款开源数据可视化工具,也同时具备监控报警性能,具体应用能够参阅Grafana 官网文档[2]。本节次要蕴含以下步骤:
• 创立 MNS 队列;
• 创立 EventBridge 相干资源;
• Grafana 上配置 Webhook;
• 测试接管后果。
创立 MNS 队列
在 MNS 控制台,抉择“队列列表 - 创立队列”。
创立 EventBridge 相干资源
同上文所述,这里仅示例创立事件指标时相干配置。
Grafana 上配置 Webhook
点击 Grafana 控制台左侧“Alerting-Notification channels”,抉择“Add channel”。
在“type”一栏中抉择“Webhook”,url 填写 HTTP Source 事件源的 Webhook 地址,点击下方“Test”。
测试接管后果
登陆 MNS 控制台,进入队列详情页,点击页面右上角“收发音讯”,能够看到 MNS 曾经接管到刚刚 Grafana 发送的音讯。
点击对应音讯详情能够看到音讯内容,阐明音讯曾经被胜利生产。
更多集成
HTTP Source 反对的三方集成包含 Prometheus,Zabbix,Skywalking,Grafana,Open-Falcon,Cacti,Nagios,Dynatrace,Salesforce,Shopify,Gitee 等 SaaS 利用。通过简略配置 Webhook 无需开发既可实现事件接管能力。
总结
本文重点介绍 EventBridge 的新个性:HTTP Source 事件源。作为一款无服务器事件总线服务,EventBridge 曾经将阿里云云产品管控链路数据、音讯产品业务数据整和到事件源生态中,进步了上云用户业务集成的便捷性,Open API 与多语言 sdk 的反对,为客户本身业务接入 EventBridge 提供了便当。
在此基础之上,HTTP Source 事件源更进一步,以 Webhook 模式凋谢了针对了其余云厂商、SaaS 利用的集成能力,无需代码改变,仅须要简略配置即可实现 EventBridge 集成操作。
相干链接
[1] 钉钉官网文档
https://open.dingtalk.com/doc…
[2] Grafana 官网文档
https://grafana.com/docs/