基于 ASK + EB 构建容器事件驱动服务

网友投稿 244 2022-10-08

基于 ASK + EB 构建容器事件驱动服务

​作者:​冬岛、​肯梦​

导读

EDA 事件驱动架构( Event-Driven Architecture ) 是一种系统架构模型,它的核心能力在于能够发现系统“事件”或重要的业务时刻(例如交易节点、站点访问等)并实时或接近实时地对相应的事件采取必要行动。那么 EDA + 容器能擦出怎样的火花呢?本篇文章将带领大家一起在云上借助 ASK 容器服务 + EB 能力构建一套完整的事件驱动架构。

本篇文章以“在线文件解压场景”为例为大家展示经典 EDA 事件驱动与容器如何搭配使用。

服务架构

在线文件解压以 EB OSS 事件通知为驱动点,架构方案如下:

EDA 架构的核心是对事件的应用,OSS 事件默认可以通过云服务总线完成采集,自定义通知事件。本场景是通过 EventBridge 把 OSS 上传文件的事件实时传递给 ASK 中的服务,然后 ASK 中的服务对上传的 ZIP 文件进行下载、解压和再次回传到 OSS。

用到的云服务:

ASK:Serverless 容器服务是一款基于阿里云弹性计算基础架构,同时完全兼容 Kubernetes 生态,安全、可靠的容器产品。

EB:EventBridge 事件总线是一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS 应用的事件接入,适用于轻松构建松耦合、分布式的事件驱动架构。

OSS:对象存储服务,提供海量、安全、低成本、高可靠的云存储服务。

场景实践

OSS、ASK 以及 EventBridge 三个云产品的操作步骤如下:

OSS 资源配置

在 OSS 控制台创建相关地域的 Bucket,并记住 Bucket 路径信息。

unzip:放置解压后的文件

创建一个可以操作 OSS  文件的用户,并生成 ak/sk 。

创建好账号以后再打开 RAM 控制台[1] 能看到刚才创建的账号信息。

ASK 资源配置及代码解析

ASK(Serverless Kubernetes) 运行应用程序用于接受来自 EventBridge 发过来的关于 OSS 的事件,所以您首先需要创建一个 ASK 集群,然后部署解压服务。

1)创建 ASK 集群

选择 ASK 集群

填写集群名称,勾选最下面的《服务协议》,其他都使用默认配置然后就可以创建一个集群出来。

等几分钟后集群即可创建完成。

如果创建集群过程中遇到问题,可参考创建集群文档[3]解决,也可以通过群号 31544226 加钉钉群找答疑解决。

2)部署解压服务

---apiVersion: apps/v1kind: Deploymentmetadata: name: eb-ask-demospec: selector: matchLabels: app: eb-ask-demo template: metadata: labels: app: eb-ask-demo spec: containers: - name: eb-ask-demo image: "registry.cn-hangzhou.aliyuncs.com/kubeway/demo-ossunzip:v0.0.1-20211218152144_master_37323b1" resources: limits: memory: "128Mi" cpu: "500m" ports: - containerPort: 8080 env: - name: OSS_ACCESSKEYID value: "ak" - name: OSS_ACCESSKEYSECRET value: "sk" - name: OSS_ENDPOINT value: "oss-cn-hangzhou.aliyuncs.com"

解压服务源代码可在 github[5] 获取。

3)获取到服务暴露 URL

EB 资源配置

EB 总线分为云服务总线和自定义总线,云服务总线用于接受云服务事件 E.g. OSS ,自定义总线用于接受自定义事件 E.g. 解压完成信息。

配置云服务总线

配置事件模式,事件模式即事件的筛选规则,需认真配置,否则会造成循环触发。

更多事件模式说明[6]参考文末更多链接。

{ "source": [ "acs.oss" ], "type": [ "oss:ObjectCreated:PostObject", "oss:ObjectCreated:UploadPart", "oss:ObjectCreated:PutObject", "oss:ObjectCreated:UploadPartCopy", "oss:ObjectCreated:InitiateMultipartUpload", "oss:ObjectCreated:AppendObject", "oss:ObjectCreated:CompleteMultipartUpload" ], "subject": [ { "suffix": ".zip" } ], "data": { "oss": { "bucket": { "name": [ "eb-ask" ] }, "object": { "key": [ { "prefix": "zip/" } ] } } }}

效果验证

服务已经准备好了,现在找一个 zip 文件上传到 OSS 就能看到效果了。上传一个 zip 文件到 zip 目录以后应该能在 unzip 目录中看到解压后的文件。

准备 zip 文件

您可以创建一个文本文件,然后压缩成 zip 格式。或者可以打开我们的示例程序Github 工程[7],下载此工程源码的 zip 文件,可以直接获得一个 zip 文件。

上传 zip 文件

选择刚才下载的 zip 文件。

文件很快就上传成功。

现在打开 unzip 目录能看到解压后的文件已经上传上来了。

现在打开 EventBridge 控制台[9]查看事件轨迹。选择查看最近 5 分钟的事件。

优势及总结

基于该方案的事件驱动架构场景是高度松耦合且高度分布式的架构模型,事件的创建者(来源)只知道发生的事件,并不知道事件的处理方式,也不需要关心有多少相关方订阅该事件。

ASK + EB 可解决业务层大部分容器事件驱动的场景,通过 EB 解耦并针对具体事件进行分发。通过松耦合架构快速且灵活的上线业务组件,为企业提供更敏捷高效的容器业务部署方案。

参考资料

[1] RAM 控制台:

​​创建集群文档

​​Github 工程

​​控制台

​​解压源代码

​​https://github.com/AliyunContainerService/serverless-k8s-examples/tree/master/oss-unzip​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java如何使用Set接口存储没有重复元素的数组
下一篇:如何在零停机的情况下迁移 Kubernetes 集群
相关文章

 发表评论

暂时没有评论,来抢沙发吧~