写点什么

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

2021 年 2 月 02 日

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 年 2 月 02 日 07:001950

评论

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

Nginx安装后要做的第一件事

运维研习社

nginx WEB安全

剑指Java面试:面试官能问到的问题,都被我收集在这份PDF文档里

Java成神之路

Java 程序员 架构 面试 编程语言

软件开发,如何快速有效缩短项目周期

雯雯写代码

软件开发

神经网络攻防:03.使用API修改神经网络参数

P小二

AIPwn AI安全 P小二 神经网络攻防

四面阿里成功斩获offer,在此分享我的复盘经验总结!

Java架构之路

Java 程序员 架构 面试 编程语言

神经网络攻防: 02.攻击模型的输出层

P小二

AIPwn AI安全 P小二 神经网络攻防

牛掰,阿里P8这份笔记不就相当于金三银四中的原子弹吗?已经帮助13位同行拿到了一线大厂的offer!

Java架构师迁哥

思科设备漏洞 CVE-2018-0171 的快速修复

冯骐

Python 运维 安全 网络 交换机

用 Nginx 的 auth_request 模块集成 LDAP 认证

冯骐

Python nginx 运维 ldap 认证

Pgbouncer最佳实践:系列四

PostgreSQLChina

数据库 postgresql 软件 开源社区

2021总结全网最新、最全、最实用Java岗面试真题!已收录GitHub

比伯

Java 编程 架构 面试 程序人生

交换机配置的自动备份与变更告警

冯骐

Python 运维 网络 备份 multissh

炸裂!这份阿里P8大佬手写“Java核心技能精选”惨遭疯抢

Crud的程序员

Java 架构

GitHub上获赞10万star的高并发神级进阶资料,面试官再问高并发问题请你把这篇文章发给他!

Java架构之路

Java 程序员 架构 面试 编程语言

为何每次用完ThreadLocal都要调用remove()?

Java王路飞

Java 程序员 面试 JVM 内存泄漏

《精通比特币》学习笔记(第一章)

棉花糖

区块链 读书笔记

都 2021 年了,也该抛弃 ExpressJS 了

LeanCloud

前端开发 nodejs 框架

区块链产业革命:解决融资租赁之谜

旺链科技

区块链应用 融资租赁

手把手教学,如何使用低代码快速构建应用程序步骤详解!

优秀

低代码

2021年最新京东技术岗现场三面:jvm调优+高并发+算法+网络+数据库+设计模式

Java架构之路

Java 程序员 架构 面试 编程语言

在主动要求涨工资这事上,不要学我!从第一份工资800开始说起

四猿外

涨薪 工资 收入 程序员· 跳槽

云安全和访问管理

龙归科技

云计算 安全 云端 企业安全

阿里P7亲自讲解!如何快速的开发一个完整的直播app,成功入职腾讯

欢喜学安卓

android 程序员 面试 移动开发

史上最全整合第三方登录的开源库

happlyfox

OAuth 2.0 28天写作 3月日更

面试官:如何用SpringCloud从零设计一个大型电商平台?

Java架构追梦

Java 架构 面试 微服务 SpringCloud

Serverless 极致弹性解构在线游戏行业痛点

阿里巴巴云原生

Serverless 微服务 开发者 云原生 消息中间件

一个即将从《蚂蚁金服》离职的Java工程师个人经历与总结

Java成神之路

Java 程序员 架构 面试 编程语言

阿里P7亲自讲解!驱动核心源码详解和Binder超系统学习资源,跳槽薪资翻倍

欢喜学安卓

android 程序员 面试 移动开发

阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)

周老师

Java 编程 程序员 架构 面试

迄今为止最好用的Flink SQL教程:Flink SQL Cookbook on Zeppelin

Apache Flink

flink

小目标!2021年薪资要个40k,我肝了200个Java面试题给大家!

Java成神之路

Java 程序员 架构 面试 编程语言

海量并发场景下的缓存架构设计

海量并发场景下的缓存架构设计

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