【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

EventMesh:微众银行开源的新型云原生事件驱动架构实践

  • 2021-02-02
  • 本文字数:3602 字

    阅读完需:约 12 分钟

EventMesh:微众银行开源的新型云原生事件驱动架构实践

2020 年,微众银行在 GitHub 上正式开源了 EventMesh。作为一个动态的插件式云原生基础服务,EventMesh 提供了灵活,可靠和快速的事件分发与处理,并且可以进行管理。本篇文章将围绕 EventMesh 起源及原理等方面进行介绍,并结合微众银行的实践经验带领大家一起探索事件驱动架构。

什么是事件驱动架构


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


解耦



基于这种松耦合,微服务可以用不同的语言实现。解耦后的微服务能够轻松地在网络上相互独立地扩展,通过动态添加或删除事件生产者和消费者来修改他们的系统,而不需要更改任何微服务中的任何逻辑。

基于推送通知的消息传输机制



事件驱动的体系结构中,客户端无需轮询就可以接收更新,事件在到达事件存储后就会通知给客户端,客户端可以随时接收更新,这对于动态数据转换、分析和数据科学处理非常有用。

可追溯与审计



事件流是事实的不变流,其中每个事实由流中的事件表示。每当实体状态发生变化时,都会发出一个新事件。事件驱动的体系结构可以通过实现事件追溯(Event Sourcing)等模式来提供不可变事件的日志,这是审计的关键。

加速机器学习与数据科学的模型选择



事件驱动架构为加速机器学习模型从开发到生产提供了一种有效的方法,可允许使用机器学习技术的系统同时针对数据测试多个模型,并在正确的时间提供最合适的模型。模型可以使用业务事件,实时地将结果广播给另一个服务,该服务可以根据一些关于速度、预测精度等的业务标准选择服务哪个模型。因为模型可以不断地测试和改进,所以该体系结构允许更快的、迭代的开发,可以快速地部署到生产环境中。

EventMesh 是什么


EventMesh 是以事件驱动为核心的基础服务,EventMesh 之于微服务与 Service Mesh 具有同等的定位。EventMesh 作为动态的插件式云原生基础服务层,将应用程序和中间件层分离,并提供了灵活,可靠和快速的事件分发能力,同时可以对事件进行管理,可以作为应用进程的连接层,提供企业实现其数字化转型目标所需的全套应用进程间通信模式。

为什么需要 EventMesh


EventMesh 可以作为 Service Mesh 的补充,在应用程序之间实现更好的通信,并允许应用程序通过将某些功能放在网络层和应用程序层之间使我们可以更多地关注业务逻辑。但是,相比之下,两者有一些重要的区别:


这些区别体现了 EventMesh 的异步通信的特点和优势,以及相比 Service Mesh 具有覆盖更广泛应用场景的能力。

微众银行 EventMesh 整体架构



EventMesh 目前整体的架构如上图所示,通过以事件驱动为核心的体系结构,实现了应用程序与中间件层的解耦分离。


同时目前 EventMesh 分别提供了 HTTP API 与 TCP API 更加方便多语言客户端的接入代理。

     

EventMesh-Runtime 组件以插件化的形式运行了不同的 Connector, 进而支持对接多种 Event Store,客户端通过向 Runtime 发出发布\订阅指令,完成事件的发布与订阅。Runtime 基于 Open Messaging Connector Interface 接口,实现对 Connector 的调度,客户端所发出的事件交予 Runtime 调度的 Connector,将事件存储到对应的 Event Store 中进而再由订阅对应事件的 EventMesh 将事件接收并转发给所代理的下游客户端。

     

EventMesh Runtime 大大简化了客户端的逻辑,自身提供了事件的发布\订阅、治理、传输加密、事件路由、Session 管理、负载均衡、指标监控等能力。

     

同时 EventMesh 作为以事件驱动架构为核心的中间件基础服务,积极拥抱云原生,支持动态扩缩容,具备容器化安装部署的能力。

关键部件


  • eventmesh-runtime:一种中间件,用于在事件产生者和消费者之间传输事件,支持云原生应用程序和微服务

  • eventmesh-sdk-java:当前支持 HTTP 和 TCP 协议,未来会支持 gRPC 等

  • eventmesh-registry:自动在连接到 EventMesh 的应用程序和服务之间路由事件, 管理 runtime

  • eventmesh-connector-defibus : 一种基于 OpenMessagingConnector 接口的实现,支持将 DeFiBus 作为事件存储,运行于 eventmesh-runtime 之上,实现事件的发布与订阅

  • eventmesh-connector-rocketmq : 一种基于 OpenMessagingConnector 接口的实现,支持将 RocketMQ 作为事件存储,运行于 eventmesh-runtime 之上,实现事件的发布与订阅


通过上图可以将 EventMesh 横向分为 Control Panel、Data Panel、Store Panel 三层。


  • Data PanelApp 与 EventMesh 的事件信息交互处于 Data Panel 中,从该模型可以看出 EventMesh 充分地将事件生产者与消费者进行了解耦,任何事件生产者都不需要知道它们的事件消费者。类似地,当任何事件消费者使用消息时,它们只需要订阅事件流。事件的生产者与消费者均可以弹性地扩缩容而互无影响。

  • Control PanelControl Panel 中分为治理模块、注册模块、安全模块、指标模块、追踪定位模块, 这些模块都将采用业界通用、优秀的解决方案与 EventMesh 进行对接,进而丰富 EventMesh 的生态环境。例如:注册模块可对接 Nacos、指标模块可对接 Prometheus、追踪定位模块可对接 SkyWalking 等。

  • Store PanelStore Panel 为事件存储面板,借助 connector 插件,客户端通过 EventMesh 可以将事件发布到对应的事件存储中,目前已支持 DeFiBus、RocketMQ 作为事件存储,用户可根据业务的使用场景来选择对应事件存储,进而体验不同事件存储的相关特性。

EventMesh 核心特性与能力


通过上述的架构图例与模块的介绍,我们初步了解了 EventMesh 的架构与模块间的职能,从产品的角度而言 EventMesh 自身具有以下的特性与能力:


  • 可插拔式事件存储:EventMesh 不仅将事件生产者与消费者进行解耦,还降低了运行时与事件存储代码之间的耦合度。事件存储(DeFiBus/RocketMQ/Kafka/Redis 等)以插件化的形式接入 EventMesh,因此 EventMesh 可以更为灵活地扩展事件存储,通过对接不同的事件存储,用户可以享受到不同事件存储所具有的特性。

  • 云原生:EventMesh 遵循面向云原生的 OpenMessaging 接口定义,通过不同事件存储插件对接口的实现,完成事件的发布\订阅,同时 EventMesh 对事件的定义遵循 Cloud Event 标准协议,统一了不同语言事件接入的协议入口。同时 EventMesh 支持 sideCar 形式的部署模式,可通过 K8S 进行管理。

  • 多语言代理接入,协议简化:EventMesh 可为多种语言(java/go/python/c/...)进行代理,目前提供 http/tcp 两种接入方式, 客户端不需关注事件存储组件的相关协议,仅需遵循 EventMesh 协议,与 EventMesh 对接,减少了直接对接事件存储的复杂度,降低不同语言客户端的接入成本。

  • 集群高可用:EventMesh 具有集群化能力,客户端通过负载均衡策略与 EventMesh 集群建连,支持 gateWay 形式的部署模式,EventMesh 对客户端支持组级别代理。

EventMesh 特性规划


上述是 EventMesh 目前所支持的特性与功能,而作为以事件驱动架构为核心的基础服务,EventMesh 在未来还会围绕事件标准协议、事件生命周期管理、事件编排与治理、相关指标采集与安全监控等特性方面做出相关规划,具体如下:


  • 支持 Cloud Event 事件标准协议

  • 支持事件溯源与事务



基于 saga 的分布式事务的思想设计实现,需要考虑事务补偿、重试,同时下游系统要保证幂等,以及事务补偿的成功性,不需人工介入。



事件的溯源与重现,配合 CQRS,需通过领域模型设计聚合对象、EventStore 与聚合资源库、物化视图与查询。可以使用 Event Sourcing 的事件数据来分析数据产生的过程,解决 bug,也可以用来分析用户的行为。



  • 支持事件过滤



  • 支持对接 Promethus 指标采集

  • 支持多语言 SDK(c\go\python\wsam)

  • 支持事件编排,工作流处理

  • 支持事件治理

  • 支持对接 Skywalking、zipkin 等进行事件跟踪

  • 支持对接 Spiffe 等进行事件安全管控

  • 支持 openmessaging-storage-dledger 为默认事件存储实现。dledger 是一款 OpenMessaging 中基于 raft 打造的 commitLog 存储库实现,可以作为分布式存储系统的持久层,具有高可用、高持久、强一致的特性。

  • 支持事件管理台

  • 支持事件 schema 注册表通过对事件 schema 的注册管理,来确保事件报文的准确性,提升事件触达的成功率。

  • 支持 grpc 协议

  • 支持 MQTT 协议

  • 支持函数式触发器与绑定,对接 Serverless 支持。通过配置方法名与参数,动态路由函数式接口。

最后


EventMesh 和 DeFiBus 目前支撑了微众银行每天亿级的金融交易,且已经开源。DeFiBus 是一款由微众银行打造的安全可控的分布式金融级消息总线,提供了 RPC 同步调用,还提供了 MQ 的异步事件通知、事件组播和广播等常用服务调用和消息模式,同时增加了应用多中心多活、服务就近、灰度发布等分布式场景下的高可用能力。在对于机器故障的容错能力方面的增强,也让消息总线的服务更加稳定可靠。


相关链接:


https://github.com/WeBankFinTech/EventMesh

https://gitee.com/webank/EventMesh

https://github.com/WeBankFinTech/DeFiBus

https://gitee.com/webank/DeFiBus

2021-02-02 07:005580

评论

发布
暂无评论
发现更多内容

华为云智能编程进高校,解读行业发展新趋势

科技说

一文吃透泛型

程序员大彬

Java java面试

实力爆表,日日新成为AI领航者

柒号华仔

人工智能 AIGC 日日新 商汤

数据库原理及MySQL应用 | 并发控制

TiAmo

MySQL 数据库 并发控制

在字节跳动实习后,程序员是这样写简历的

字节跳动技术范儿

字节跳动 实习

CIO成就计划预告·微软韦青:数智时代下的企业数智化战略决策

科创人

万字详解 | Java 函数式编程

Phoenix

Lambda 函数式 #java

Mac上免费好用的PDF编辑器:Acrobat Reader DC2023

Rose

苹果软件 mac软件下载 pdf阅读 Adobe Acrobat Reader DC

关于mac虚拟机Parallels Desktop 常见问题解答

Rose

pd 18 Parallels Desktop 虚拟机 PD常见问题 Mac虚拟机

前端代码安全与混淆

京东科技开发者

安全 京东云 企业号 4 月 PK 榜

毫末顾维灏:中国首个自动驾驶数据智能体系MANA将以产品服务方式对外合作开放

科技大数据

高效复制:在Linux中并发执行相同任务,各自生成日志

小毛驴的烂笔头

Django笔记七之ManyToMany和OneToOne介绍

Hunter熊

Python django 多对多 ManyToMany OneToOne

WWDC 2023会有哪些内容?WWDC 2023抢先看

Rose

WWDC 2023 Apple发布会

全能网页视频下载工具Downie使用教程

Rose

downie 4 Mac 视频下载工具 Downie使用教程 如何下载网页视频

有限资源下如何实现最高效的数据处理?四个“智慧城市”项目寻找“最优解”

TDengine

tdengine 物联网 时序数据库 智慧城市 数据优化

得帆云DeFusion融合集成iPaaS平台领先行业,打造先锋集成产品

得帆信息

打破信息孤岛 数据集成 集成平台 数据集成平台 ipaas

CIO成就计划第二季第一期 | 活动回顾:基于数字技术重塑流程,驱动业务增长

科创人

Java变量与数据类型

timerring

Java 后端

园林绿化设计工具:GardenPlanner Mac版

真大的脸盆

Mac Mac 软件 Mac 系统 园林设计工具 绿化设计

肝到头秃!阿里爆款的顶配版SpringCloudAlibaba学习笔记

架构师之道

微服务

技术速递 | 分布式政企应用如何快速实现云原生的微服务架构改造

科技说

青云职上 群英有为 | 助力区域打造人才高地,龙岗双选会顺利举办!

科技说

Selenium之POM 设计模式

QE_LAB

selenium 测试技术

毫末发布DriveGPT雪湖·海若!首期智能驾驶能力、驾驶场景识别能力对行业开放

科技大数据

对标大厂的技术派方案设计,带你了解一个项目从0到1实现的全过程

Java全栈架构师

数据库 微服务 程序人生 后端 架构师

AI日课@20230410:大语言模型是对本质知识的无损压缩

无人之路

ChatGPT

GardenPlanner :花园式和景观设计工具

Rose

Garden Planner 景观设计工具 GardenPlanner注册版 花园设计

活动 | GreatSQL社区亮相2023 DTC 分享开源技术成果实践

GreatSQL

小程序SDK集成到App有哪些好处?

没有用户名丶

devops工具链基建建设评价标准

laofo

DevOps cicd 研发效能 持续交付 工程效率

EventMesh:微众银行开源的新型云原生事件驱动架构实践_开源_薛炜明_InfoQ精选文章