您如何通过网络在两个进程(例如客户端和服务器)之间实时同步数据?
我在服务器上构建了各种文档/数据集,由客户端下载和显示。下载后,文档会收到持续更新以保持最新状态。
这似乎是一个简单且常见的概念,但我找不到任何提供这种抽象级别的工具。我什至不确定我在寻找什么。也许有一个类似的概念与可靠的工具支持?也许有一系列不同的工具必须放在一起?这是我到目前为止所考虑的:
- 我需要在单跳 (0.5 RTT) 中传播每个更改,这排除了轮询 (通常 >10 RTT) 和缓存失效技术 (1.5 RTT)。
- 数据复制和简单的通知广播不是一个选项,因为数据太多,变化太多。客户必须能够选择要下载的特定文档并监控更改。
- 我目前正在使用消息传递模式,它可以完成这项工作,但它毫无希望地没有生产力。它的抽象级别太低了。它很费力,容易出错,而且随着应用程序复杂性的增加,它不能很好地扩展。
- HTTP 和其他类似 RPC 的技术适用于初始获取,但它们鼓励轮询以进行后续同步。在执行反向请求(从数据源到数据消费者)时,可以进行更改通知,但它比消息传递还要复杂。
- 由于协调两个并行连接上的通信所涉及的复杂性以及两种范式之间的阻抗不匹配,将 RPC(用于初始获取)与消息传递(用于更新)结合起来是一场噩梦。我需要统一的东西。
- WebSocket 和 Comet 是实现更改通知的流行方法,但它们需要额外的库来提高生产力,而且我不知道有任何库适合我的应用程序。
- 消息队列只是在网络上放置一个中介,同时保持基本的消息传递模式。自定义消息过滤器/路由器让我更接近实时文档的概念,但我觉得我正在 MQ 之上实现自定义中间件层。
我有很多额外的要求(两端的原生可观察数据结构 API、增量更新、自定义消息过滤器、自定义连接路由、跨平台、健壮性和可扩展性),但在考虑这些要求之前,我需要找到一些工具最少尝试做我需要的事情。出于标准原因,我试图避免使用内部框架——成本、上市时间、长期维护以及让开发人员满意。