如何在事件驱动架构中执行逻辑操作?



最近我一直在研究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,但我想避免这种情况,因为我担心数据不同步和不一致。

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

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

微软有一本关于微服务架构的好书。有几章,比如这一章是关于事件的。

最新更新