什么是事件驱动架构?
事件驱动架构集成模型能够实时检测重要事件并据此采取行动。
default
{}
default
{}
primary
default
{}
secondary
事件驱动架构的定义与重要性
事件驱动架构是一种软件设计方法,能够帮助企业即时响应任何有意义的状态变化。想象一下,企业能在重要事件发生时立即作出响应,例如客户完成在线购买、传感器发出故障预警、股价下跌或安全警报响起。这些所谓的“事件”变化在各行业、各企业中无时无刻不在发生。而能以多快的速度对这些事件作出响应,就成了决定企业成败的关键。
事件驱动架构 (EDA) 在这方面能够发挥重要作用。事件驱动架构无需等待定时更新,也不依赖紧密连接的僵化系统,而是支持应用通过松散耦合的组件实现异步通信。这意味着系统中的各个组件都可以独立运行,而不必了解其他组件的内部逻辑,这样一来系统就可以更轻松地进行扩展、调整和创新。
因此,依托采用事件驱动架构的现代系统,企业能够交付更加快捷和个性化的体验,实现运营自动化,即使在需求和数据量不断增长的情况下也能保持敏捷性。通过采用事件驱动架构,企业能够从被动应对转变为主动出击,获得必要的速度、灵活性和韧性,从而在不断变化的世界中发展壮大。
什么是事件?
事件是指任何会对业务产生影响的行为或状态变化,例如客户刷信用卡、乘客办理登机手续、用户重置密码,或者仓库更新库存等。换句话说,事件是一条简短的消息,告诉系统“刚刚发生了某件事”,让系统的其他部分立即作出响应。
企业如果能够持续实时捕获事件并即时作出响应,就能成为由事件驱动的企业。一些常见的事件示例包括:
- 支付失败或成功
- 用户登录或登出
- 库存低于阈值
- 货物离开仓库或抵达目的地
- 安全漏洞触发警报
- 忠诚度计划更新积分余额
- 支持团队创建服务请求
- 客户更新收货地址
- 新用户创建账户
- 顾客提交产品评价
- 订阅者续订或取消订阅
事件驱动架构的核心组件
为保持结构一致,事件模式会定义事件的结构和格式,包括事件包含的字段、数据类型和解释规则。
在事件驱动架构中,应用既是事件生产者(生产或捕获事件),也是事件消费者(处理事件并针对事件采取行动)。事件生产者通过事件代理(即面向消息的中间件),将事件实时传递给事件消费者。之后,事件消费者就可以着手处理事件,并触发其他操作、工作流或自身的事件。这种设计使得系统能够在数据不断流入时实时作出响应,并制定更明智的决策。
事件代理负责管理连接生产者和消费者的事件通道,确保以可靠方式传递事件,而且通常会提供事件过滤、持久化和重放等功能。通过将事件生产者和事件消费者解耦,事件代理能够有效提升系统的韧性和可扩展性。
如果事件驱动架构极其简单,只有一个事件生产者和一个事件消费者,两者之间可以直接通信,事件代理就可有可无。但是,大多数企业通常会有多个事件生产者向多个事件消费者发送事件,这时事件代理甚至是事件代理网络(也称“事件网格”)就变得必不可少。利用事件代理或事件网格,企业可以构建一种“松散耦合”的应用架构。
同步通信与异步通信
当事件驱动架构采取 同步通信 方式时,事件生产者会等待接收方处理完毕并作出响应后,再继续执行下一步操作。一个典型的例子是:Web 客户端发送 HTTP 请求,并等待服务器响应。同步通信通常依赖于紧密耦合的架构,在负载较高的情况下速度较慢,并且在收到事件消费者的响应之前,会“阻塞”事件生产者执行下一项任务。
当事件驱动架构采取 异步通信 方式时,事件生产者无需等待接收方即时作出响应,就可以继续执行任务;事件消费者可以稍后处理消息。一个典型的例子是:系统将事件发布到事件代理,然后再由事件消费者独立进行处理。异步通信具有非阻塞、松散耦合和可扩展的特点,因此更适用于实时的分布式系统。
事件驱动架构中的请求驱动模式与事件驱动模式
在 请求驱动模式 中,交互始于事件消费者向服务器发出请求,随后由服务器作出响应。这种模式采用基于拉取的运行逻辑,即消费者在需要数据或服务时主动向服务器发出请求,而不是被动接收自动更新,而且可以采取同步通信和异步通信方式。请求驱动模式常见于传统的 Web 应用和 API 中。
在事件驱动模式中,交互始于某一事件(即触发处理流程的状态变化或行为),各个组件在事件发生时自动作出响应,例如发布或订阅。这种模式采用基于“推送”的运行逻辑,即系统在事件或更新发生时立即将其“推送”给事件消费者,而非等待消费者主动发出请求。事件驱动模式具有异步、解耦的特点,尤其适用于需要实时响应的场景。
简单来说,这两种模式的关键区别在于:在请求驱动模式中,用户在需要数据时主动请求获取数据,而在事件驱动模式中,系统会在事件发生时自动作出响应。
常见的事件驱动架构模式
事件驱动架构 模式 是常见的设计方法,明确了事件驱动系统捕获、处理和消费事件的方式。这些模式提供可重复使用的策略,支持以可扩展、解耦的方式处理通信和状态变化。企业会在系统设计和实施阶段应用事件驱动架构模式来解决常见挑战,包括在异步、松散耦合环境下的事件分发、数据一致性及可扩展性问题。
事件驱动架构有四种主要的事件传输模式:
- 发布/订阅(简称“pub/sub”):在发布/订阅模式下,事件消费者订阅事件生产者发布的消息和通道。事件一经发布,将通过事件代理直接发送给所有订阅者。为避免重复,事件一旦被消费,就无法回放或再次访问,因为事件代理会将其删除。
- 事件流:在事件流模式下,事件生产者会向事件代理发布全部事件流;事件消费者会订阅事件流,并且可以从事件流的任意位置开始读取,只消费与自身相关的事件。在这种模式下,事件即使已经消费也会被事件代理保留。
- 命令查询责任分离 (CQRS):在 CQRS 模式下,应用设计和架构层会将读取和写入操作分离到不同的模型中。命令用于更新状态,而查询用于读取状态。在事件驱动架构中,CQRS 通常与事件协同工作,以异步方式传播变更,从而提高复杂系统的可扩展性和性能。
- 事件溯源:在事件溯源模式下,系统会将每一次状态变化作为事件记录在仅追加日志中,而不是仅存储实体的当前状态。通过重放这些事件,可以重建实体的当前状态。这种模式可以提供完整的审计追踪记录,并支持时间回溯和数据恢复场景。
事件处理方式
事件处理方式描述了系统如何检测和解读事件,并针对事件采取行动。这些方式决定了系统能够理解的 逻辑复杂程度、时间顺序 以及事件之间的关系。总的来说,事件到达消费者端时有三种不同的处理方式:简单事件处理、复杂事件处理以及事件流处理。
1. 简单事件处理:事件消费者在接收到事件后即时对其进行处理。例如:
- 客户下达订单后,系统会立即发送确认邮件并更新库存。
- 发起密码重置请求时,系统会立刻发送一封含安全链接的邮件。
- 支付成功后,系统生成收据并发送给客户。
- 用户登录行为被即时记录,以便进行安全追踪。
2. 复杂事件处理:事件消费者处理一系列事件,检测其中的模式并根据结果采取相应行动。例如:
- 短时间内连续发生多笔大额交易,将触发欺诈警报。
- 温度持续升高且振动加剧,预示设备即将发生故障。
- 几分钟内从不同国家或地区发起登录尝试,将触发安全警告。
- 同一用户屡次放弃购物车商品,将触发定向专属优惠推送。
3. 事件流处理:事件消费者基于数据流平台,实时处理持续的数据流(动态数据),并采取相应行动。例如:
- 股价波动时,系统按预设规则立即执行交易。
- 随着社交媒体热度飙升,实时更新市场舆情仪表盘。
- 根据来自联网车辆的遥测数据,动态调整交通信号灯。
- 利用电商网站的点击流数据,为用户实时推荐产品。
企业可以根据自身需求和应用场景,选择实时的事件处理方式。
事件驱动架构的工作原理
事件驱动架构是一种集成模式,用于在各个分布式系统中实时发布、捕获、处理和响应事件。当某个应用中发生事件时,系统将自动向所有需要知晓该事件的其他应用发送消息,以便这些应用采取相应行动。
下面逐步展示了事件驱动架构的工作原理:
- 事件发生:出现有意义的状态变化,例如客户下达订单、传感器检测到温度激增或支付失败。
- 事件生产者发出事件:发生事件的应用作为事件生产者,将事件发布到事件代理。
- 事件代理路由事件:事件代理充当中介的角色,负责管理事件通道,并将事件传递给所有相关的事件消费者,这有助于确保以可靠、可扩展且解耦的方式进行通信。
- 事件消费者响应事件:订阅事件通道的应用或服务会处理事件并采取相应操作,例如更新库存、发送确认邮件或触发警报。
基于事件的架构具有异步和解耦的特点,这意味着应用之间无需彼此了解,也可实时共享信息并完成任务。事件信息或消息可以自动在应用之间自由流动。因此,事件驱动架构模式的速度和韧性远超传统的请求驱动模式和响应驱动模式。在传统模式下,一个应用必须向另一应用请求所需的特定信息,在得到回复后才能继续下一任务。此外,由于具有解耦的特点,事件驱动架构被广泛视为微服务通信领域的卓越实践。
应用场景与真实案例
事件驱动架构为银行、零售、制造、物流等行业的现代数字化体验提供了有力支撑。通过提供 AI 驱动的自动化、事件智能以及实时响应功能,事件驱动架构能够帮助企业革新 IT 环境,与旧系统解耦,并在多云环境下无缝运营。
以下示例展示了事件驱动架构的实际应用场景。
餐饮业
- 一名大学生通过外卖应用订了一份披萨。该应用获取了他的基本信息(姓名、地址、付款信息和订单),并发布了“披萨订单”事件。
- 披萨店订阅该事件,履行订单,并将自身的“订单已就绪”事件发回外卖服务平台。
- 然后,外卖服务平台会分配一名骑手,设定预计送达时间,并提醒客户披萨正在派送中。
电商
- 一名网购顾客在电商网站输入自己的信用卡信息,网站发布“付款已提交”事件。
- 支付系统订阅该事件,处理付款,并发布自身的“付款已处理”事件(表明付款成功或失败),然后将其发送回网站用户界面。
- 用户界面向客户显示付款状态,并提示后续步骤。
其他事件驱动架构示例包括:
物联网遥测
- 智能工厂流式传输传感器数据,实时检测温度骤升情况,防止设备故障。
- 联网车辆发送遥测数据,以便动态优化交通流量。
- 智能家居设备发布能耗事件,触发节能建议。
分析与事件智能
- 零售商实时分析点击流数据,生成个性化产品推荐。
- 银行通过监控交易模式,提前发现并防范欺诈行为。
- 物流企业利用流式数据预测配送延误情况,并重新规划货运路线。
自动化
- HR 系统自动为新员工配置软件访问权限,包括分配许可证和权限。
- 医疗系统在患者生命体征超过关键阈值时,触发自动警报。
- 云平台根据工作负载事件动态扩展资源。
金融交易
- 支付网关发布“付款已提交”事件,在批准付款前触发欺诈检查。
- 交易平台随股价波动,即时执行买入/卖出指令。
- 银行实时过账存款并更新账户余额。
供应链
- 仓库更新库存水平,并自动触发补货订单。
- 配送服务根据交通状况和天气事件,实时调整司机送货路线。
- 制造商根据实时需求信号调整生产计划。
IT 现代化和旧系统解耦
- 企业通过将业务事件发布到负责关键职能的现代云服务中,减轻大型机的工作负载。
- 企业围绕旧 ERP 系统开放实时事件接口,确保新应用无需接触后端,即可立即作出响应。
- 企业将旧 CRM 系统中的事件镜像复制至现代 SaaS 平台,确保在逐步迁移的过程中两个系统保持同步。
通知
- 公用事业服务提供商在检测到用户所在区域停电时,会立即通知客户,并向他们通报抢修队伍的进展情况。
- 在登机口发生变更时,旅行应用实时向乘客发送提醒,确保他们能够立即调整行程。
- 流媒体服务在用户观看完节目后,为其推送个性化推荐。
- 安全系统在检测到可疑登录活动时发出警报。
事件驱动架构的常见应用场景包括:
- 产品推荐:网购顾客点击某一产品后,系统会基于相似产品生成产品推荐。
- 欺诈检测:零售商筛查全球交易中的欺诈行为,并为信用卡公司标出任何可疑的购买行为。
- 实时客户互动:利用流式用户行为数据,在客户购物过程中触发个性化优惠或动态定价。
- 医疗监测:发布来自联网设备的患者生命体征数据,当指标超过阈值时,即时提醒医护人员。
- 智慧城市运营:根据实时的交通状况和天气事件,管理交通信号灯和公共交通时刻表。
- 网络安全威胁检测:实时识别并响应可疑的网络活动或未经授权的访问尝试。
- 云资源优化:当工作负载激增时,在多云环境中自动扩展计算资源。
事件驱动架构的优势
企业可以将事件驱动架构的优势应用于自身的现代系统。事件驱动架构的主要优势包括:
- 实时响应和智能工作流:事件驱动架构支持系统在事件发生时立即作出响应,实时触发自动化工作流和决策。在大型销售活动或假期等需求高峰期,这项优势尤为关键。企业可以将这种实时响应能力应用于日常运营,全面优化供应链自动化、欺诈检测以及个性化客户互动等各类业务场景。
- 利用异步通信提高速度和效率:事件驱动架构中的应用采用异步通信方式,即事件生产者发布事件消息后,无需等待事件消费者接收。这种非阻塞方法可以提升性能、减少延迟,让系统能够畅通无阻地处理海量事件。
- 通过解耦和松散耦合,提升灵活性和可扩展性:事件驱动架构中的组件之间处于解耦或松散耦合状态,可以独立运行,不受其他组件的运行状态与内部逻辑限制。这有助于轻松更新、测试和部署服务,而且不会影响整个系统的正常运行。在解耦状态下,企业还可按需轻松添加其他事件生产者和消费者,从而随业务需求的增长而无缝扩展。
- 韧性和故障隔离:由于各项服务之间相互解耦,单个组件发生故障不会牵连整个系统。各项服务间的故障相互独立,这使得事件驱动架构比紧密耦合的传统模式更经久耐用,且容错性更高。
- 面向未来的集成能力:凭借松散耦合和异步设计的优势,事件驱动架构成为实现 IT 现代化、旧系统解耦以及多云环境运营的理想选择。企业无需重构核心系统,即可灵活集成 AI 驱动的自动化、事件智能等新技术。
挑战、局限性与卓越实践
尽管事件驱动架构具备明显的优势,但也带来了全新的设计与运维挑战,企业必须提前布局应对。实施事件驱动架构时,企业需要考虑以下挑战、局限性及卓越实践,确保构建可扩展、韧性十足且治理得当的事件驱动系统。
挑战
- 分布式系统的复杂性:在多个环境中管理事件代理网格会带来架构方面的复杂性。设计事件流、确保模式一致性以及处理异步通信,这些都需要周密的规划与专业技术。若缺乏妥善的设计管控,随着事件数量、事件生产者和事件消费者的不断增加,企业可能会面临事件混乱的局面。
- 治理与合规:随着事件在混合环境和多云环境中流动,实施数据隐私、安全和法规合规等治理政策变得颇具挑战。企业需要依托强大的治理框架,防范数据泄露和未授权访问,并持续管控快速扩展的事件架构。
- 调试与可观测性:与传统架构相比,在异步、松散耦合的系统中排查故障问题会更复杂。要想查明发生故障或延迟的根本原因,企业需要依赖先进的监控、追踪以及事件重放功能。当团队排查复杂事件链引发的问题,或解决事件混乱造成的各类问题表象时,这一点尤为明显。
事件网格的作用
事件网格是一种架构能力,能够跨不同超大型云平台以及私有云、混合环境和多云环境连接多个事件代理。事件网格提供一套功能完备的高级事件服务,包括事件流、事件管理和监控、动态消息路由以及细粒度过滤。将事件代理连接为分布式网格后,企业能够:
- 通过集中的事件路由和管理,降低复杂性。
- 利用事件目录、模式约束和监控功能,支持妥善治理。
- 通过事件追踪、重放和高级分析,提高可观测性。
- 在混合环境和多云环境中,提升可扩展性和韧性。
作为现代系统的核心支柱,事件网格是构建可扩展、实时事件驱动架构的基石,既能确保系统的实时响应能力,又能简化集成、减少事件混乱,并增强分布式环境下的故障排查能力。
事件驱动架构的局限性
- 运维成本:事件驱动系统需要借助专门的工具来进行事件管理、模式验证和监控,这可能会增加运维复杂性。
- 技能要求:实施并维护事件网格和事件驱动架构模式,需要具备分布式系统、事件代理和集成平台方面的专业知识。
- 延迟风险:尽管事件驱动架构以实现实时响应为目的,但当事件路由配置不当或事件代理工作负载过高时,仍可能导致延迟问题。
事件驱动架构的卓越实践
- 规范模式和事件契约:使用模式注册表并强制执行模式验证,确保事件生产者和事件消费者之间保持一致。
- 实施严格治理:制定有关事件责任归属、安全性和合规性的明确政策。充分利用工具进行审计和访问控制。
- 提升可观测性:部署监控和追踪解决方案,跟踪事件流、检测异常情况并简化调试流程。
- 采用提升可扩展性和韧性的设计:利用事件网格的动态消息路由和细粒度过滤功能,优化性能并提高容错性。
- 借助 AI 和事件智能实现自动化:引入由 AI 驱动的分析和自动化技术,实时预测问题、优化路由并提升决策能力。
事件驱动架构的特性
从本质上看,事件驱动架构具有一系列关键特性,这些特性使其成为分布式环境、混合环境和多云环境的理想之选。
- 异步通信:这是事件驱动架构的基础特性之一。与传统请求驱动模式中需等待直接响应不同,应用在发布事件后即可继续运行,不会出现延迟。这种非阻塞的方式能够跨分布式系统实现实时交互,即使在高负载情况下也能提升系统响应能力。
- 松散耦合:应用之间无需知晓彼此的可用性、API 结构或内部逻辑,只需通过由事件代理或事件网格路由的事件进行通信。通过确保事件生产者和事件消费者独立运行,团队可在不影响整体系统的前提下添加、更新或替换服务,从而提高灵活性和容错性。
- 独立扩展:由于组件之间处于解耦状态,因此各项服务可以根据需求扩大或缩小规模,而且无需更改上游或下游应用。SAP 强调,独立扩展能力是事件驱动集成的一大核心优势,尤其是在必须高效管理峰值负载和分布式工作负载的混合环境与多云环境中。
这些特性协同作用,使得事件驱动架构成为一种行之有效的方法,能帮助企业构建实时响应、韧性十足、灵活应变且支持扩展的系统。无论是支持微服务、集成云架构,还是打造事件驱动的业务流程应用,事件驱动架构都是企业的不二之选。
常见问题
事件驱动架构与请求驱动架构的主要区别,在于系统进行通信和响应变化的方式。在请求驱动模式中,交互始于事件消费者向服务器发出数据或操作请求,随后服务器作出回应。这种模式通常采用同步的、基于拉取的运行逻辑,前者意味着请求方必须等待直至收到响应(阻塞式),后者则意味着应用仅在主动请求时才会收到更新。
在事件驱动模式中,交互始于事件发生的一刻,也就是业务系统中出现有意义的状态变化时,应用会自动作出响应。事件驱动系统以异步方式运行,事件生产者发布事件后,无需等待事件消费者作出响应。这种基于推送、松散耦合的模式支持应用独立运行,并在分布式环境、混合环境和多云环境中实时处理各种事件。
事件驱动架构的主要组件包括事件生产者、事件消费者、事件代理以及事件通道。这些组件共同构成了一个异步、松散耦合的事件流,能够在分布式环境、混合环境和多云环境中实现实时、可扩展的交互:
- 事件生产者:各种应用,负责生成或捕获事件(如订单更新、付款信息和传感器数据等)并将其发布至事件驱动系统中
- 事件消费者:通过触发工作流、更新数据、发送通知或启动下游流程,订阅、处理并响应事件
- 事件代理:消息传递中间件,负责将事件从生产者路由至消费者,提供可靠的事件传递、过滤、动态路由、持久化和重放等功能
- 事件通道:由事件代理管理的、连接生产者和消费者的通道。生产者将事件发布到通道,消费者订阅与自身相关的通道
事件驱动架构模式是可重复使用的设计方法,用于定义事件驱动系统如何捕获、路由、存储和消费事件。主要的事件驱动架构模式包括:
- 发布/订阅(简称“pub/sub”):生产者将事件发布到事件通道,多个消费者订阅该通道并自动作出响应。
- 事件流:生产者将连续的事件流发布至事件代理,消费者可在事件流中的任何节点读取、重放或处理这些事件。
- 命令查询责任分离 (CQRS):将读取操作和写入操作分离到不同的模型中,以异步方式传播更新。
- 事件溯源:系统将每一次状态变化作为不可变事件存储在仅追加日志中,随后通过重放事件重建当前状态。
使用事件驱动架构的主要优势包括:
- 松散耦合:应用之间独立运行,无需知晓彼此的内部逻辑,便于更新、集成与扩展。
- 可扩展性:可以无缝添加新的事件生产者和事件消费者,并在混合和多云环境下扩展工作负载。
- 韧性:解耦的服务能够隔离故障,这样单个组件发生故障时就不会影响整个系统。
- 速度与实时响应:通过非阻塞式的异步通信,系统可以即时响应业务事件,并以较低的延迟水平处理大量事件。