作者: 冬岛、 肯梦
导读
EDA 事件驱动架构 (Event-Driven Architecture) 是一种零碎架构模型,它的外围能力在于可能发现零碎“事件”或重要的业务时刻(例如交易节点、站点拜访等)并实时或靠近实时地对相应的事件采取必要口头。那么 EDA + 容器能擦出怎么的火花呢?本篇文章将率领大家一起在云上借助 ASK 容器服务 + EB 能力构建一套残缺的事件驱动架构。
本篇文章以“在线文件解压场景”为例为大家展现经典 EDA 事件驱动与容器如何搭配应用。
关注【Apache RocketMQ】公众号,获取更多相干信息!
服务架构
在线文件解压以 EB OSS 事件告诉为驱动点,架构计划如下:
EDA 架构的外围是对事件的利用,OSS 事件默认能够通过云服务总线实现采集,自定义告诉事件。本场景是通过 EventBridge 把 OSS 上传文件的事件实时传递给 ASK 中的服务,而后 ASK 中的服务对上传的 ZIP 文件进行下载、解压和再次回传到 OSS。
用到的云服务:
- ASK:Serverless 容器服务是一款基于阿里云弹性计算基础架构,同时齐全兼容 Kubernetes 生态,平安、牢靠的容器产品。
- EB:EventBridge 事件总线是一款无服务器事件总线服务,反对阿里云服务、自定义利用、SaaS 利用的事件接入,实用于轻松构建松耦合、分布式的事件驱动架构。
- OSS:对象存储服务,提供海量、平安、低成本、高牢靠的云存储服务。
场景实际
OSS、ASK 以及 EventBridge 三个云产品的操作步骤如下:
OSS 资源配置
- 在 OSS 控制台创立相干地区的 Bucket,并记住 Bucket 门路信息。
zip:搁置须要解压的 zip 包
unzip:搁置解压后的文件
- 创立一个能够操作 OSS 文件的用户,并生成 ak/sk。
关上 RAM 控制台 [1],点击「创立用户」。
- 输出「登陆名称」和「显示名称」并勾选「Open API 调用拜访」而后点击确定即可创立一个用户身份。
- 创立好账号当前再关上 RAM 控制台 [1] 能看到方才创立的账号信息。
- 点击账号名称,而后来到账号详情页面。点击「创立 AccessKey」。
- 而后就能生成 ak、sk 信息,如下所示。保留这两个要害信息,前面配置 ask 解压服务的时候须要应用,也能够点击「下载 CSV 文件」的形式下载下来保留。
- 有了 ask sk 还不行,要能拜访 OSS 服务,还须要给这个子账号授予 OSS 的操作权限,点击「权限治理」。
- 点击「增加权限」。
- 在「零碎策略」中输出 OSS,而后勾选「AliyunOSSFullAccess」,点击确定即可实现对 OSS 的拜访受权。
ASK 资源配置及代码解析
ASK(Serverless Kubernetes) 运行应用程序用于承受来自 EventBridge 发过来的对于 OSS 的事件,所以您首先须要创立一个 ASK 集群,而后部署解压服务。
1)创立 ASK 集群
- 关上容器服务控制台 [2] 点击右上角的创立集群
- 抉择 ASK 集群
填写集群名称,勾选最上面的《服务协定》,其余都应用默认配置而后就能够创立一个集群进去。
- 点击右上角的创立,开始创立集群。
- 弹出确认创立,确认没问题当前点击「确定」即可开始创立。
- 等几分钟后集群即可创立实现。
如果创立集群过程中遇到问题,可参考创立集群文档 [3] 解决,也能够通过群号 31544226 加钉钉群找答疑解决。
2)部署解压服务
- 集群部署胜利当前点击容器服务页面 [4] 能够看到刚刚创立的集群,而后点击集群名称调转到集群详情页面;
- 在集群详情页面点击「工作负载」中的「无状态」能够通过提交解压服务 YAML 的形式创立 Deployment 和 Service
- 点击右上角的「应用 YAML 创立资源」
- 把上面的 YAML 内容提交下来,留神 OSS_ACCESSKEYID 和 OSS_ACCESSKEYSECRET 这两个环境变量须要设置成你的 ak、sk,并且须要有从 OSS 下载、上传文件的权限。而后点击创立,即可实现服务的创立。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: eb-ask-demo
spec:
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-ask-demo 这个 Service,而后能看到「内部端点」的地址。「内部端点」地址就是解压服务的地址,全门路是 http://121.43.97.107/unzip
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/"}
]
}
}
}
}
- 填写 ASK 裸露的 URL 地址 (http://121.43.97.107/unzip),点击实现即可实现总线配置。
成果验证
服务曾经筹备好了,当初找一个 zip 文件上传到 OSS 就能看到成果了。上传一个 zip 文件到 zip 目录当前应该能在 unzip 目录中看到解压后的文件。
- 筹备 zip 文件
您能够创立一个文本文件,而后压缩成 zip 格局。或者能够关上咱们的示例程序 Github 工程 [7],下载此工程源码的 zip 文件,能够间接取得一个 zip 文件。
- 上传 zip 文件
关上 OSS 控制台 [8],抉择配置好的 bucket,进入 zip 目录。
- 点击「上传文件」。
- 点击「扫描文件」,而后找到方才下载的 zip 文件。
- 抉择方才下载的 zip 文件。
- 点击「上传文件」。
- 文件很快就上传胜利。
- 当初关上 unzip 目录能看到解压后的文件曾经上传上来了。
- 当初关上 EventBridge 控制台 [9] 查看事件轨迹。抉择查看最近 5 分钟的事件。
- 点击「事件轨迹」能看到事件是通过 EventBridge 胜利投递到了 ASK 裸露的解压服务上。
劣势及总结
- 基于该计划的事件驱动架构场景是高度松耦合且高度分布式的架构模型,事件的创建者(起源)只晓得产生的事件,并不知道事件的解决形式,也不须要关怀有多少相干方订阅该事件。
- ASK + EB 可解决业务层大部分容器事件驱动的场景,通过 EB 解耦并针对具体事件进行散发。通过松耦合架构疾速且灵便的上线业务组件,为企业提供更麻利高效的容器业务部署计划。
参考资料
[1] RAM 控制台:
https://ram.console.aliyun.com/users
[2] 容器服务控制台
https://cs.console.aliyun.com/
[3] 创立集群文档
https://help.aliyun.com/document_detail/86377.htm?spm=a2c4g.11186623.0.0.350f3e068qu6bW#task-e3c-311-ydb
[4] 容器服务页面
https://cs.console.aliyun.com/#/k8s/cluster/list
[5] github
https://github.com/AliyunContainerService/serverless-k8s-examples/oss-unzip
[6] 更多事件模式阐明:
https://help.aliyun.com/document_detail/181432.html
[7] 示例程序 Github 工程
https://github.com/AliyunContainerService/serverless-k8s-examples
[8] OSS 控制台
https://oss.console.aliyun.com/
[9] EventBridge 控制台
https://eventbridge.console.aliyun.com
[10] zip 解压源代码
https://github.com/AliyunContainerService/serverless-k8s-examples/tree/master/oss-unzip