Php facebook如何实现写可伸缩性?

Php facebook如何实现写可伸缩性?,php,mysql,facebook,memcached,scalability,Php,Mysql,Facebook,Memcached,Scalability,我研究了facebook发布的一篇关于memcached的论文。在那里,我发现他们有一个主区域,而所有其他地理区域都是奴隶 我想知道facebook在如此高的负载下如何处理主区域的写可伸缩性 为什么它只有一个主区域 除了手动分片之外,还有什么其他选项可以实现写可伸缩性 脸谱网西雅图办公室的前负责人Ari Steinberg来到我的华盛顿大学数据库课,讨论脸谱网如何缩放服务器。 据我所知,Facebook将所有写请求发送到主服务器,然后这些信息传播到其他地区的服务器。这是因为写请求的数量远小于读请

我研究了facebook发布的一篇关于memcached的论文。在那里,我发现他们有一个主区域,而所有其他地理区域都是奴隶

  • 我想知道facebook在如此高的负载下如何处理主区域的写可伸缩性

  • 为什么它只有一个主区域

  • 除了手动分片之外,还有什么其他选项可以实现写可伸缩性


  • 脸谱网西雅图办公室的前负责人Ari Steinberg来到我的华盛顿大学数据库课,讨论脸谱网如何缩放服务器。

    据我所知,Facebook将所有写请求发送到主服务器,然后这些信息传播到其他地区的服务器。这是因为写请求的数量远小于读请求的数量,所以一组服务器能够处理所有的写请求。(想想典型的Facebook用法……阅读帖子,阅读帖子,也许偶尔留下评论或留言)

    这意味着,如果您执行读取请求,并且您的请求被发送到一组不是主组的服务器,则有可能您正在查看旧帖子。如果有人发布了一个新的状态,而主服务器没有将该帖子转发到您正在阅读的服务器,它将不会知道该写操作,并会向您提供旧数据。Facebook重视在最准确的数据上快速加载页面,因此他们使用这种设计。大多数用户永远不会意识到他们正在查看旧信息,因为他们不知道新帖子的存在


    注:我相信他们提到,当你试图阅读自己的作品时,他们有一个特殊的案例。如果您更新个人资料图片,然后刷新页面,他们将确保您的请求发送到主服务器,以便您获得最新的信息。如果更新个人资料图片,然后在刷新页面时看到旧图片,则用户体验不佳。但是,如果其他人去查看您的个人资料,则显示的图片并不重要,因为用户不知道您已对其进行了更新

    喜欢的人应该会生成相当数量的写请求,所有的问题都是他们的存储方式。我不认为存储空间是个问题。每个数据中心都有存储在其中的所有信息。问题在于每个数据中心每秒可以处理的请求数,并最大限度地减少返回请求所需的时间。即使是喜欢,阅读的次数仍然是喜欢的次数。然而,他们也有可能以不同的方式处理喜欢和其他类似的东西,因为它们不太重要,不太准确。我还记得Ari提到喜欢的数量实际上对于喜欢很多的帖子来说是非常不准确的。不,我不记得这是为什么。可能是因为like计数的准确性不是很重要,所以他们不会花费大量资源担心其准确性。我感兴趣的是了解主区域是如何处理的?就像他们维护了多少副本一样!显然,他们不能让一台服务器作为主服务器…他们必须有一个主服务器集群和一些划分写请求的方法。要回答这个问题,你应该研究数据库的分片。其基本思想是,它们将散列请求的某个唯一标识符,并使用该标识符确定将请求发送到哪个服务器。我相信在Facebook的早期,他们使用你的学校来确定请求发送到哪个服务器(所有哈佛请求发送到一个服务器,所有杜克请求发送到另一个服务器等等)。今天,他们可能使用帐户ID或类似的东西来对请求进行排序。我想知道的是主区域是如何处理的?就像他们维护了多少副本一样!显然,他们不能让一台服务器充当主服务器……他们必须拥有一个主服务器集群,并以某种方式划分写请求。Facebook表示,我刚刚发现,人们每天在Facebook上共享47.5亿条信息,如状态更新、墙贴、照片、视频和评论等。他们每天还“喜欢”超过45亿件事情,发送超过100亿条信息。