【问题标题】:How to perform logical operations in an Event Driven Architecture?如何在事件驱动架构中执行逻辑操作?
【发布时间】:2021-12-06 02:10:00
【问题描述】:

最近我一直在研究用于 Kafka 的事件驱动架构。

由于使用常规微服务并通过诸如 RPC 之类的方式直接在它们之间进行通信,我很难理解如何通过事件驱动系统执行相同类型的操作。

我想通过一个示例来了解与拥有usersproducts 微服务的事件驱动相比,如何在编排系统中完成操作。

示例:一个电子商务商店,其中用户可以在免费计划中拥有 10 种产品,否则在付费计划中可以拥有无​​限产品。

如何在常规的编排服务中完成:

const users = // grpc connection to external users microservice

function createProduct(userId, newProduct) {
  let productsCount = await query("SELECT COUNT(*) FROM products WHERE user_id = " + userId);
  let userIsPaid = await users.getUserIsPaid(userId);

  if productsCount >= 10 && !userIsPaid {
    // Error: cannot make new product because user is on free plan
    return;
  }

  // Go ahead and insert the new product
}

如何在事件驱动系统中完成此逻辑?

我知道产品微服务可以选择存储所需数据的副本,例如 user_plan,但我想避免这种情况,因为我担心数据不同步和不一致.

【问题讨论】:

    标签: microservices event-driven


    【解决方案1】:

    即使您的系统使用集成事件,此特定示例也将完全相同。消息/事件用于通知其他服务发生了重要事件。

    在这个示例中,您只想读取数据并基于它执行一些业务逻辑。您可以从本地数据库或远程服务读取数据,这是设计选择,两种选择各有利弊。消息/事件不用于读取数据。

    微软有一本关于微服务架构的好书。有几个章节,比如this one关于事件。

    【讨论】:

    • 感谢您的信息!非常有帮助。我最近一直在研究协调的 Sagas 作为一种解决方案,这可能就是我正在寻找的。​​span>
    猜你喜欢
    • 2011-01-04
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2020-08-08
    • 2023-03-31
    • 1970-01-01
    • 2011-06-17
    • 2010-10-24
    相关资源
    最近更新 更多