简介:事件源是事件驱动的基石,如何获取更多事件源也是 EventBridge 一直在探索和尝试的方向。针对市场上其他云厂商和垂直领域的 Saas 服务,EventBridge 发布了 HTTP Source 能力,提供简单且易于集成的三方事件推送 ,帮助客户更加高效、便捷地实现业务上云。

作者:昶风

引言

事件驱动架构(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 集成操作。

原文链接

本文为阿里云原创内容,未经允许不得转载。

基于 EventBridge 构建 SaaS 应用集成方案的更多相关文章

  1. 基于MRS-ClickHouse构建用户画像系统方案介绍

    业务场景 用户画像是对用户信息的标签化.用户画像系统通过对收集的各维度数据,进行深度的分析和挖掘,给不同的用户打上不同的标签,从而刻画出客户的全貌.通过用户画像系统,可以对各个用户进行精准定位,从而将 ...

  2. 基于AgileEAS.NET企业应用平台实现基于SOA架构的应用整合方案-开篇

    开篇 系统架构的文章,准备在这段时间好好的梳理和整理一下,然后发布基于AgileEAS.NET平台之上的企业级应用架构实践,结合具体的案例来说明AgileEAS.NET平 台之上如何进行系统的逻辑架构 ...

  3. 基于PaaS和SaaS研发的商业云平台实战 转 (今后所有的IT行业会持续集成,往虚拟化方向更快更深的发展,商业化才是这些技术的最终目的)

    背景介绍 SaaS.PaaS.IaaS等云服务模式已经被大家普遍认可,在研发过程中借力一些PaaS和SaaS平台,能够提升产品的研发速度和功能稳定程度.本文将通过真实的商业平台案例-MaxWon研发实 ...

  4. 构建基于Jenkins + Github的持续集成环境

    搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...

  5. 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2

    基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2 Kubernetes实现Master-Slave分布式构建方案 传统Jenkins的Master-Slave方案的缺陷 Mas ...

  6. Redhat上为java Maven项目构建基于Jenkins + Github的持续集成环境

    在Redhat enterprise 6.5 的服务器上,为在gutub 上的 java mvaen项目构建一个持续集成环境,用到了Jenkins.因公司的服务器在内网,访问外网时要通过代理,所以为m ...

  7. 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1

    基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1 Jenkins的Master-Slave分布式构建 什么是Master-Slave分布式构建 Jenkins的Master-S ...

  8. 基于Kubernetes/K8S构建Jenkins持续集成平台(下)

    基于Kubernetes/K8S构建Jenkins持续集成平台(下) Jenkins-Master-Slave架构图回顾: 安装和配置NFS NFS简介 NFS(Network File System ...

  9. 基于PaaS和SaaS研发平台体系

    基于PaaS和SaaS研发的商业云平台实战 背景介绍 SaaS.PaaS.IaaS等云服务模式已经被大家普遍认可,在研发过程中借力一些PaaS和SaaS平台,能够提升产品的研发速度和功能稳定程度.本文 ...

  10. 基于Kubernetes 构建.NET Core技术中台

    今天下午在腾讯云+社区社区分享了<基于Kubernetes 构建.NET Core技术中台>,下面是演讲内容的文字实录. 我们为什么需要中台 我们现在处于企业信息化的新时代.为什么这样说呢 ...

随机推荐

  1. 自己想到的几道Java面试题

    1.在抽象类中能否写main方法,为什么? 2.在接口中能否写main方法,为什么? 3.Java能否使用静态局部变量,为什么? 4.Java类变量,实例变量,局部变量在多线程环境下是否线程安全,为什 ...

  2. MediaCodec硬解流程

    一 MediaCodec概述 MediaCodec是Android 4.1(api 16)版本引入的低层编解码接口,同时支持音视频的编码和解码.通常与MediaExtractor.MediaMuxer ...

  3. 记录--极致舒适的Vue可编辑表格

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 使用ElementPlus的Table啥都好,就是没有可编辑表格!!! 既然UI库不支持,那我们实现一个可编辑表格是很难的事么?难么?不难 ...

  4. HDFS Short-Circuit Local Reads

    目录 1.背景 2.配置 2.1 检测是否启用libhadoop.so 2.2 设置套接字路径 2.3 配置示例 2.4.1 /var/lib/hadoop-hdfs目录未创建 2.4.2 创建 /v ...

  5. 线上gc问题-SpringActuator的坑

    整体复盘: 一个不算普通的周五中午,同事收到了大量了cpu异常的报警.根据报警表现和通过arthas查看,很明显的问题就是内存不足,疯狂无效gc.而且结合arthas和gc日志查看,老年代打满了,gc ...

  6. java 计算两个date日期相差天数或者时间差

    相差天数计算: /** * 相差天数计算 */ public int differentDaysByMillisecond(Date date1, Date date2) { return Math. ...

  7. .NET Core 多线程的用法,以及用例

    1.使用 Thread 类 Thread 类是 .NET 中最基本的多线程操作方式之一,可以使用它创建并启动新线程.以下是一个简单的例子,创建一个新的线程并运行: using System; usin ...

  8. Apache Maven ToolChains的使用

    目录 简介 Toolchains的介绍 Toolchains的例子 Toolchains支持 总结 简介 Maven是java中非常有用和常用的构建工具,基本上现在大型的java项目都是Maven和g ...

  9. HE琥珀虚颜破解自由安装程序教程(001)

    HE琥珀虚颜破解自由安装程序教程(001) 前言 自从狗尾草跑路后,HE琥珀就没法用了,当前APP还没法破解,但是笔者找到了HE琥珀存在的一些漏洞,可以实现安装自己的APP. 所需工具 所需工具 1. ...

  10. Python 学习路线:介绍、基础语法、数据结构、算法、高级主题、框架及异步编程详解

    Python 介绍 Python 是一种 高级 的.解释型 的.通用 的编程语言.其设计哲学强调代码的可读性,使用显著的缩进.Python 是 动态类型 和 垃圾收集 的. 基本语法 设置 Pytho ...