写点什么

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:006013

评论

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

DR4019S|IPQ4019 IPQ4029 11AC SOM WIFI5

wallyslilly

IPQ4019

知识图谱算法有哪些

悦数图数据库

测试开发名企定向训练营即将启动,限时优惠火热进行中!

霍格沃兹测试开发学社

腾讯会议天籁实验室两项研究成果获深圳人工智能奖

Geek_2d6073

开放签:引领中小微企业步入电子签章普惠时代

开放签开源电子签章

电子合同 电子签章 开放签

聊天局:10年资深前端聊点行业现状

高端章鱼哥

测试开发名企定向培训训练营即将开营,限时优惠进行中,手把手带你快速提升核心竞争力

测吧(北京)科技有限公司

测试

量化合约/合约量化系统开发运营版/成熟技术/源码案例

系统开发咨询1357O98O718

《2023网信自主创新调研报告》正式发布,云起无垠连年参编

云起无垠

AI手机,走入小径分岔的花园

脑极体

AI

国产 Web 组态软件 TopStack V5.0 发布

图扑物联

工业物联网 web组态 轻量化 组态编辑器 工业组态软件

世界知识产权日:XSKY 以更多架构核心专利,推进 SDS 产业创新创造

XSKY星辰天合

星辰天合 世界知识产权日

预见预判|AIRIOT智慧交通管理解决方案

AIRIOT

智慧城市交通 智能交通 智慧交通系统

如何制作个性又美观的二维码?自定义Logo、样式,还能一键复用

草料二维码

二维码 二维码生成 草料二维码 二维码美化

游戏发行困境及OgGame云游戏解决方案简述

Ogcloud

游戏 云游戏 云游戏发行 云游戏平台 游戏云化

金融案例:统一查询方案助力数据治理与分析应用更高效、更安全

袋鼠云数栈

大数据 数据分析 数字化转型 金融 金融解决方案

亚马逊AI选择各种商品的最佳包装方式,节省大量包装材料

算AI

人工智能 深度学习 AI

初级Go工程师训练营毕业总结

想吃烤肉!

总结 心得体会

马斯克的 xAI 融资 60 亿美元;英伟达收购两家 AI 创企丨 RTE 开发者日报 Vol.193

声网

深入大模型的世界

我是谁

ISO 专家解读 | 什么是 GQL 国际标准图查询语言

悦数图数据库

图数据库

什么是IPD项目管理模式?聊聊IPD下的产品研发流程

IPD产品研发管理

产品 项目管理 IPD 产品研发

实战干货|Spark 在袋鼠云数栈的深度探索与实践

袋鼠云数栈

spark Spark 源码 spark SQL 离线开发 大数据计算引擎

怎么用云手机来做TikTok矩阵养号?

Ogcloud

云手机 海外云手机 tiktok云手机 云手机海外版 tiktok运营

鸟瞰图技术重塑大屏视觉体验:点量云流创新应用

点量实时云渲染

云渲染 虚拟现实 实时云渲染 大屏展示 鸟瞰图

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