CWYAlpha

Just another WordPress.com site

Thought this was cool: Facebook网站技术发展历程

leave a comment »


Facebook目前Alexa排名第2。它采用LAMP构建,随着业务的发展,它也在技术上做了很多改造。

作为改造的第一步,Facebook首先在LAMP结构中增加了Memcached,用来缓存各种数据,从而大幅度提升系统的响应时间以及可支撑的访问量,之后又增加了Services层,将News
Feed、Search等较通用的功能作为Service提供给前端的PHP系统使用,前端的系统通过Thrift访问这些Service。Facebook采用了多种语言来编写各种不同的Service,主要是针对不同的场景选择合适的语言,例如C++、Java、Erlang。

大量使用Memcached以及访问量的不断上涨,导致访问Memcached的网络流量太大,交换机无法支撑,Facebook通过改造采用UDP的方式来访问Memcached,以降低单连接上的网络流量。除此之外,还有其他一些改造,具体信息可以查看http://on.fb.me/8R0C

PHP作为脚本语言,优势是开发简单、易上手,劣势是需要消耗较多的CPU和内存。当Facebook的访问量增长到了一定规模后,这个劣势就比较突出了,于是从2007年起,Facebook就尝试多种方法来解决这个问题,最后诞生于Facebook
Hackathon的HipHop产品成功地脱颖而出。HipHop可以自动将PHP转化为C++代码,Facebook在使用HipHop后,同等配置的机器,可支撑的请求量是之前的6倍,CPU的使用率平均下降了50%,从而为Facebook节省了大量主机。将来Facebook还会对HipHop进行再次改进,通过HipHop将PHP编译为bytecode,放入HipHop
VM中执行,再由HipHop VM来编译为机器代码,方式与JIT类似。

2009年,Facebook研发了BigPipe,借助此系统,Facebook成功让网站的速度提升了两倍。随着Facebook访问量的上涨,收集众多服务器上的执行日志也开始面临挑战,于是Facebook研发了Scribe来解决此问题。对于存储在MySQL中的数据,Facebook采用垂直拆分库和水平拆分表的方式来支撑不断增长的数据量。作为Facebook技术体系中重要的一环,Facebook也对MySQL进行了很多优化和改进,例如Online
Schema Change等,更多信息可见http://www.facebook.com/MySQLAtFacebook

发展之初的Facebook采用了高端的存储设备(例如NetApp、Akamai)来存图片,随着图片不断增加,成本也大幅提高,于是2009年Facebook开发了Haystack来存储图片。Haystack可采用廉价的PC
Server进行存储,大幅度降低了成本。

Facebook除了使用MySQL存储数据外,近几年也开始摸索采用新的方式。在2008年Facebook开发了Cassandra,在Message
Inbox
Search中作为新的存储方式。不过在2010年,Facebook又放弃了Cassandra,转为采用HBase作为其Messages的存储,并在2011年将HBase应用在了Facebook更多的项目上(例如Puma、ODS)。据说,现在Facebook更是在尝试将其用户以及关系数据从MySQL迁移到HBase。

从2009年开始,Facebook尝试自行设计DataCenter以及服务器,以降低其运行成本,并对外开放了其构建的PUE仅1.07的DataCenter的相关技术。Facebook在技术方面的基本原则是:“在能用开源产品的情况下就用开源,根据情况对其进行优化并反馈给社区”。从Facebook的技术发展历程上可以看到这个原则贯彻始终,Facebook的技术改造也主要是围绕在可伸缩、性能、成本和可用性4个方面。

 

转载自:http://www.programmer.com.cn/11800/

  秀萌宝照片,酷赢“拉比盒子”  游戏测试:三国时期谁是你最好的兄弟!!  发现兴趣所在,玩转新浪Qing!
from 互联网旁观者: http://blog.sina.com.cn/s/blog_72995dcc010149n4.html

Written by cwyalpha

六月 2, 2012 在 11:08 上午

发表在 Uncategorized

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: