流数据架构

问题描述 投票:0回答:1

我想为以下项目设计最佳架构:我在任何设备(桌面,移动设备......)上运行应用程序,用户可以在其中共享数据的其他用户发布或接收通知。

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

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

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

我的想法如果我跟随这本书的内容如下:用于数据摄取和数据访问的WebSocket,类似于代理的Kafka作为消息存储库以及消耗Kafka主题和在DB中持久保存数据的单独分析服务。一个询问是我是否只能使用一个WebSocket进行数据提取和数据访问。

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

对于实现,我会考虑客户端部分的javascript和服务器部分的Java。

java architecture real-time event-driven-design
1个回答
1
投票

这是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中的消息以打开websockets(而在REST示例中将请求映射到kafka分区是自动处理的)。开始使用单个服务器实现不需要这种复杂性。

© www.soinside.com 2019 - 2024. All rights reserved.