flex-height
text-black

一个人在网上购物

什么是事件驱动架构?

事件驱动架构集成模型能够实时检测重要事件并据此采取行动。

default

{}

default

{}

primary

default

{}

secondary

事件驱动架构的定义与重要性

事件驱动架构是一种软件设计方法,能够帮助企业即时响应任何有意义的状态变化。想象一下,企业能在重要事件发生时立即作出响应,例如客户完成在线购买、传感器发出故障预警、股价下跌或安全警报响起。这些所谓的“事件”变化在各行业、各企业中无时无刻不在发生。而能以多快的速度对这些事件作出响应,就成了决定企业成败的关键。

事件驱动架构 (EDA) 在这方面能够发挥重要作用。事件驱动架构无需等待定时更新,也不依赖紧密连接的僵化系统,而是支持应用通过松散耦合的组件实现异步通信。这意味着系统中的各个组件都可以独立运行,而不必了解其他组件的内部逻辑,这样一来系统就可以更轻松地进行扩展、调整和创新。

因此,依托采用事件驱动架构的现代系统,企业能够交付更加快捷和个性化的体验,实现运营自动化,即使在需求和数据量不断增长的情况下也能保持敏捷性。通过采用事件驱动架构,企业能够从被动应对转变为主动出击,获得必要的速度、灵活性和韧性,从而在不断变化的世界中发展壮大。

什么是事件?

事件是指任何会对业务产生影响的行为或状态变化,例如客户刷信用卡、乘客办理登机手续、用户重置密码,或者仓库更新库存等。换句话说,事件是一条简短的消息,告诉系统“刚刚发生了某件事”,让系统的其他部分立即作出响应。

企业如果能够持续实时捕获事件并即时作出响应,就能成为由事件驱动的企业。一些常见的事件示例包括:

事件驱动架构的核心组件

为保持结构一致,事件模式会定义事件的结构和格式,包括事件包含的字段、数据类型和解释规则。

在事件驱动架构中,应用既是事件生产者(生产或捕获事件),也是事件消费者(处理事件并针对事件采取行动)。事件生产者通过事件代理(即面向消息的中间件),将事件实时传递给事件消费者。之后,事件消费者就可以着手处理事件,并触发其他操作、工作流或自身的事件。这种设计使得系统能够在数据不断流入时实时作出响应,并制定更明智的决策。

事件代理负责管理连接生产者和消费者的事件通道,确保以可靠方式传递事件,而且通常会提供事件过滤、持久化和重放等功能。通过将事件生产者和事件消费者解耦,事件代理能够有效提升系统的韧性和可扩展性。

如果事件驱动架构极其简单,只有一个事件生产者和一个事件消费者,两者之间可以直接通信,事件代理就可有可无。但是,大多数企业通常会有多个事件生产者向多个事件消费者发送事件,这时事件代理甚至是事件代理网络(也称“事件网格”)就变得必不可少。利用事件代理或事件网格,企业可以构建一种“松散耦合”的应用架构。

同步通信与异步通信

当事件驱动架构采取 同步通信 方式时,事件生产者会等待接收方处理完毕并作出响应后,再继续执行下一步操作。一个典型的例子是:Web 客户端发送 HTTP 请求,并等待服务器响应。同步通信通常依赖于紧密耦合的架构,在负载较高的情况下速度较慢,并且在收到事件消费者的响应之前,会“阻塞”事件生产者执行下一项任务。

当事件驱动架构采取 异步通信 方式时,事件生产者无需等待接收方即时作出响应,就可以继续执行任务;事件消费者可以稍后处理消息。一个典型的例子是:系统将事件发布到事件代理,然后再由事件消费者独立进行处理。异步通信具有非阻塞、松散耦合和可扩展的特点,因此更适用于实时的分布式系统。

事件驱动架构中的请求驱动模式与事件驱动模式

请求驱动模式 中,交互始于事件消费者向服务器发出请求,随后由服务器作出响应。这种模式采用基于拉取的运行逻辑,即消费者在需要数据或服务时主动向服务器发出请求,而不是被动接收自动更新,而且可以采取同步通信和异步通信方式。请求驱动模式常见于传统的 Web 应用和 API 中。

在事件驱动模式中,交互始于某一事件(即触发处理流程的状态变化或行为),各个组件在事件发生时自动作出响应,例如发布或订阅。这种模式采用基于“推送”的运行逻辑,即系统在事件或更新发生时立即将其“推送”给事件消费者,而非等待消费者主动发出请求。事件驱动模式具有异步、解耦的特点,尤其适用于需要实时响应的场景。

简单来说,这两种模式的关键区别在于:在请求驱动模式中,用户在需要数据时主动请求获取数据,而在事件驱动模式中,系统会在事件发生时自动作出响应。

常见的事件驱动架构模式

事件驱动架构 模式 是常见的设计方法,明确了事件驱动系统捕获、处理和消费事件的方式。这些模式提供可重复使用的策略,支持以可扩展、解耦的方式处理通信和状态变化。企业会在系统设计和实施阶段应用事件驱动架构模式来解决常见挑战,包括在异步、松散耦合环境下的事件分发、数据一致性及可扩展性问题。

