【发布时间】:2018-05-24 04:17:04
【问题描述】:
我想为我的以下项目设计最佳架构:我有一个运行在任何设备(台式机、移动设备...)上的应用程序,用户可以在其中发布或接收与其他用户共享数据的通知。
基本上,用户可以与其他用户分享他在应用程序上所做的事情,其他用户会实时收到更改通知,反之亦然。并且用户只能接收其他用户允许的通知。
例如,当用户在屏幕上移动小部件时,应用程序必须存储新的小部件位置,并实时通知其他用户此新位置以在其屏幕上执行更改。对于这种需求,我会看到一个具有发布-订阅模式的事件驱动架构。但是,我想当应用程序需要检索用户列表以共享一个小部件时,我还需要处理同步请求-响应模式。
我快速浏览了Streaming Data book by Manning,其中描述了流式数据架构,但我不知道这种架构是否适合我的需求。例如在实现部分的一个区别是事件源生产者也可以是我的应用程序中的事件消费者(在书中,事件源生产者是一个单独的公共流 API,真正的应用程序是唯一的消费者)
如果我稍微遵循这本书,我的想法如下:用于数据摄取和数据访问的 WebSocket,一个类似于代理的 Kafka 作为消息存储库,以及一个使用 Kafka 主题并将数据持久化到数据库中的单独分析服务。一个疑问是我是否只能使用一个 WebSocket 来进行数据摄取和数据访问。
您会使用哪些详细的架构和工具来满足这些需求?
对于实现,我会考虑将 javascript 用于客户端部分,将 Java 用于服务器部分。
【问题讨论】:
-
多个用户是否可以编辑同一个屏幕,例如 Google Docs?还是只有一个用户是特定屏幕的“作者”,而所有其他用户都只是“读者”?
-
@AdiLevin 所有用户都可以编辑。
标签: java architecture real-time event-driven-design