与其他约会app的线上速配思路不同,Facebook的约会功能只匹配不是好友关系的人,它将鼓励用户更多参加线下活动。开源Facebook的源代码大部分采用Common Public Attribution License (CPAL),除了FBML parser部分采用的是Mozilla Public License (MPL)。Facebook现有超过24000个应用,世界各地有超过40万开发者在为其开发应用程序,每天都有140个左右的应用上线。域模型用UML类图的形式,显示了Facebook系统所管理的信息。它提炼出了Facebook数据库中的实体、关系、字段。技术构架Facebook使用LAMP(Linux、Apache、MySQL、PHP)作为技术构架。Facebook的一个技术构架工程师Steven Yoosure在博客中写到:几乎我们所有的服务器都运行开源软件。我们的Web服务器是Linux,Apache和PHP。我们数据库是MySQL。我们使用memcached来保证网站的快速反应。一些后台应用Python、Perl和Java,以及一些gcc和Boost。程序员用Subversion和git来进行代码管理。还有很多--像很多网站一样,从头到脚都是开源软件。MemcachedMemcached是当今互联网上最著名的软件之一。它是一个分布式的内存缓存系统,Facebook(包含其他很多网站)用它作为Web服务器和MySQL服务器之间的缓存层(因为数据库访问相对比较慢)。多年来,Facebook已经对Memcached和它的周边软件进行了很多优化,比如对network stack的优化。Facebook每时每刻都有数10TB的数据缓存在数千台Memcached服务器上。它可能是世界上最大的Memcached服务器集群了。HipHopforPHP作为一种脚本语言,和本地代码相比是运行缓慢的。HipHop可以将PHP转换成C++代码,然后再进行编译,这样可以获得更好的性能。由于Facebook严重依赖PHP,所以通过HipHop可以让Web服务器的性能得到提高。一个工程师小团队在Facebook(一开始只有三人)花了18个月时间开发HipHop已经投入正式使用。HaystackHaystack是Facebook的高性能图片存取系统(严格来说,是一个对象存储系统,因此它并不仅限于存储照片)。它工作繁忙;要管理超过200亿张上传的照片,并且每一片照片被保存为四种不同的分辨率,因此有超过800亿张照片。它不仅要能处理上亿的照片,而且性能也是至关重要的。正如我们前面提到的,Facebook每秒钟要处理约120万张照片,而且不包括CDN上的,这是一个惊人的数字。BigPipeBigPipe是Facebook开发的的动态网页处理系统。为了获得最佳性能,Facebook用它来按分块处理每个网页(称为“pagelets”)。例如,聊天窗口,新闻Feed等是通过分块分开进行传输的。这些pagelets可以并行工作,不仅可以提高性能,而且即使其中一部分失效或中断,也不影响用户的正常访问。CassandraCassandra是一个可以避免单点故障的分布式存储系统。它是NoSQL运动的一个典范,并已开放源代码(它甚至成为一个Apache项目)。Facebook在收件箱搜索中使用它。除了Facebook,其他网站也在使用它,例如Digg。ScribeScribe是一个灵活的日志系统,Facebook在内部大量使用它。它能够处理Facebook这样超大规模的日志记录,并且能自动处理新生成的日志记录类别(Facebook有数百个日志类别)。HadoopandHiveHadoop是一个开源的map-reduce实现,它可以轻松处理海量数据。Facebook用它来进行数据分析(我们都知道Facebook有巨量的数据)。Hive起源于Facebook,它使得针对Hadoop进行SQL查询成为可能,从而非程序员也可以方便地使用。(注:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务运行。)