Dropbox 的响应队列究竟是如何工作的?

Posted

技术标签:

【中文标题】Dropbox 的响应队列究竟是如何工作的?【英文标题】:How does dropbox' response queue work, exactly? 【发布时间】:2021-07-31 07:29:34 【问题描述】:

我正在阅读这篇文章:https://medium.com/@narengowda/system-design-dropbox-or-google-drive-8fd5da0ce55b。在同步服务部分,它写道:

对应于各个订阅客户端的响应队列负责将更新消息传递给每个客户端。由于客户端收到消息后将从队列中删除,因此我们需要为每个客户端创建单独的响应队列,以便能够共享应该发送给多个订阅客户端的更新消息。

上下文是we need a response queue to send the file updates from one client to other clients。我对这种说法感到困惑。如果 Dropbox 有 1 亿个客户端,我们需要根据语句创建 1 亿个队列。这对我来说是难以想象的。例如,一个 Kafka 集群最多可以支持 5K 个主题 (https://***.com/questions/32950503/can-i-have-100s-of-thousands-of-topics-in-a-kafka-cluster#:~:text=The%20rule%20of%20thumb%20is,5K%20topics%20should%20be%20fine.)。在这种情况下,我们需要 20K 的 Kafka 集群。哪个排队系统可以做1亿个“话题”?

【问题讨论】:

【参考方案1】:

不确定,但我希望仅通过网络套接字向客户端发送此类通知。

另外,正如this medium blog 所说,如果客户端不在线,那么消息可能必须保存在数据库中。之后,当客户端上线时,他们可以在特定时间戳之后请求所有更新,之后可以设置 Web 套接字以促进未来的通信。

很高兴知道您对此的看法。

P.S : 大多数 Dropbox 系统设计博客/vlog 只是相互复制,没有深入细节。

【讨论】:

以上是关于Dropbox 的响应队列究竟是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

尾递归究竟是如何工作的?

泛型究竟是如何工作的?

这个 Promise 示例究竟是如何工作的?

Django 内容类型究竟是如何工作的?

Spring BeanPostProcessor 究竟是如何工作的?

bufferedReader() 在 Kotlin 中究竟是如何工作的?