0

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

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

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

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

4

1 回答 1

2

Facebook 西雅图办事处的前负责人 Ari Steinberg 来到我在华盛顿大学的数据库课程中讨论 Facebook 如何扩展他们的服务器。

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

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

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

于 2013-10-28T04:59:22.920 回答