本文介绍事件驱动架构EDA(Event Driven Architecture)的概念、优势、架构图和使用场景。

什么是事件驱动架构

事件驱动架构使用事件触发服务并在应用之间进行通信,普遍用于构建微服务应用程序。事件是状态的变更或更新,就像将商品放在电子商务网站的购物车里。事件可以携带状态,也可以是标识符。

事件驱动架构体系结构中有三个关键组件:事件生产者,事件路由器和事件消费者。生产者发布事件到路由器,路由器过滤并将事件推送给消费者。生产者服务和消费者服务是分离的,允许独立伸缩、更新和独立部署。

优势

事件驱动架构有以下优势:

  • 独立扩展

    通过降低生产者和消费者的耦合性,他们只需要关注路由器。这意味着每个服务是独立操作的,如果一个服务出现故障,不会影响其他服务正常运行。事件路由器充当一个弹性缓存区,可以容纳工作负载的激增。

  • 开发和敏捷性

    开发者不再需要自己编写自定义代码去轮询、过滤和路由事件,事件路由器会自动过滤事件并将事件推送给消费者。事件路由器还降低生产者和消费者之间的耦合,加速开发过程。

  • 易于审计

    事件路由器充当应用程序和定义策略的集中位置。这些策略可以约束谁可以发布和订阅路由器,并控制哪些用户和资源有权限访问您的数据。您还可以加密传输中和静止时的事件。

  • 节约成本

    事件驱动架构是基于Push模型,因此当事件从生产者推送到路由器时,会按需推送到消费端。这样,您就不需要检查事件的连续轮询额外付费。与此同时,事件投递的过程会占用更少的网络带宽、更少的CPU使用率、更少的空闲集群容量和更少的SSL/TLS握手次数。

架构图

下面是一个电子商务网站的事件驱动架构示例。这种体系结构使站点能够在需求高峰期间对来自各种来源的更改作出反应,而不会导致应用程序崩溃或资源供应过剩。

eda架构

使用场景

事件驱动架构有以下使用场景:

  • 跨账号、跨地域的数据复制

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

  • 资源状态监控和告警

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

  • 扇出和并行处理

    如果您有很多系统需要对事件进行响应,您可以使用事件驱动架构将事件扇出,而不需要自定义代码将事件推送到每个消费者。路由器会将事件推送给系统,每个系统都可以在不同的目标端中并行处理事件。

  • 异构系统集成

    如果系统运行在不同的资源栈,您可以使用事件驱动架构在这些无需耦合的资源栈之间共享信息。事件路由器在系统之间建立了间接性和互操作性,因此他们可以在不知晓对方业务的情况下交换消息和数据。