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