php - facebook如何实现写入可扩展性?

标签 php mysql facebook memcached scalability

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

  1. 我想知道在如此高的负载下,facebook 如何在写入可扩展性方面处理主区域?

  2. 为什么它只有一个主区域?

  3. 除了手动分片之外,还有哪些其他选项可以实现写入可扩展性?

最佳答案

Facebook 西雅图办事处前主管阿里·斯坦伯格 (Ari Steinberg) 来到我的华盛顿大学数据库类(class),谈论 Facebook 如何扩展其服务器。

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

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

注意:我相信他们提到当您尝试阅读自己的写入时,他们有一个特殊情况。如果您更新个人资料图片,然后刷新页面,他们将确保您的请求发送到主服务器,以便您获得最新的信息。如果您更新个人资料图片,然后刷新页面时看到旧图片,那么用户体验会很差。但是,如果其他人查看您的个人资料,显示什么图片并不重要,因为用户不知道您已更新它。

关于php - facebook如何实现写入可扩展性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19627275/

相关文章:

php - 在 WooCommerce 电子邮件通知中隐藏订单详细信息表中的自定义费用行

php - 在 Laravel 5.1 中更新表结构而不回滚

php - 无法使用 PHP 连接到 IMAP

python - 循环将数据从串口读取到数据库

iphone - 在 iOS 中集成 Facebook SDK

facebook - Graph api explorer - "with"修饰符是什么

php - 如何隐藏、预设和禁用选择标签

mysql - 我需要一些可以在一列中保留多个值的设计

ruby-on-rails - 如何在 Rails 中编写 channel.html 文件(针对 Facebook)

php - 用于多图像上传的数据库架构