我在facebook上发表了一篇关于memcached的论文。在那里,我发现他们有一个主区域,所有其他地理区域都是奴隶。
我想知道facebook在如此高负载的情况下如何在写入可扩展性方面处理主区域?
为什么它只有一个主区域?
除了手动分片以实现写入可伸缩性之外,还有哪些其他选项?
答案 0 :(得分:2)
Facebook西雅图办事处负责人Ari Steinberg来到我的华盛顿大学数据库课程,讨论Facebook如何扩展他们的服务器。
根据我的记忆,Facebook将所有写入请求发送到主服务器,然后该信息将传播到其他区域的服务器。这是有效的,因为写请求的数量远远小于读取请求的数量,因此一组服务器能够处理所有写入请求。 (想想典型的Facebook使用情况......阅读帖子,阅读帖子,可能偶尔发表评论或留言)。
这意味着如果您执行读取请求并且您的请求被发送到不是主组的服务器组,则您可能正在查看旧帖子。如果有人发布了新状态并且主服务器没有将帖子转发到您正在阅读的服务器,则它还不会知道此写入并提供旧数据。 Facebook重视快速页面加载超过最准确的数据,因此他们使用这种设计。大多数用户永远不会意识到他们正在查看旧信息,因为他们不知道新帖子存在。
注意:我相信他们提到他们在您尝试阅读自己的写作时有一个特殊情况。如果您更新了个人资料图片,然后刷新页面,他们将确保您的请求被发送到主服务器,以便您获得最新信息。如果您更新个人资料图片,然后在刷新页面时看到旧图片,则用户体验会很糟糕。但是,如果其他人去查看您的个人资料,则显示哪个图片并不重要,因为用户不知道您已更新它。