我´我目前正在开发一个需要异步工作的系统,所以我决定是时候让事件驱动的体系结构开始了。大多数功能都是积垢
不同的部分是:
使用websocket连接与api网关通信的ui
网关接收有效负载并创建一条包含有效负载的消息,该消息进入kafka集群
服务使用消息、验证实体并将其存储在数据库中。一个事件被推送到kafka,供网关使用并返回ui
对于创建,更新和删除它相当直接。
然而,当我在通常使用httpget调用的地方检索数据时,事情变得有点棘手。如何正确检索这些数据?我是否创建请求事件,或者我有哪些选项?数据库中的数据还需要通过服务“可搜索”和“可分页”——通常我会为此使用querystring。我发现我的“requestdataevents”获取量非常大,并且包含了很多关于所请求数据的逻辑。实际上,现在的流程与create、update等的流程相同。其中一个事件被推送到kafka,其中包含关于应该查询哪些数据的信息。
以事件驱动的方式处理数据读取的正确方法是什么?
如何使我的数据可搜索(像get all resources,它有一个资源x的外键,或者包含name=“xyz”)
1条答案
按热度按时间lp0sw83n1#
根据您的业务需求,有多种选择:
方案a:
您可以在“写入时间”查询和分发数据。这意味着,在将数据放入kafka集群之前,您可以保留已连接客户机的Map,并根据客户机的兴趣将数据分发给这些客户机。
此外,根据客户的兴趣,使用此连接客户Map,您可以为这些客户订阅Kafka中的相关主题。
如果需要的话,您还可以考虑服务器发送的事件,并将入口websocket连接与客户端的更新分开
方案b:
您可以定期检查数据库中提到的查询,并根据客户的兴趣将结果流式传输给客户。
如果需要将查询扩展到多个副本,可以考虑对这些查询进行分布式调度。
方案c:
您还可以考虑gcp firestore这样的技术,在写入时间或读取时间写入查询结果,并让firestore处理分发。
您还可以组合这些选项并创建一个混合方法。