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

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

01 什么是事件驱动架构

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

解耦

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

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

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

可追溯与审计

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

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

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

02 EventMesh 是什么

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

03 为什么需要 EventMesh

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

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

04 微众银行 EventMesh 整体架构

EventMesh 目前整体的架构如图所示,通过以事件驱动为核心的体系结构,实现了应用程序与中间件层的解耦分离。同时,目前 EventMesh 分别提供了 HTTP API 与 TCP API 更加方便多语言客户端的接入代理。

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

EventMeshRuntime 大大简化了客户端的逻辑,自身提供了事件的发布\订阅、治理、传输加密、事件路由、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 Panel

App与 EventMesh 的事件信息交互处于 Data Panel 中,从该模型可以看出EventMesh

充分地将事件生产者与消费者进行了解耦,任何事件生产者都不需要知道它们的事件消费者。类似地,当任何事件消费者使用消息时,它们只需要订阅事件流。事件的生产者与消费者均可以弹性地扩缩容而互无影响。

Control Panel

Control Panel 中分为治理模块、注册模块、安全模块、指标模块、追踪定位模块,这些模块都将采用业界通用、优秀的解决方案与 EventMesh

进行对接,进而丰富 EventMesh 的生态环境。例如:注册模块可对接 Nacos、指标模块可对接Prometheus、追踪定位模块可对接

SkyWalking 等。

Store Panel

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

05 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 对客户端支持组级别代理。

06 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

支持通过配置方法名与参数,动态路由函数式接口。

07 写在最后

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

项目地址:

https://github.com/WeBankFinTech/EventMesh

https://gitee.com/webank/EventMesh

https://github.com/WeBankFinTech/DeFiBus

https://gitee.com/webank/DeFiBus

诚邀关注云计算的你一同参与到 EventMesh 中,我们欢迎任何形式的贡献,有各种建议或意见可在 GitHub/ gitee中提 issue(readme中有项目社区群联络方式)。如果觉得好,请不吝 star,我们需要你的支持与鼓励!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容