2

问题是通过您在 Web 应用程序中所做的各种事情的整个设计方法,以便如果您在 Twitter 上关注数百万人,并且当您检查最新的 20 条推文时,您可以用最少的时间和最少的负载找到它资源。这是一个关于整个堆栈的开放式设计问题。

我的答案不完整(因为我无法完全回答这个问题)

  1. 由于我们谈论的是数百万用户,因此我们必须根据用户的地理位置对数据库进行分片,这个答案不被接受,因为在 twitter 中你真的不关注同一位置的人。有什么更好的方法可以实现这一目标?

  2. 由于大多数情况下 20 条最新推文是最重要的,因此每个用户维护一个缓存(链表),其中包含根据它们到达时间的最新推文。这也不被接受。

一般来说,我在这类设计问题上很弱,想知道你将如何解决它们?

4

1 回答 1

0

Twitter 已经发展了几年,我相信它是设计最复杂的数据系统之一。在这样一个复杂的系统中,可能已经针对不同类型的用户进行了许多优化(取决于他们的推文频率、关注者数量和关注者数量)。

关注数百万人的用户无疑是一种很特殊的类型,可能不会太多。我认为对于这些用户来说,一个明智的设计是在您的关注者每次发布推文时更新缓存中的时间线数据,并将非常旧的数据存档。因此,每次您请求时间线时,它都会立即返回缓存。

以上只是使系统为您工作的最简单直接的方法。在现实中,设计中要考虑更多的衡量标准,比如有多少用户关注了数百万人,这些用户的刷新频率等。

于 2012-09-02T12:30:48.253 回答