from infoq.com/cn
最近在Facebook工程师博客上
,软件工程师Eugene Letuchy写了一篇关于Facebook Chat项目的决策细节
的文章。
当产品的客户有可能在一夜之间从零增加到七千万的时候,可扩展性就变为从一开始就必须考虑的问题。
Eugene在文中指出了面临如此庞大的客户群会遇到的一系列挑战。首先的挑战是:
在用户上线或者下线时通知其所有好友的做法是非常幼稚可笑的,这么做
的代价是O(平均好友个数×高峰期用户数×上下线频率) 条短信/秒,
上下线频率是指用户平均每秒上线和下线的次数。当每个用户好友的平均数量大约在几百个,高峰期同时在线用户数在百万数量级的时候,这种实现方法的效率简直
低得无法忍受。
另外一个挑战是实时消息的发送。Facebook采用的是客户端直接从服务器将新消息“拉”的方式,跟Comet的XHR长时间轮询
(Comet's XHR Long Polling)
过程比较相似。
Facebook的页面会加载一个iframe用于用户间消息的传递, 这个iframe中的Javascript代码发出一个HTTP GET请求,这个请求将建立与服务器的一个持久连接,直到有消息返回给用户为止。
Eugene
接着又提到了“大量长时间的同步请求使得LAMP组合中Apache这一部分成为不确定的实现因素”。在在集群和分区子系统上,Facebook选择了C
++和Erlang的组合。C++模块用户用于记录聊天信息,而Erlang模块“将在线用户的对话保存在内存中并且对长时间轮询(long-
polled)请求提供支持”。epoll
,Linux 2.6中出现的新系统调用,被用于驱动Erlang模块。Eugene 解释了决定选用Erlang的原因:
简单的说就是因为Erlang能很好地满足我们的要求。Erlang是一种面向同步的函数式语言,它具有极其轻量级的用户空间“进程”,无共享的消息传递语义,内置的分布式系统和一个被二十多年实时软件系统实践所检验过的灾难恢复系统。
用于“跨语言可扩展服务部署”的开源框架Thrift
(Facebook在去年愚人节发布)被用来将Facebook Chat中用到的各种技术结合起来,其中就包括Erlang的功能绑定。
启动这项服务的方式也比较有意思——利用所谓的“摸黑启动(dark launch)”
一夜间就将客户数由零变为七千万的秘密就在于避免一步到位地完成这个过程。我们会首先模拟很多用户访问的场景,这是通过一个叫做“摸黑启动”的阶段实现的.在这个阶段中Facebook的页面会在没有任何UI元素的情况下连接聊天服务器,询问在线信息和模拟信息发送过程。
Facebook选用Erlang是对此语言认可和肯定,具有重大意义。Erlang的资深布道使Yariv Sadan
感慨道:
人们长久以来都认为Erlang只是一个构建可扩展实时应用程序的平台,Facebook选用Erlang应该能消除人们这一偏见。
查看英文原文
:Facebook Chat Architecture
分享到:
相关推荐
Facebook是全球最大的社交媒体平台之一,其背后有着复杂的网络架构来支撑数亿用户的日常互动。这份“Facebook的架构”PDF文件详细介绍了这个庞然大物的技术基础。以下是对这份文档内容的概览: Facebook架构的核心...
* 社交媒体数据:社交媒体平台如 Facebook 等产生了大量的用户生成内容,包括文本、图片、视频和音频等。 * 互联网数据:互联网上的网页、搜索查询、电子商务数据等都是大数据的重要来源。 * 移动数据:移动设备如...
Facebook作为一个全球知名的社交网络平台,其背后的技术架构是支撑亿级用户流畅互动的关键。Facebook的网站架构设计体现了模块化、整合化和清晰化的理念,旨在实现简单、高效的系统运作。以下是对Facebook架构的深入...
【标题】:“图书:Facebook应用开发” 这本关于Facebook应用开发的图书,旨在为开发者提供一个全面的指南,深入理解如何构建、优化以及发布在Facebook平台上的应用程序。Facebook的应用开发涵盖了多种技术和策略,...
《架构之美:Facebook架构解析》是一本深入探讨大型互联网公司,特别是Facebook的系统架构与设计的书籍。作为架构师的必备读物,它揭示了如何构建可扩展、高可用、高性能的复杂网络服务。以下是对该主题的详细阐述:...
Facebook Chat IM是Facebook的桌面Messenger。 有了它,您可以直接从桌面与所有Facebook朋友聊天。 它具有一个简单易用的界面,并提供了许多很棒的功能,例如表情符号,状态更新通知,声音警报,聊天记录等等。 它是...
Facebook是全球最大的社交媒体平台之一,其背后支撑的架构设计是一个庞大的、复杂且高度优化的系统。这个压缩包“FaceBook架构设计.zip”包含了对Facebook如何处理海量数据、提供高效服务的深入探讨。以下是对其中...
Facebook作为全球最流行的社交平台之一,拥有庞大的用户基础和流量,其技术架构自然成为了业界关注的焦点。为了维持高效的分享和通信能力,Facebook构建了一个复杂的系统来应对难以想象的访问量和数据规模。2007年11...
区块链行业周报:Facebook将转型元宇宙公司,区块链合成资产监管趋严.pdf
### TAO: Facebook的分布式数据存储系统用于社交图谱 #### 概述 Facebook作为全球最大的社交媒体平台之一,面临着管理海量用户数据的巨大挑战。为了高效地处理这些数据,并为用户提供流畅且个性化的体验,Facebook...
标签“facebook”,“性能”,“架构”和“学习资料”揭示了文档的主要内容将围绕Facebook的系统架构,如何提升服务性能以及作为学习材料的价值。 文件“F4mAa47GwRx1i4yztVgx0Mmw5cabQ7pU”可能是一个临时或随机...
Facebook是全球最大的社交媒体平台之一,其背后的技术架构是支撑亿级用户流畅互动的关键。Facebook的架构设计涉及到多个层面,包括前端、后端、数据库、分布式系统、缓存策略以及编程语言PHP的应用。以下是对...
《Facebook的信息架构评析》 Facebook的信息架构设计被誉为互联网领域中最合理的典范,其合理性在于它在不断演变中兼顾了用户体验、功能扩展与内容呈现的平衡。这篇文章将对Facebook早期的信息架构进行深入剖析,并...
Facebook作为全球最大的社交网络平台,其早期的架构设计与缓存系统对于理解大规模分布式系统的构建具有重要的参考价值。本文将深入探讨这两个主题,为IT专业人士提供相关知识点。 **Facebook早期架构设计** ...
Social Media Quick Guide: Facebook(Facebook快速指南),共11页,10分钟左右可读完的Facebook图文指导。
国外技术干货:facebook_architecture.zip
TMT行业日报:Facebook收购伦敦人工智能公司.pdf
Provide a data store with a graph abstraction (vertexes and edges), not keys/values Explicitly favor efficiency and availability over consistency