【发布时间】:2020-09-08 11:16:28
【问题描述】:
我目前正在开发一个需要异步工作的系统,所以我决定是时候尝试一下事件驱动架构了。大部分功能都是 CRUD
不同的部分是:
- 使用 websocket 连接与 API 网关通信的 UI
- 网关接收负载并创建带有负载的消息进入 Kafka 集群
- 服务使用消息、验证实体并将其存储在数据库中。事件被推送到 Kafka 以供网关使用并返回 UI
创建、更新和删除非常简单。
但是,当我通常使用 HTTP GET 调用检索数据时,事情变得有点棘手。我怎样才能正确检索这些数据?我是否创建请求事件,或者我有哪些选项?数据库中的数据还需要通过服务“可搜索”和“可分页” - 通常我会为此使用查询字符串。我发现我的“请求数据事件”变得非常庞大,并且包含很多关于请求数据的逻辑。基本上,现在的流程与创建、更新等相同。将事件推送到 Kafka,其中包含有关应查询哪些数据的信息。
以事件驱动的方式处理数据读取的正确方法是什么?
如何让我的数据可搜索? (比如获取所有具有资源 x 外键或包含 name = "xyz" 的资源)
【问题讨论】:
-
您说要求系统是
asynchronous- 这背后的商业原因是什么?对于阅读,您最好从 API Gateway 查询数据库(也许通过一些薄层来抽象持久性细节)。如果业务需求是性能/可扩展性,您可以使用其他工具(缓存、只读数据库镜像等)来解决这个问题,这些工具比通过事件执行此操作更简单、更高效。
标签: events apache-kafka event-handling event-driven event-driven-design