事件驱动架构有四种主要的事件传输模式:

事件处理方式

事件处理方式描述了系统如何检测和解读事件,并针对事件采取行动。这些方式决定了系统能够理解的 逻辑复杂程度、时间顺序 以及事件之间的关系。总的来说,事件到达消费者端时有三种不同的处理方式:简单事件处理、复杂事件处理以及事件流处理。

1. 简单事件处理:事件消费者在接收到事件后即时对其进行处理。例如:

2. 复杂事件处理:事件消费者处理一系列事件,检测其中的模式并根据结果采取相应行动。例如:

3. 事件流处理:事件消费者基于数据流平台,实时处理持续的数据流(动态数据),并采取相应行动。例如:

企业可以根据自身需求和应用场景,选择实时的事件处理方式。

事件驱动架构的工作原理

事件驱动架构是一种集成模式,用于在各个分布式系统中实时发布、捕获、处理和响应事件。当某个应用中发生事件时,系统将自动向所有需要知晓该事件的其他应用发送消息,以便这些应用采取相应行动。

下面逐步展示了事件驱动架构的工作原理:

  1. 事件发生:出现有意义的状态变化,例如客户下达订单、传感器检测到温度激增或支付失败。
  2. 事件生产者发出事件:发生事件的应用作为事件生产者,将事件发布到事件代理。
  3. 事件代理路由事件:事件代理充当中介的角色,负责管理事件通道,并将事件传递给所有相关的事件消费者,这有助于确保以可靠、可扩展且解耦的方式进行通信。
  4. 事件消费者响应事件:订阅事件通道的应用或服务会处理事件并采取相应操作,例如更新库存、发送确认邮件或触发警报。

基于事件的架构具有异步和解耦的特点,这意味着应用之间无需彼此了解,也可实时共享信息并完成任务。事件信息或消息可以自动在应用之间自由流动。因此,事件驱动架构模式的速度和韧性远超传统的请求驱动模式和响应驱动模式。在传统模式下,一个应用必须向另一应用请求所需的特定信息,在得到回复后才能继续下一任务。此外,由于具有解耦的特点,事件驱动架构被广泛视为微服务通信领域的卓越实践。

应用场景与真实案例

事件驱动架构为银行、零售、制造、物流等行业的现代数字化体验提供了有力支撑。通过提供 AI 驱动的自动化、事件智能以及实时响应功能,事件驱动架构能够帮助企业革新 IT 环境,与旧系统解耦,并在多云环境下无缝运营

以下示例展示了事件驱动架构的实际应用场景。

餐饮业

  1. 一名大学生通过外卖应用订了一份披萨。该应用获取了他的基本信息(姓名、地址、付款信息和订单),并发布了“披萨订单”事件。
  2. 披萨店订阅该事件,履行订单,并将自身的“订单已就绪”事件发回外卖服务平台。
  3. 然后,外卖服务平台会分配一名骑手,设定预计送达时间,并提醒客户披萨正在派送中。

电商

  1. 一名网购顾客在电商网站输入自己的信用卡信息,网站发布“付款已提交”事件。
  2. 支付系统订阅该事件,处理付款,并发布自身的“付款已处理”事件(表明付款成功或失败),然后将其发送回网站用户界面。
  3. 用户界面向客户显示付款状态,并提示后续步骤。

其他事件驱动架构示例包括:

物联网遥测

分析与事件智能

自动化

金融交易

供应链

IT 现代化和旧系统解耦

通知

事件驱动架构的常见应用场景包括:

事件驱动架构的优势

企业可以将事件驱动架构的优势应用于自身的现代系统。事件驱动架构的主要优势包括:

  1. 实时响应和智能工作流:事件驱动架构支持系统在事件发生时立即作出响应,实时触发自动化工作流和决策。在大型销售活动或假期等需求高峰期,这项优势尤为关键。企业可以将这种实时响应能力应用于日常运营,全面优化供应链自动化、欺诈检测以及个性化客户互动等各类业务场景。
  2. 利用异步通信提高速度和效率:事件驱动架构中的应用采用异步通信方式,即事件生产者发布事件消息后,无需等待事件消费者接收。这种非阻塞方法可以提升性能、减少延迟,让系统能够畅通无阻地处理海量事件。
  3. 通过解耦和松散耦合,提升灵活性和可扩展性:事件驱动架构中的组件之间处于解耦或松散耦合状态,可以独立运行,不受其他组件的运行状态与内部逻辑限制。这有助于轻松更新、测试和部署服务,而且不会影响整个系统的正常运行。在解耦状态下,企业还可按需轻松添加其他事件生产者和消费者,从而随业务需求的增长而无缝扩展。
  4. 韧性和故障隔离:由于各项服务之间相互解耦,单个组件发生故障不会牵连整个系统。各项服务间的故障相互独立,这使得事件驱动架构比紧密耦合的传统模式更经久耐用,且容错性更高。
  5. 面向未来的集成能力:凭借松散耦合和异步设计的优势,事件驱动架构成为实现 IT 现代化、旧系统解耦以及多云环境运营的理想选择。企业无需重构核心系统,即可灵活集成 AI 驱动的自动化、事件智能等新技术。

