`

Facebook技术体系窥探之基础组件(转载)

阅读更多
转载
http://www.yiihsia.com/2010/11/facebook%e6%8a%80%e6%9c%af%e4%bd%93%e7%b3%bb%e7%aa%a5%e6%8e%a2%e4%b9%8b%e5%9f%ba%e7%a1%80%e7%bb%84%e4%bb%b6/

Facebook,全球排名第一的SNS网站,活跃用户超到5亿,让我们来窥探一下他的技术体系

原文在这里:Facebook技术体系窥探之基础组件

和许多创业网站一样,Facebook一开始就选择了LAMP(Linux/Apache/Mysql/PHP)结构。但随着网站访问规模的不断提高,在原有的基础上做了大量持续的改进,Facebook也一直采取开放的态度,将自己的技术实践通过各种方式分享出来。即使你不是采用LAMP结构(比如我们一直以Java为主),也能受益良多。

大家都知道PHP是一种脚本语言,无需编译,但效率较低。Facebook对几种常用编程语言的效率做了一个对比

为了提高PHP的效率,Facebook做了很多优化,Op-code优化、APC缓存等。最后祭出一个大杀器:HipHop for PHP ,HipHop可以将PHP转换成优化后的C++。采用HipHop后,Web服务器的CPU占用减少了50%。Facebook已将HipHop开源

Facebook在架构上采用了SOA的思想,将独立、可复用的功能模块抽离成Service。为了高效的支持多语言调用,Facebook开发了Thrift框架,Thrift目前支持C++, PHP, Python, Java, Ruby, Erlang, Perl, Haskell等。对于异步消息的处理,Facebook则采用了同样是自己开发的日志消息系统:Scribe。Scribe采用client/server的结构,可以高效、健壮的收集各个子系统的消息日志,在中心服务器上集中处理。在服务治理方面,Facebook开发了服务管理平台以及服务监控系统。





Facebook提倡使用合适的语言做合适的事。目前Service的开发语言主要是C++,Java,Python和Erlang。

Facebook严重依赖于Memcached,大量的数据存放在Memcached中,Mysql大多数情况只作为简单的Key-Value持久化存储,这是因为Mysql的效率难以满足SNS网站数据计算的复杂性。目前Facebook有上千台Memcached服务器,存放着几十T的数据,支撑着每秒钟超过5000万次的操作请求。Facebook对Memcached的优化包括:针对64位的移植,改进序列化算法,使用UDP代替TCP,修改网卡驱动、优化网络协议栈、数据压缩等等。通过这些持续的优化,Memcached的单机吞吐能力从5万次提高到25万次

由于本人是Mysq的门外汉,就不在这班门弄斧了,感兴趣的同学可以参考一下MySQLatFacebook的Page。

后续

Facebook技术体系窥探之P级数据

Facebook技术体系窥探之社会化运算模式

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics