一、前言

近年来,随着微服务、云原生和 Serverless 概念的普及以及容器化技术的发展,事件驱动也再次成为热点,引起 IT 界广泛的关注。事件驱动架构是一种用于设计应用的软件架构和模型。对于事件驱动系统而言,事件的捕获、通信、处理和持久保留是解决方案的核心结构。事件驱动架构可以最大程度减少耦合度,很好地扩展与适配不同类型的服务组件,因此是现代化分布式应用架构的理想之选。

本文会从以下几个方面来剖析 Apache EventMesh 云原生分布式事件驱动架构:

  • 什么是 EventMesh
  • 云原生生态下的事件驱动架构模型
  • EventMesh 架构
  • EventMesh 的相关特性以及应用场景
  • 总结回顾
  • 未来规划与发展

二、什么是 EventMesh

Apache EventMesh 是⼀个⽤于解耦应⽤和后端中间件层的动态云原⽣事件驱动架构基础设施。它⽀持⼴泛的⽤例,包括复杂的混合云、使⽤了不同技术栈的分布式架构。


上面这张图我们可以看到 EventMesh 所处的位置就是连接云应用和基础设施的一个中间层, Event Mesh 与 Service Mesh 具有同等的定位,而且它本身支持云原生的部署方式并且可以在 Kubernetes 上运行。

Service Mesh 更多的是集成 RPC 的服务,是同步调用的,可能存在一定的耦合度。而对于 Event Mesh 来说,更多的是集成的事件驱动的微服务,这种微服务的特性就是松耦合和异步的。

三、云原生生态下的事件驱动架构模型

3.1 事件编排和计算

从上面这张图可以看出,EventMesh 可以接入的应用有很多:分布式应用、云原生应用和服务、IoT 设备、数据流、云合作伙伴以及其它的云厂商。通过标准的 CloudEvents 协议接入到 EventMesh,通过这种事件驱动的架构,可以提高应用的弹性伸缩能力,因为它们借助 EventMesh 实现了通信的解耦。

EventMesh 内部具有 Orchestrator 的能力,可以自定义数据源触发器以及实时处理函数,对于其它接收到的事件,Orchestrator 可以路由到上面这些服务,包括无服务的计算(像容器、函数、IoT 应用)、监控或通知类服务、数据分析类服务。

3.2 事件驱动 WebHook

举个例子,比如我在 Github 上提了一个 PR,其实都是可以配置这种 WebHook 的,其实就是类似这种旁路消息的通知机制,有任何的变动,都会推送过来。对于通知服务来讲,它并不关注推送的目标是谁,并且也不关注我产生的事件你是如何使用的或者被谁使用,它只关注产生事件就好。

那基于这样的场景接入到 EventMesh 的话,那 EventMesh 其实具备事件路由、事件转换、事件过滤的能力,你可以基于这样的事件去配置相应的规则,比如正向过滤、排除过滤。

四、EventMesh 架构


EventMesh 本身对外提供了轻量级客户端,标准化接口和协议。上面我们有讲到 EventMesh 的定位是基于应用与基础设施的中间层。应用通过轻量级客户端可以接入 EventMesh,进而实现与基础设施强绑定的解耦。

上图的左边部分也就是我们 EventMesh 内部的一个架构,EventMesh 对外提供了不同类型的 API,包括 Java、Go、C、Python 等。左边最中间这部分其实是 EventMesh 的运行时状态,它本身支持集群化 Gateway 的方式部署,同时也可以支持容器化 Sidecar 的方式部署。

EventMesh 内部主要分成以下几个部分:协议、可观测性、处理器、编排以及存储。不同的部分都做了插件化处理,像协议的部分支持 HTTP、TCP、gRPC、MQTT,内部通信的话都会转成 CloudEvents,相当于适配器的功能。

五、EventMesh 的相关特性以及应用场景

5.1 EventMesh 插件化设计

SPI(Service Provider Interface)机制

设计思想:

  • 遵循开闭原则
  • 面向标准化接口编程+策略模式+配置文件
  • 将运行时与插件解耦,便于扩展插件,以及运行态动态加载插件

5.2 Data Mesh


借助 EventMesh 可以将事件源与事件目标进行打通,比如左边的 RDMS 关系型数据库的数据发生了更新,EventMesh 将以通知的形式通知到事件目标比如 MQ,这样就可以跨消息中间件、跨存储的一个同步。这里其实借助 EventMesh brige 的能力,看起来只是像跨组件,但实际上两边的 EventMesh 可能不是一个集群的,它其实可以跨网络,往大的说还可以跨企业之间的联通,以及公有云与私有云的数据交换。

场景一:跨网络区域流量复制

场景二:跨事件存储数据传输

5.3 EventMesh Workflow

场景:电商场景


EventMesh 在整个事件驱动的这套系统中,起到的是事件编排的能力,EventMesh 会有无服务计算的工作流引擎,同时配合 AsyncAPI,AsyncAPI 可以定义这些服务节点的描述,Workflow 的工作引擎是符合 Serverless Workflow 规范标准的,通过这种方式可以完成一套工作流的定制与运作。

  • Online Store App Service DSL
  • Order Service DSL
  • Other Service DSLs …

5.4 EventMesh Workflow Engine


EventMesh Workflow Engine 主要分为三大块:EventMesh Catalog、EventMesh Workflow Engine、EventMesh Runtime。

对于 EventMesh Catalog 而言,其实就是对哪些服务定义了,定义了之后,通过 Catalog 内部的 AsyncAPI 解析器,解析出来 Publisher Module、Channel Module、Subscriber Module,这些节点在下面的工作流 DSL 定义,EventMesh Workflow Engine 解析到 Workflow 节点后,会跟 EventMesh Catalog 有个交互,会查询服务有哪些 Publisher 以及 Subscriber,Engine 这边触发了事件后,会发给 EventMesh Runtime,最后才会推给下游的应用,整个一套 EventMesh Workflow Engine 是可以实现工作流的流转。

六、总结回顾

  • 轻松构建松耦合、分布式事件驱动架构。
  • 开放兼容,原生支持 CloudEvents SDK 和 API,易扩展。
  • 打破数据孤岛,支持企业全联接、数字化、多云协同。

七、未来发展与规划

深度剖析 Apache EventMesh 云原生分布式事件驱动架构相关推荐

  1. 阿里云开源PolarDB数据库,与社区共建云原生分布式数据库生态

    简介:5月29日,阿里云开发者大会上,阿里巴巴宣布开源云原生数据库能力,对外开放关系型数据库PolarDB for PostgreSQL 源代码,服务百万开发者,与社区开发者一起共建云原生分布式数据库 ...

  2. 斩获大奖|阿里云PolarDB-X引领云原生分布式数据库新时代

    简介:阿里云原生分布式数据库PolarDB-X荣获"2021年度最佳分布式数据库". 12月15-16日,以"引领分布式云变革 助力湾区数字经济"为主题的全球分 ...

  3. 为什么云原生+分布式是数据库的未来?

    2020 云栖大会期间,阿里巴巴正式成立云原生技术委员会,同时推出了云原生多模数据库Lindorm.云原生分布式数据库PolarDB-X.云原生数据仓库AnalyticDB(ADB).云原生数据湖分析 ...

  4. 致力打造下一代云原生分布式消息系统,StreamNative 完成源码资本数百万美元 Pre-A 轮融资,红杉中国种子基金跟投...

    点击上方"开源社"关注我们 | 作者:StreamNative | 转载自:StreamNative | 编辑:贺鑫 | 设计:王福政 | 责编:陈梅梅 Apache 顶级项目 P ...

  5. 李飞飞:云原生分布式数据库面临哪些机遇与挑战?

    简介:12月3日,由阿里云CIO学院主办的[2020中国企业数字创新峰会]在杭州举行.400位企业CEO.CTO.CIO齐聚一堂,共同探讨企业数字化转型经验.阿里巴巴集团副总裁.达摩院数据库首席科学家 ...

  6. 保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!

    作者简介 Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验.他目前领导YugabyteDB的社区和市场团队. 本文来自Rancher Labs Longhorn是Kubern ...

  7. 云原生分布式操作系统营造法式-云平台提供商视角

    编者按:<100页ppt讲清楚云原生 >一文作者投稿连载,待有缘人读完.上次找的ppt不少朋友可能不志在交流,志在使用素材内部汇报等.欢迎点赞在看转发三连,幸甚! 作者介绍: 高磊(曾用花 ...

  8. 通过云速搭CADT实现云原生分布式数据库PolarDB-X 2.0的部署

    云速搭 CADT 是一款为上云应用提供自助式云架构管理的产品,显著地降低应用云上管理的难度和时间成本.本产品提供丰富的预制应用架构模板,同时也支持自助拖拽方式定义应用云上架构:支持较多阿里云服务的配置 ...

  9. 网商银行是如何建设金融级云原生分布式架构的?

    网商银行从诞生之日起就是一家将核心系统架构在云上的银行,经过多年建设,逐步完成了两地三中心架构到异地多活云单元架构的升级.中国人民银行出台的<金融科技(Fin-Tech)发展规划(2019-20 ...

最新文章

  1. MapReduce框架Mapper和Reducer类源码分析
  2. 搭建渗透测试环境选自KaliLinux无线网络渗透测试教程
  3. IDA Pro 反汇编窗口基本操作
  4. 多客服功能终于也向所有微信认证的订阅号开放了
  5. Leetcode-169 Majority Element
  6. 如何将多个源文件编译为一个.ko
  7. 《Python Cookbook 3rd》笔记(2.3):用Shell通配符匹配字符串
  8. java 对象地址_如何获取Java对象的地址?
  9. python多人在线游戏_python实现人接球的小游戏
  10. 【Visual C++】游戏开发笔记之十一 基础动画显示(四) 排序贴图
  11. c语言 除法优化,【小课堂】汇编级除法优化
  12. WPS在Excel中复选选中框复制粘贴后变成R解决办法
  13. csdn博客修改名字,不需要重新注册的。
  14. 蔡军生先生第二人生的源码分析(2)第二人生的基本功能
  15. ServiceComb 课程
  16. OBB包围盒及其碰撞检测算法(一)
  17. leetcode day 2 【1905. 统计子岛屿】 BFS/DFS
  18. 月入十万的QQ空间营销引流技巧,你知道吗,??不看你会后悔!!
  19. VC的监视窗口等调试窗口的使用
  20. Java调用Cplex的基础简单教程

热门文章

  1. python数据挖掘实验报告1
  2. atexit函数的执行顺序_多玩YY语音的面试题:C++中如何在main()函数之前执行操作?...
  3. java中,饭店里面有五道菜, 黄花鱼 200块, 烤鸭 100块, 红烧肉 60块, 小炒肉 40块, 白水豆腐 10块,一个客人进了饭店, 根据身上的钱来决定最好能吃哪道菜 , 编程模拟。
  4. AI画作算不算艺术?
  5. java获取音乐_Java读取MP3文件的信息(歌曲名,歌手...)
  6. ssh-keygen免密登录详解
  7. 网上搜罗的挺不错的QQ签名
  8. 震撼来袭!(USB Camera,支持同时开启多路摄像头,支持旋转、镜像)
  9. 高中英语话题阅读 计算机,高中英语说课稿:Unit 3 Computers Reading Task Who Am I ?
  10. Linux:dmesg的时间戳转换为可阅读的形式