热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

作者:​冬岛、​肯梦​

导读

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

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

关注【Apache RocketMQ】公众号,获取更多相关信息!

服务架构

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

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

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

用到的云服务:

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

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

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

场景实践

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

OSS 资源配置

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

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

zip:放置需要解压的zip包

unzip:放置解压后的文件

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

打开 RAM 控制台 [1] ,点击「创建用户」。

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

  • 输入「登陆名称」和「显示名称」并勾选 「Open API 调用访问」然后点击确定即可创建一个用户身份。

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

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

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

  • 点击账号名称,然后来到账号详情页面。点击「创建 AccessKey」。

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

  • 然后就能生成 ak、sk 信息,如下所示。保存这两个关键信息,后面配置 ask 解压服务的时候需要使用,也可以点击「下载 CSV 文件」的方式下载下来保存。

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

  • 有了 ask sk 还不行,要能访问 OSS 服务,还需要给这个子账号授予 OSS 的操作权限,点击「权限管理」。

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

  • 点击「添加权限」。

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

  • 在 「系统策略」中输入 OSS,然后勾选「AliyunOSSFullAccess」,点击确定即可完成对 OSS 的访问授权。

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

ASK 资源配置及代码解析

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

1)创建 ASK 集群

  • 打开容器服务控制台 [2] 点击右上角的创建集群

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

  • 选择 ASK 集群

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

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

  • 点击右上角的创建,开始创建集群。

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

  • 弹出确认创建,确认没问题以后点击「确定」 即可开始创建。

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

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

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

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

2)部署解压服务

  • 集群部署成功以后点击容器服务页面 [4] 可以看到刚刚创建的集群,然后点击集群名称调转到集群详情页面;

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

  • 在集群详情页面点击 「工作负载」中的「无状态」可以通过提交解压服务 YAML 的方式创建 Deployment 和 Service

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

  • 点击右上角的「使用 YAML 创建资源」

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

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

  • 把下面的 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​​​

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

EB 资源配置

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

  • 配置云服务总线

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

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

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

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

{
    "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 ),点击完成即可完成总线配置。

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

效果验证

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

  • 准备 zip 文件

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

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

  • 上传 zip 文件

打开 OSS 控制台 [8]  ,选择配置好的 bucket,进入 zip 目录。

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

  • 点击「上传文件」。

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

  • 点击「扫描文件」,然后找到刚才下载的 zip 文件。

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

  • 选择刚才下载的 zip 文件。

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

  • 点击「上传文件」。

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

  • 文件很快就上传成功。

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

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

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

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

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

  • 点击「事件轨迹」 能看到事件是通过 EventBridge 成功投递到了 ASK 暴露的解压服务上。

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

优势及总结

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

  • 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​​


推荐阅读
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
author-avatar
剪子61_199
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有