像Facebook这样的大型网站如何分配负载?

时间:2010-12-21 19:41:47

标签: scalability

这可能更适合服务器故障,但对我来说似乎更像是编程挑战。我错了。

我在考虑Facebook如何做它的功能。它拥有超过5亿活跃用户。他们如何设法为所有这些用户提供服务?是否有一个巨大的数据库为每个用户保存一条记录,以便每当有人登录时,都会检查该中央计算机的身份验证?我对这个话题一无所知,但我可以看到像这样的解决方案很简单,不可扩展。中央服务器无法处理所有事情。

相反,假设中央数据库被分成 100 数据库,以便负载在所有数据库中均匀分配。这必须是Facebook的功能,但他们如何知道哪些用户记录存储在哪台机器上?是否有记录存储在每台计算机上,当您登录时,随机用户计算机用于身份验证?这意味着每当有人注册或更改其密码时,更改都必须在所有 100 服务器上传播。

另一个解决方案浮现在脑海中。也许他们有办法将用户的电子邮件地址散列到特定的用户数据库。然后,Web服务器必须知道的是散列算法。但是这个解决方案提出了我自己的问题。如果要添加更多用户数据库计算机,该怎么办?您是否更改了散列算法以考虑 101 用户数据库而不是 100 ?您是否会开始移动用户记录,以便101个用户数据库具有相同数量的用户记录?不,这似乎也很荒谬。

无论如何,正如你所看到的,我对如何解决这些问题知之甚少。有没有人对这个话题有一些推荐的阅读?

1 个答案:

答案 0 :(得分:3)

一个好的起点可能是看看Cassandralecture notes),这是为FB的收件箱搜索提供支持的分布式数据库。

以下是FB's nuts and bolts的更多信息。 您可能还会在FB developer news中找到一些宝石。