【发布时间】:2021-12-06 02:10:00
【问题描述】:
最近我一直在研究用于 Kafka 的事件驱动架构。
由于使用常规微服务并通过诸如 RPC 之类的方式直接在它们之间进行通信,我很难理解如何通过事件驱动系统执行相同类型的操作。
我想通过一个示例来了解与拥有users 和products 微服务的事件驱动相比,如何在编排系统中完成操作。
示例:一个电子商务商店,其中用户可以在免费计划中拥有 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