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

Scalability 像Facebook这样的大型网站是如何分配负载的?,scalability,Scalability,这可能更适合于服务器故障,但对我来说,这似乎更像是一个编程挑战。我可能错了 我在想Facebook是怎么做的。它拥有超过5亿的活跃用户。他们如何为所有这些用户服务?是否有一个巨大的数据库为每个用户保存一条记录,这样每当有人登录时,就可以根据该中央计算机检查身份验证?我对这个话题相当无知,但我可以看出这样的解决方案很简单,不可扩展。到了一定程度,中央服务器无法处理所有事情 相反,假设将中央数据库拆分为100个数据库,以便在所有这些数据库之间均匀地分配负载。这肯定是Facebook所做的,但他们如何

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

我在想Facebook是怎么做的。它拥有超过5亿的活跃用户。他们如何为所有这些用户服务?是否有一个巨大的数据库为每个用户保存一条记录,这样每当有人登录时,就可以根据该中央计算机检查身份验证?我对这个话题相当无知,但我可以看出这样的解决方案很简单,不可扩展。到了一定程度,中央服务器无法处理所有事情

相反,假设将中央数据库拆分为100个数据库,以便在所有这些数据库之间均匀地分配负载。这肯定是Facebook所做的,但他们如何知道在哪台机器上存储哪个用户记录呢?是否在每台计算机中都存储了一条记录,并且当您登录时,会使用一台随机用户计算机进行身份验证?这意味着每次有人注册或更改密码时,必须将更改传播到所有100服务器

我想到了另一个解决办法。也许他们有办法将用户的电子邮件地址散列到特定的用户数据库中。那么web服务器必须知道的就是散列算法。但我认为这个解决方案也带来了它自己的问题。如果要添加更多用户数据库计算机,该怎么办?您是否将哈希算法更改为考虑101用户数据库而不是100?您是否会开始移动用户记录,以便101个用户数据库具有相同数量的用户记录?不,那看起来也很可笑


不管怎样,正如你所看到的,我对如何解决这些问题不太了解。有人推荐阅读这个主题吗?

一个好的起点可能是看看(),一个支持FB收件箱搜索的分布式数据库

这里有更多关于。
你也可以在。

查看Facebook工程博客,在那里的某个地方,他们谈论如何摆脱我们使用的传统关系模式。答案是针对Facebook的。另一个例子是,谷歌拥有整个搜索数据库的多个副本,因此你的查询可以访问他们的任何数据库服务器。搜索数据库未同步。这取决于你在分发负载时对网站所做的操作。哦,嘿,看看这个!有人问起Cassandra:在我们的新程序员StackExchange上(程序员倾向于“白板”/思考相关问题),谢谢,阅读有关Cassandra如何工作的内容非常丰富!