1.整体技术架构
Facebook使用LAMP作为技术构架,LAMP就是Linux+Apache+MySQL+PHP,一组常用来搭建动态网站或者服务器的开源软件。但Facebook比普通的LAMP大得多,因为它已纳入其他元素和更多的服务。例如:
(1)Facebook仍使用PHP,但它已经为它建立一个编译器,以便它可以为本地代码打开Web服务器,从而提高性能。
(2)Facebook使用Linux,但它特别为网络吞吐量做了优化。
(3)Facebook使用MySQL,但主要是作为一个Key-Value的持久性存储,Jions和服务器逻辑操作会在Web服务器上操作,因为在那里更容易执行。
2.软件架构
为了使这么多的数据量和用户有好的访问网页,Facebook用了大量的软件来保证网站的正常工作:
1)Memcached
Memcached是现在互联网最有名的软件之一。这是一个分布式内存缓存系统,用来作为Web服务器和MySQL服务器之间的缓存层(因为数据库访问比较慢)。多年以来,Facebook已经提出了一些优化Memcached和一些周边软件的办法,如压缩Network Stack。
2)为PHP设计了HipHop
PHP作为一种脚本语言,和本地程序相比,运行是比较缓慢的。HipHop可以将PHP转换成C++代码,然后再进行编译,从而获得更好的性能。因为Facebook严重依赖PHP,这使得其可以让Web服务器运行得更有效率。
3)Haystack
Haystack是Facebook的高性能照片存储/检索系统(严格来说,是一个对象存储,因此它并不一定要存储照片)。它有许多工作要做,有超过20亿张上传的照片,并且每一个被保存成四种不同的分辨率,因此有超过80亿张照片。(www.daowen.com)
4)BigPipe
BigPipe是Facebook开发的一个动态的网页服务系统。Facebook使用它来处理每个网页,以获取最佳性能。
5)Cassandra
Cassandra是一个不会单点失败的分布式存储系统,Facebook在搜索功能中使用它。这是为NoSQL运行的一个重要组成部分,并已公开源代码(它甚至成为一个Apache项目)。
6)Scribe
Scribe是一个灵活的日志系统,Facebook在它的内部大量使用。它能够处理Facebook数据库中的大规模日志记录,并自动处理新的日志记录类别。Facebook有数百个日志类别。
7)Hadoop和Hive
Hadoop是由一个开源的Map-Reduce所实现的,使得它可以进行大数据运算。Facebook使用这个进行数据分析。Hive就是发源于Facebook,使Hadoop使用的SQL查询成为可能,从而使其更容易对非程序员使用。Hadoop和Hive是开源的(Apache项目),有为数众多的使用者,例如雅虎和Twitter。
8)Thrift
Facebook使用几种不同的语言和不同的Services。PHP用于前端,Erlang用于聊天,Java和C++用于多种场所。也许还有其他语言。Thrift是一个内部开发的跨语言的框架,联系语言,使它们可以在一起合作,从而使它们之间可以交互。这使得Facebook可以更容易继续保持其跨语言发展。Facebook已经让Thrift开源。更多的语言支持已被添加到Thrift中。
9)Varnish
Varnish是一个HTTP加速器,可以作为一个负载平衡器,并缓存内容,然后可以以闪电般的速度送达。Facebook使用Varnish来处理照片和个人资料图片,每天处理约数十亿个的数据请求。和其他的软件一样,Varnish也是开源的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。