闻名网站的手艺成长过程
Google今朝Alexa排名第1。它降生于1997年,事前是一个研讨性项目,每个月build一次索引,build出来的索引经由过程sharding(shard by doc)的体例涣散到多台办事器(Index Server)上,详细的网页数据一样经由过程sharding的体例涣散到多台办事器(Doc Server)上,当用户提交要求时,经由过程前端的一台办事器将要求提交给Index Server获得打了分的倒排索引,然后从Doc Server提取详细的网页信息(比方网页题目、搜索环节词婚配的片断信息等),最终展现给用户。
随着索引的北京网站建造(www.sino-web.net)增加,这个结构可经由过程增加Index Server和Doc Server来存储索引和网页的数据,但如故会面临其他很多方面的题目,因而在这以后的十多年的时辰里,Google做了很多事情来改良下面的结构。
1999年,Google增加了一个Cache Cluster,用来Cache查询的索引结果和文档片断信息,同时将Index Server和Doc Server经由过程Replicate的体例酿成了Cluster。这两个革新带来的好处是网站的呼应速率、可撑持的接见量和可用性(Availability)获得了晋升。这个调动组成了成本的增加,Google在硬件方面的气势派头一直是不消高贵的高端硬件,而是在软件层面来包管系统的牢靠性及高机能,因而同年,Google入部动手采用自行筹划的办事器来低落成本。2000年,Google入部动手自行筹划DataCenter,采用了各种门径(比方采用其他的制冷门径来替换空调)来优化PUE(动力利用率),同时对自行筹划的办事器也做了很多化。2001年,Google对Index的花样举办了点窜,将一切的Index放入内存, 此次革新带来的好处是网站的呼应速率和可撑持的接见量获得了极大的晋升。2003年,Google宣布了文章Google Cluster Architecture,其Cluster结构组成为硬件LB+Index Cluster+Doc Cluster+大批便宜办事器(比方IDE硬盘、性价比高的CPU等),经由过程并行处置+sharding来包管在低落对硬件要求的同时,呼应速率如故很快。同年Google宣布了关于Google文件系统的论文(GFS在2000年就已上线),这篇论文很大水平也表现了Google不消高贵硬件的气势派头,经由过程GFS+大批便宜的办事器便可存储大批的数据。2004年,Google再次对Index的花样举办了点窜,使得网站的呼应速率延续晋升。同年Google宣布关于MapReduce的论文,经由过程MapReduce+大批便宜的办事器便可疾速完成之前要利用高贵小型机、中型机甚至是大型机才干完成的计算使命,而这明显对Google疾速地构建索引供应了很大的接济。2006年,Google宣布了关于BigTable的论文(2003年入部动手上线),使得海量数据的分析可以或许抵达在线系统的要求了,这对Google晋升网站的呼应速率起到了很大的接济。
以上3篇论文完全转变了业界对海量数据的存储、分析和检索的门径(小道新闻:Google内部已完成了GFS、MapReduce、BigTable的换取),也奠基了Google在业界的手艺辅导职位。
在一些场景中,Google也采用MySQL来存储数据。一样,Google对MySQL也做了很多点窜,它利用的MySQL信息可以或许从https://code.谷歌.com/p/谷歌-mysql/体会。
2007年,Google将build索引的时辰收缩到分钟级,当新网页涌现后,几分钟后便可在Google搜索到,同时将Index Cluster经由过程Protocol Buffers对外供应Service,以供Google各种搜索(比方网页、图片、新闻、册本等)利用,除Index Cluster供应的Service外,另有很多其他的Service,比方告白、词法检查等。Google的一次搜索梗概必要挪用内部50个以上的Service,Service重要用C++或Java来编写。2009年,Google的一篇《How Google uses Linux》文章,揭露了Google在晋升机械利用率方面也做了很多的起劲,比方将差异成本消耗范例的利用放置在同一台机械上。
在以后,Google又研发了Colossus(下一代类GFS文件系统)、Spanner(下一代类BigTable海量存储和计算架构)、及时搜索(基于Colossus完成),重要都是为了晋升搜索的及时性和存储更多数据。除在海量数据相关手艺上的改革外,Google也不休对业界的传统手艺举办立异,比方进步TCP的初始堵塞窗口值、改良HTTP的SPDY和谈、新的图片花样WebP等。
在Google的成长过程中,其手艺的革新重要环抱在可伸缩性、机能、成本和可用性4个方面,Google不采用高贵硬件的气势派头和抢先其他网站的数据量决意了其手艺革新底子都是对传统的软硬件手艺的改革。
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个方面。
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)。
Twitter的数据存储一贯采用MySQL,成长过程中涌现的小插曲是,当Facebook开源了Cassandra时,Twitter本筹划利用,但最终仍是废弃,如故坚持了利用MySQL,Twitter的MySQL版本已开源(https://github.com/twitter/mysql)。Twitter也是采用分库分表的体例来撑持大数据量,利用Memcached来Cache tweet,timeline的信息则迁徙为用Redis来Cache。
2010年,Twitter在盐湖城具有了第一个自建的DataCenter,重如果为了增加可控性。从Twitter的成长过程看,6年来它的手艺革新重要环抱可伸缩和可用性。
作为一家电子商务网站的员工,请应允我在此引见这个Alexa排名21的闻名电子商务网站的手艺演变。
1995年,eBay降生,事前采用CGI编写,数据库采用的是GDBM,最多只能撑持5万件在线商品。1997年,eBay将操作系统从FreeBSD迁徙到Windows NT,别的,将数据库从GDBM迁徙为Oracle。1999年,eBay将前端系统革新为Cluster(之前只需一台主机),采用Resonate作为负载平衡,后端的Oracle机械进级为Sun E1000小型机,同年给数据库增加了一台机械作为备库,晋升可用性。前端机械随着接见量不休增加还可以或许对于,但数据库机械在1999年11月时已抵达了瓶颈(已不克不及再加CPU和内存了),因而在11月入部动手将数据库按停业拆分为多个库。2001-2002年,eBay将数据表举办了水平拆分,比方按类目存储商品,同时放置Oracle的小型机换为Sun A3500。2002年,将全部网站迁徙为用Java构建,在这个阶段,做了DAL框架来屏障数据库分库分表带来的影响,同时还筹划了一个拓荒框架以供拓荒人员更好地上手举办功能拓荒。从eBay的全部成长过程来看,手艺革新重要环抱在可伸缩性和可用性两点。
腾讯今朝Alexa排名第9。最后QQ IM采用的是单台接入办事器来处置用户的登录和状况坚持,但在成长到一百万用户同时在线时,这台办事器已没法撑持。因而QQ IM将一切单台办事器革新为了集群,并增加了状况同步办事器,由其完成集群内状况的同步,用户的信息存储在MySQL中,做了分库分表,密友关系存储在自行完成的文件存储中。为了晋升过程间通讯的效力,腾讯自行完成了用户态IPC。以后腾讯将状况同步办事器也革新为同步集群,以撑持愈来愈多的在线用户。在经历了后面频频革新后,已底子能撑持万万级别的,用户同时在线,但可用性比较差,因而腾讯对QQ IM再次举办革新,完成了同城跨IDC的容灾,加强了监控和运维系统的扶植。尔后腾讯决意对QQ IM架构完整重写(梗概是2009年延续到现在),重如果为了加强灵动性、撑持跨都会的IDC、撑持万万级的密友。在此次大的手艺革新过程中,腾讯的数据都不再存储于MySQL中,而是悉数存储在了自己筹划的系统里。
从QQ IM的手艺演变来看,其手艺革新重如果环抱在可伸缩性和可用性上。
2003年,淘宝降生,直接购买,了一个商业的phpAuction的软件,在此底子上革新发生了淘宝。2004年,将系统由PHP迁徙到Java,MySQL迁徙为Oracle(小型机、高端存储装备),利用办事器采用了WebLogic。2005-2007年的成长过程中,用JBoss替换了WebLogic,对数据库举办了分库,基于BDB做了散布式缓存,自行拓荒了散布式文件系统TFS以撑持小文件的存储,并扶植了自己的CDN。2007-2009年对利用系统举办垂直拆分,拆分后的系统都以Service的体例对外供应功能,对数据采用了垂直和水平拆分。
在举办了数据的垂直和水平拆分后,Oracle发生的成本愈来愈高,因而在以后的几年,淘宝又入部动手将数据逐渐从Oracle迁徙到MySQL,同时入部动手测验考试新型的数据存储计划,比方采用HBase来撑持汗青生意业务定单的存储和检索等。近几年淘宝入部动手举办Linux内核、JVM、Nginx等软件的点窜定制事情,同时也自行筹划了低能耗办事器,同时在软硬件上举办优化,以更好地低落成本。
从淘宝的全部成长过程来看,手艺革新重要环抱在可伸缩性和可用性两点,现在也入部动手逐渐将精神投入在了机能和成本上。今朝淘宝的Alexa排名为第14。
总结
从下面这些Alexa排名靠前网站的手艺成长过程来看,每家网站因为其所承当的停业差异、团队人员组成差异、干事气势派头相异,在手艺的差异成长阶段中会采用差异的,门径来撑持停业的成长,但底子都邑环抱在可伸缩性、可用性、机能和成本这4点上,在成长到比较大范围后,各网站在手艺结构上有了很多的相似点,并且这些结构还将延续举办演变。
原作者林昊,就任于淘宝,2007-2010年担任筹划和完成淘宝的办事框架,此办事框架在淘宝大面积利用,每天承当了150亿+的要求;2011年入部动手担任HBase在淘宝的落地,今朝淘宝已有20个以上的在线项目在利用HBase。
别的: Cassandra
筹划Cassandra存储的时辰,书中创议要环抱着查询建模,而不是最早对数据举办建模。有人反对这个,认为查询的范例调动太快了。作者是这样辩驳的:查询范例和数据自己都有调动的。Cassandra最底子的模子是庞杂的kv,以是,仍是得尽能够的环抱查询建模。这里怎样更好的调和,是一个有挑衅的事情。
Cassandra的column family就像一个表结构,点窜了要重启,一个cf独自一个文件,一行数据可以或许有多个column family。user是一个family, user_ext一个family, row key 为uid, 觉得cassandra用起来会更像db,
Youtube的交际趋向司理Kevin Allocca注释最火的youtube视频的三个共同点。1、Tastemakers - 达人的举荐。 2、Community - 志气相投的群体。 3、Surprise - 意想不到的惊奇。
Cassandra在360的利用,用户保藏夹、图床、垂直搜索等在线停业有大批存储需求,考虑到MySQL不克不及知足需求,然则HBase有Availabilty的瑕玷,以是遴选了Cassandra,今朝范围是600~700台,岁尾估计1500摆布,今朝没有出过大的妨碍。估计是环球最大范围Cassandra集群
Key-Value,Column oriented,Document oriented三个观点的鉴识和联络谁能帮我注释清晰。看了图中的分别,我完全懵懂了。我一贯认为三者是一回事
:息行列传输:kafka,timetunnel,kestrel,scribe;列存储数据库范畴hbase;kv型数据库:cassandra,riak,voldemort,tair;文档数据库:mongodb,couchdb;图形数据库:neo4j,pregel,flockdb;流式计算:storm,iprocess;及时计算:prom;图形计算:pregel,apache hama;离线计算:hive,spark。
facebook 局部kv逾期用庞杂的两头层办理
mysql上没有join查询,并采用高贵的Fusion IO。nginx好于lighttpd。scribe是个好器械
本文颁布宣布于北京网站建造公司尚品中国http://www.sino-web.net/