事件驱动的微服务 - 简介

事件驱动的微服务 (EDM) 是使用事件进行交互的微服务。事件表示系统状态的变化,例如处理交易、下订单、完成付款等。

事件驱动的微服务创建一个松散耦合的系统,其中服务不依赖于直接通信,而是仅在这些事件发生时才响应事件。我们在需要实时处理的大规模分布式环境中使用 EDM 系统。

事件驱动的微服务的特征

事件驱动的微服务 (EDM) 的一些重要特征如下所列 −

  • 异步通信 − 服务在 EDM 系统中异步通信。我们不会等待响应,而是在事件发生时对事件做出反应。它提高了系统的效率和性能。
  • 松散耦合 − EDM 服务是解耦的,并通过事件进行通信。这些服务中的每一个都可以独立运行。它降低了级联故障的风险。
  • 可扩展性 − 我们可以根据需求独立扩展 EDM 中的服务。
  • 实时处理 − 我们可以实时使用 EDM 系统,因为 EDM 会在事件发生时处理这些事件。我们在应用程序中使用 EDM 进行即时反应。例如:支付处理、交易系统和实时监控。
  • 事件驱动的工作流 − EDM 使用事件生成服务,而不是直接调用这些服务。因此,服务仅在事件发生时才起作用。

事件驱动微服务的架构

事件驱动微服务的架构中有一些重要术语,例如事件生产者、事件代理、事件消费者和消息队列。这些将在下面解释 −

  • 事件生产者 − 它生成事件。当发生操作时,例如客户下订单和正在处理付款。然后,事件生产者将事件发送到事件代理以进行进一步处理。
  • 事件路由器 − 它在生产者和消费者之间路由事件。Apache Kafka、RabbitMQ 和 AWS EventBridge 等工具充当代理。事件被传递给正确的消费者。
  • 事件消费者 − 它由对事件做出反应的服务组成。这些服务会监听事件并根据事件数据执行操作,例如更新数据库、通知用户和处理付款。
  • 消息队列 − 需要消息队列来发送交付。如果服务不可用,则消息队列会将交付发送给消费者。这些队列平衡负载并管理事件流量。

EDM 中的事件类型

EDM 系统中有两种类型的事件 −

  • 领域事件 − 这些是业务级事件。它们代表状态的变化,例如下订单、付款完成、用户注册等。
  • 集成事件 − 这些事件用于微服务之间的通信。因此,不同的服务可以同步数据并触发整个系统的操作。例如,当下订单时,这些事件会通知运输服务准备交货。

EDM 事件工作流

当事件发生时,例如,事件生产者会生成新的交易。事件代理将其分发给其事件消费者。这些消费者根据其功能处理事件。这是 EDM 系统中的事件工作流 −

  • 事件生成 − 客户在电子商务平台下订单。订单事件由生产者生成。
  • 事件路由 − 事件代理将订单事件路由到多个服务(消费者),如库存管理、支付处理和通知服务。
  • 事件处理 − 每个服务处理事件。库存管理更新库存。支付服务处理付款。通知服务发送确认电子邮件。
  • 实时响应 −系统实时更新所有服务,无需等待任何单个服务完成其任务。

事件驱动微服务的优点和缺点

事件驱动微服务 (EDM) 有各种优点和缺点,其中一些优点和缺点如下 −

事件驱动微服务的优点

以下是使用事件驱动微服务的优点 −

  • 实时处理 − 服务仅在 EDM 中发生事件时做出反应。我们将 EDM 用于实时应用程序。
  • 可扩展性 − 我们可以扩展每个微服务;它根据需求优化资源使用。
  • 松散耦合 −服务是独立的。它降低了级联故障的风险。我们还可以更新任何这些服务。
  • 效率 − 由于系统松散耦合,服务不需要等待响应。它提高了系统性能。

事件驱动微服务的缺点

以下是使用事件驱动微服务的缺点 −

  • 复杂性 − 我们需要管理许多独立的服务。这会增加系统复杂性。
  • 数据一致性 − 我们需要在异步架构中保持跨服务的数据一致性。但这可能很有挑战性。
  • 安全性 −我们需要确保服务之间的通信安全,以防止未经授权的访问。

事件驱动架构与微服务架构

下表重点介绍了事件驱动架构与微服务架构的区别 −

方面 事件驱动架构 微服务架构
通信模式 通过事件异步 通过 API 同步,但可以包含事件
耦合 它是松散耦合的组件 它具有独立的服务,但可能具有相互依赖性
数据管理 它使用事件源和复杂的数据管理 每个服务都有自己的数据库,因此可以促进自主性
可扩展性 它可以很好地与事件流一起扩展,因此可以有效处理峰值 服务可以根据需求独立扩展
开发灵活性 组件可以独立发展而无需进行重大更改 团队可以为不同的服务使用不同的技术堆栈
实时处理 它有利于实时数据处理 它可以支持实时功能,但通常不是主要关注点
复杂性 它可能在事件管理中具有复杂性 复杂性源于管理多个服务和依赖项
用例 实时分析、物联网、事件驱动应用程序 电子商务、银行、内容管理系统 (CMS)
故障管理 一个组件的故障不会直接影响其他组件 独立故障可能需要仔细管理才能避免级联问题

结论

事件驱动的微服务架构是一种可扩展且实时的解决方案,适用于需要对不断变化的条件做出即时反应的现代应用程序。其松散耦合和异步通信使其非常适合大型分布式系统。虽然 EDM 在事件处理和数据一致性方面有一些复杂性,但其实时处理和服务独立性等优势超过了这些挑战。