会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 建站经验 > 详解知名网站的手艺成长过程

详解知名网站的手艺成长过程

时间:2012-05-25 18:41:35   作者:   来源:   点击:

在谷歌的成长过程中,其手艺的改革主要围绕在可伸缩性、性能、本钱和可用性4个方面,谷歌不采取昂贵硬件的气概以及领先其他网站的数据量决定了其手艺改革根基都是对传统的软硬件手艺的改革。

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/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等,更多信息可见.facebook/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个方面。

Twitter目前 Alexa排名第8。在2006年出世之时是采取Ruby On Rails+ MySQL构建的,2007年增加了Memcached作为Cache层,以提升响应速度。基于Ruby on Rails让Twitter享受到了快速的开辟能力,但随着拜候量的增长,其对CPU和内存的消耗也让Twitter痛苦不堪,于是Twitter做了很多改革和努力,例如编写了一个优化版的Ruby GC。

2008年Twitter决定逐步往Java迁移,选择了Scala作为主力的开辟语言(来由是"难以向一屋子的Ruby法度员推销Java"),采取Thrift作为其主要的通信框架,开辟了Finagle作为其Service Framework,可将后端各类功能吐露为Service提供给前端系统使用,使得前端系统无需关心各类不合的通信协议(例如对使用者可以用同样的挪用办事的体例去拜候Memcache、Redis、Thrift办事端),开辟了Kestrel作为其消息中间件(替代之前用Ruby写的 Starling)。

分享到:

网友评论

热门建站经验