挑战、局限性与卓越实践

尽管事件驱动架构具备明显的优势,但也带来了全新的设计与运维挑战,企业必须提前布局应对。实施事件驱动架构时,企业需要考虑以下挑战、局限性及卓越实践,确保构建可扩展、韧性十足且治理得当的事件驱动系统。

挑战

事件网格的作用

事件网格是一种架构能力,能够跨不同超大型云平台以及私有云、混合环境和多云环境连接多个事件代理。事件网格提供一套功能完备的高级事件服务,包括事件流、事件管理和监控、动态消息路由以及细粒度过滤。将事件代理连接为分布式网格后,企业能够:

作为现代系统的核心支柱,事件网格是构建可扩展、实时事件驱动架构的基石,既能确保系统的实时响应能力,又能简化集成、减少事件混乱,并增强分布式环境下的故障排查能力。

事件驱动架构的局限性

事件驱动架构的卓越实践

事件驱动架构的特性

从本质上看,事件驱动架构具有一系列关键特性,这些特性使其成为分布式环境、混合环境和多云环境的理想之选。

这些特性协同作用,使得事件驱动架构成为一种行之有效的方法,能帮助企业构建实时响应、韧性十足、灵活应变且支持扩展的系统。无论是支持微服务、集成云架构,还是打造事件驱动的业务流程应用,事件驱动架构都是企业的不二之选。

常见问题

事件驱动架构中的事件是什么?
在事件驱动架构中,事件是指业务流程或系统状态发生的有意义的变化,例如实体的创建、更新或完成。事件是应用在重要情况发生时发出的信号,这样其他系统不必紧密耦合就能实时收到通知并作出响应。事件的示例包括:客户付款成功或失败、货物抵达或离开仓库,以及机器传感器检测到温度骤升。
事件驱动架构与请求驱动架构有何区别?

事件驱动架构与请求驱动架构的主要区别,在于系统进行通信和响应变化的方式。在请求驱动模式中,交互始于事件消费者向服务器发出数据或操作请求,随后服务器作出回应。这种模式通常采用同步的、基于拉取的运行逻辑,前者意味着请求方必须等待直至收到响应(阻塞式),后者则意味着应用仅在主动请求时才会收到更新。

在事件驱动模式中,交互始于事件发生的一刻,也就是业务系统中出现有意义的状态变化时,应用会自动作出响应。事件驱动系统以异步方式运行,事件生产者发布事件后,无需等待事件消费者作出响应。这种基于推送、松散耦合的模式支持应用独立运行,并在分布式环境、混合环境和多云环境中实时处理各种事件。

事件驱动架构的主要组件有哪些?

事件驱动架构的主要组件包括事件生产者、事件消费者、事件代理以及事件通道。这些组件共同构成了一个异步、松散耦合的事件流,能够在分布式环境、混合环境和多云环境中实现实时、可扩展的交互:

  • 事件生产者:各种应用,负责生成或捕获事件(如订单更新、付款信息和传感器数据等)并将其发布至事件驱动系统中
  • 事件消费者:通过触发工作流、更新数据、发送通知或启动下游流程,订阅、处理并响应事件
  • 事件代理:消息传递中间件,负责将事件从生产者路由至消费者,提供可靠的事件传递、过滤、动态路由、持久化和重放等功能
  • 事件通道:由事件代理管理的、连接生产者和消费者的通道。生产者将事件发布到通道,消费者订阅与自身相关的通道
常见的事件驱动架构模式有哪些?

事件驱动架构模式是可重复使用的设计方法,用于定义事件驱动系统如何捕获、路由、存储和消费事件。主要的事件驱动架构模式包括:

  • 发布/订阅(简称“pub/sub”):生产者将事件发布到事件通道,多个消费者订阅该通道并自动作出响应。
  • 事件流:生产者将连续的事件流发布至事件代理,消费者可在事件流中的任何节点读取、重放或处理这些事件。
  • 命令查询责任分离 (CQRS):将读取操作和写入操作分离到不同的模型中,以异步方式传播更新。
  • 事件溯源:系统将每一次状态变化作为不可变事件存储在仅追加日志中,随后通过重放事件重建当前状态。
事件驱动架构的优势有哪些?

使用事件驱动架构的主要优势包括:

  • 松散耦合:应用之间独立运行,无需知晓彼此的内部逻辑,便于更新、集成与扩展。
  • 可扩展性:可以无缝添加新的事件生产者和事件消费者,并在混合和多云环境下扩展工作负载。
  • 韧性:解耦的服务能够隔离故障,这样单个组件发生故障时就不会影响整个系统。
  • 速度与实时响应:通过非阻塞式的异步通信,系统可以即时响应业务事件,并以较低的延迟水平处理大量事件。