什么是事件驱动型架构?

通过运行响应事件的解耦系统

事件驱动型架构使用事件进行触发和在解耦的服务之间进行通信,常用于使用微服务构建的现代化应用程序中。事件指的是状态的改变或更新,例如在电子商务网站上的购物车中放置一个商品。事件可以包含状态(购买的商品、其价格和收货地址),也可以是标识符(订单已发货的通知)。

事件驱动型架构有三个主要组成部分:事件生成器、事件路由器和事件使用者。 生成器将事件发布至路由器,由路由器对事件进行筛选并推送给使用者。生成器服务和使用者服务将会解耦,从而使它们能够独立扩展、更新和部署。

事件驱动型架构解析视频 (1:11)

要进行更深入地了解,请查看我们关于如何使用 Amazon EventBridge 构建解耦的事件驱动型架构的 AWS 在线技术讲座系列。了解关于事件驱动型架构的基本知识并开始使用 Amazon EventBridge,包括创建事件总线、设置 SaaS 事件源等等。

事件驱动型架构的优点

实现扩展和故障的独立性

通过解耦您的服务,它们只会感知到事件路由器,而不会相互感知。也就是说,您的服务是可互操作的,即使一项服务发生故障,其他的将会继续运行。事件路由器充当弹性缓存,它可以适应工作负载的突增。

敏捷开发

您无需再编写自定义代码来轮询、筛选和路由事件;事件路由器将自动筛选并将事件推送给使用者。该路由器还将消除在生产者和使用者服务之间进行繁重协调的必要性,加快您的开发流程。

轻松审核

事件路由器是审核您的应用程序与定义策略的中央位置。这些策略可以限制谁能够发布与订阅到您的路由器,并控制哪些用户和资源有权限访问您的数据。您还可以对您的事件进行动态和静态加密。

削减成本

事件驱动型架构是基于推送的,因此一切都在事件本身出现在路由器中时按需发生。如此一来,您不用为持续轮询以检查事件付费。这意味着更少网络带宽消耗、更低 CPU 利用率、更少闲置实例集容量,以及更少 SSL/TLS 握手。

工作原理:架构示例

这是适用于电商网站的事件驱动型架构示例。此架构使网站能够对需求峰值期间的各种来源变动做出反应,而不会导致应用程序崩溃或过度预置资源。

什么时候使用这个架构

跨账户、跨区域数据复制

您可以使用事件驱动型架构,在跨不同区域和账户进行操作与部署的团队之间协调系统。通过使用事件路由器在系统之间传输数据,您可以独立于其他团队开发、扩展和部署服务。

资源状态监控和警报

您可以利用事件驱动型架构来监控与接收有关任何异常、变动和更新的警报,而不用持续检查您的资源。这些资源可能包括存储桶、数据库表、无服务器函数、计算节点等等。

扇出与并行处理

如果您需要操作大量系统以响应事件,则可以使用事件驱动型架构对事件进行扇出,而不必编写自定义代码来推送到每个使用者。路由器会将事件推送到系统,每个系统可出于不同目的并行处理这些事件。

异构系统集成

如果您的系统在不同堆栈上运行,可以使用事件驱动型架构在它们之间共享信息,而无需耦合。事件路由器会在系统之间建立间接性和互操作性,因此它们可以在保持独立性的同时交换消息和数据。


您应该使用事件驱动型架构吗?

事件驱动型架构是快速提高敏捷性与进行移动的理想选择。它们常见于使用微服务的现代应用程序,或者有解耦组件的任何应用程序。在采用事件驱动型架构时,您可能需要重新思考如何查看您的应用程序设计。为取得成功,请考虑以下事项:

• 事件源的持久性。如需处理每个事件,您的事件源应可靠并能保证交付。 

• 您的性能控制要求。您的应用程序应能处理事件路由器的异步性质。 

• 您的事件流跟踪。由事件驱动型架构引入的间接性允许通过监控服务来实现动态跟踪,而不是通过代码分析进行静态跟踪。 

• 您的事件源中的数据。如果您需要重新构建状态,应该对您的事件源进行去重和排序。

下载 AWS 事件驱动的架构指南 »

从何处开始

用于事件驱动型架构的路由器分为两种主要类型:事件总线和事件主题。在 AWS,我们提供 Amazon EventBridge 来构建事件总线,以及 Amazon Simple Notification Service(SNS)来构建事件主题。

如果您想要构建的应用程序需要对来自 SaaS 应用程序、AWS 服务或自定义应用程序的事件做出反应,建议您使用 Amazon EventBridge。EventBridge 使用预定义的事件架构,并允许您创建应用于整个事件主体的规则,以便在推送给使用者之前进行筛选。

如果您想要构建的应用程序需要对其他应用程序、微服务或 AWS 服务发布的高吞吐量或低延迟事件做出反应,或者应用程序需要非常高的扇出(数千甚至数百万个端点),建议您使用 Amazon SNS。SNS 主题独立于通过的事件架构。

注册免费账户

立即享受 AWS 免费套餐。 

注册