流数据架构

里科

我想为以下项目设计最佳的体系结构:我有一个运行在任何设备(台式机,移动设备...)上的应用程序,用户可以在该设备上与共享数据的其他用户发布或接收通知。

基本上,一个用户可以与其他用户共享他在应用程序上正在做的事情,实时向其他用户通知更改,反之亦然。并且用户只能接收其他用户允许的通知。

例如,当用户在屏幕上移动窗口小部件时,应用程序必须存储新的窗口小部件位置,并且还实时通知其他用户此新位置以在其屏幕上执行更改。为此,我将看到一个具有发布-订阅模式的事件驱动的体系结构。但是,我猜想例如当应用程序需要检索用户列表以共享小部件时,我还需要处理同步请求-响应模式。

我快速浏览了Manning撰写的Streaming Data一书,其中描述了流数据架构,但是我不知道这种架构是否适合我的需求。例如在实现部分的区别是事件源生产者也可以是我的应用程序中的事件使用者(在书中,事件源生产者是单独的公共流API,而真正的应用程序是唯一的使用者)

我的想法(如果我对此有所了解)将是:用于数据摄取和数据访问的WebSocket,像代理一样的Kafka作为消息存储库,以及一个单独的分析服务,使用Kafka主题并将数据持久存储在DB中。一种质疑是,如果我只能使用一个WebSocket进行数据摄取和数据访问。

您将使用哪些详细的体系结构和工具来满足这些需求?

对于实现,我将在客户端使用javascript,在服务器部分使用Java。

本·斯托福德

这是Kafka的一个非常普遍的用例(利用广播和存储元素)。尽管上下文略有不同,但这里有一些示例应该会有所帮助:

https://github.com/confluentinc/kafka-streams-examples/tree/4.0.0-post/src/main/java/io/confluent/examples/streams/microservices

https://www.confluent.io/blog/building-a-microservices-ecosystem-with-kafka-streams-and-ksql/

在此示例中,使用了CQRS模式,因此您对屏幕位置所做的更改将创建发送到kafka的事件,然后创建一个视图服务,其他应用程序实例可以(长时间)轮询以获取更改。

您也可以使用websocket来实现。在github上有一些实现,但是我还没有亲自尝试过。一种复杂性是,如果您想扩展到多个节点,则需要某种方式在Kafka中映射消息以打开websocket(而REST示例中的对kafka分区的映射请求是自动处理的)。不过,从单个服务器实现开始就不需要这种复杂性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章