知名網(wǎng)站的技術(shù)發(fā)展歷程與實(shí)力
  • 更新時(shí)間:2024-11-08 09:08:53
  • 網(wǎng)站建設(shè)
  • 發(fā)布時(shí)間:1年前
  • 202

知名網(wǎng)站的技術(shù)發(fā)展歷程

谷歌目前在Alexa 上排名第一。它誕生于1997年,當(dāng)時(shí)是一個(gè)研究項(xiàng)目。該索引每月建立一次。構(gòu)建的索引通過分片(shard by doc)的方式分布到多個(gè)服務(wù)器(Index Server)。具體的網(wǎng)頁(yè)數(shù)據(jù)也通過分片的方式分發(fā)到多個(gè)服務(wù)器(Doc Server)。當(dāng)用戶提交請(qǐng)求時(shí),前端服務(wù)器將請(qǐng)求提交給Index Server獲取打分的倒排索引,然后從Doc Server中提取具體的網(wǎng)頁(yè)信息。 (如網(wǎng)頁(yè)的標(biāo)題、匹配搜索關(guān)鍵詞的片段信息等),最后展示給用戶。

隨著索引北京網(wǎng)站制作(www.tlkjt.com)的增加,這種結(jié)構(gòu)可以通過增加Index Server和Doc Server來存儲(chǔ)索引和網(wǎng)頁(yè)數(shù)據(jù),但是它仍然面臨著許多其他問題,所以在這之后的十幾年里一時(shí)間,谷歌已經(jīng)做了很多事情來改進(jìn)上面的結(jié)構(gòu)。

1999 年,Google 增加了一個(gè)Cache Cluster 來緩存索引結(jié)果和文檔片段信息,以供Cache 查詢使用。同時(shí)通過Replicate把Index Server和Doc Server變成了Clusters。這兩個(gè)改造的好處是網(wǎng)站的響應(yīng)速度、可支持的訪問量、可用性(Availability)都得到了提升。這種變化導(dǎo)致成本增加。谷歌的硬件風(fēng)格一直是不使用昂貴的高端硬件,而是在軟件層面保證系統(tǒng)的可靠性和高性能。于是在同一年,谷歌開始使用自行設(shè)計(jì)的服務(wù)器來降低成本。 2000年,谷歌開始設(shè)計(jì)自己的數(shù)據(jù)中心,采用各種方法(比如用其他冷卻方式代替空調(diào))來優(yōu)化PUE(能源利用率),同時(shí)也對(duì)其自行設(shè)計(jì)的服務(wù)器進(jìn)行了大量改進(jìn)。 2001年,谷歌修改了Index的格式,將Index全部放入內(nèi)存。這種改造的好處是網(wǎng)站的響應(yīng)速度和可以支持的訪問量都有了很大的提升。 2003 年,Google 發(fā)表了文章Google Cluster Architecture。其Cluster結(jié)構(gòu)由硬件LB+Index Cluster+Doc Cluster+大量廉價(jià)服務(wù)器(如IDE硬盤、高性價(jià)比CPU等)組成,通過并行處理+分片保證硬件減少。請(qǐng)求時(shí)響應(yīng)速度還是很快的。同年,Google 發(fā)表了一篇關(guān)于Google 文件系統(tǒng)(GFS 于2000 年推出)的論文。這篇論文很大程度上體現(xiàn)了谷歌不使用昂貴硬件的風(fēng)格,通過GFS+大量廉價(jià)服務(wù)器可以存儲(chǔ)大量數(shù)據(jù)。 2004年,谷歌再次修改了Index的格式,使網(wǎng)站的響應(yīng)速度不斷提高。同年,Google 發(fā)表了一篇關(guān)于MapReduce 的論文。通過MapReduce+大量廉價(jià)服務(wù)器,可以快速完成以往使用昂貴的小型機(jī)、中型機(jī)甚至大型機(jī)才能完成的計(jì)算任務(wù)。這顯然為谷歌快速建立索引提供了很大的幫助。幫助。 2006年,Google發(fā)表了一篇關(guān)于BigTable(2003年開始上線)的論文,使得對(duì)海量數(shù)據(jù)的分析能夠滿足在線系統(tǒng)的要求,極大地幫助Google提高了網(wǎng)站的響應(yīng)速度。

以上三篇論文徹底改變了業(yè)界存儲(chǔ)、分析、檢索海量數(shù)據(jù)的方式(八卦:谷歌完成了GFS、MapReduce、BigTable的替換),也奠定了谷歌在業(yè)界的技術(shù)領(lǐng)先地位。

在某些場(chǎng)景下,Google 也使用MySQL 來存儲(chǔ)數(shù)據(jù)。同樣,Google對(duì)MySQL也做了很多修改,其使用的MySQL資料可以從https://code.google.com/p/google-mysql/了解到。

2007年,谷歌將建立索引的時(shí)間縮短到分鐘級(jí)。當(dāng)一個(gè)新的網(wǎng)頁(yè)出現(xiàn)時(shí),幾分鐘后就可以在谷歌上搜索到。同時(shí)Index Cluster通過Protocol Buffers為Google的各種搜索(如網(wǎng)頁(yè)、圖片、新聞、書籍等)提供服務(wù),除了Index Cluster提供的服務(wù)外,還有很多其他的服務(wù),比如如廣告、詞法檢查等。谷歌搜索大概需要調(diào)用50多個(gè)內(nèi)部服務(wù),這些服務(wù)主要是用C++或Java編寫的。 2009年,谷歌的一篇《How Google uses Linux》文章透露,谷歌在提高機(jī)器利用率方面也做了很多努力,比如在同一臺(tái)機(jī)器上部署不同資源消耗類型的應(yīng)用程序。

后來谷歌開發(fā)了Colossus(下一代類GFS文件系統(tǒng))、Spanner(下一代類BigTable海量存儲(chǔ)和計(jì)算架構(gòu))、實(shí)時(shí)搜索(基于Colossus),主要是提高實(shí)時(shí)搜索和更高效的存儲(chǔ)。多個(gè)數(shù)據(jù)。除了在海量數(shù)據(jù)相關(guān)技術(shù)上的創(chuàng)新,谷歌還在業(yè)界傳統(tǒng)技術(shù)上不斷創(chuàng)新,比如增加TCP的初始擁塞窗口值、改進(jìn)HTTP的SPDY協(xié)議、新的圖片格式WebP等。

在谷歌的發(fā)展過程中,其技術(shù)的轉(zhuǎn)型主要圍繞可擴(kuò)展性、性能、成本和可用性四個(gè)方面展開。谷歌不采用昂貴的硬件和領(lǐng)先的風(fēng)格

其他網(wǎng)站的數(shù)據(jù)量決定了其技術(shù)改造基本都是對(duì)傳統(tǒng)的軟硬件技術(shù)的革新。

Facebook目前Alexa排名第2。它采用LAMP構(gòu)建,隨著業(yè)務(wù)的發(fā)展,它也在技術(shù)上做了很多改造。
作為改造的第一步,F(xiàn)acebook首先在LAMP結(jié)構(gòu)中增加了Memcached,用來緩存各種數(shù)據(jù),從而大幅度提升系統(tǒng)的響應(yīng)時(shí)間以及可支撐的訪問量,之后又增加了Services層,將News Feed、Search等較通用的功能作為Service提供給前端的PHP系統(tǒng)使用,前端的系統(tǒng)通過Thrift訪問這些Service。Facebook采用了多種語(yǔ)言來編寫各種不同的Service,主要是針對(duì)不同的場(chǎng)景選擇合適的語(yǔ)言,例如C++、Java、Erlang。

大量使用Memcached以及訪問量的不斷上漲,導(dǎo)致訪問Memcached的網(wǎng)絡(luò)流量太大,交換機(jī)無法支撐,F(xiàn)acebook通過改造采用UDP的方式來訪問Memcached,以降低單連接上的網(wǎng)絡(luò)流量。除此之外,還有其他一些改造,具體信息可以查看http://on.fb.me/8R0C。

PHP作為腳本語(yǔ)言,優(yōu)勢(shì)是開發(fā)簡(jiǎn)單、易上手,劣勢(shì)是需要消耗較多的CPU和內(nèi)存。當(dāng)Facebook的訪問量增長(zhǎng)到了一定規(guī)模后,這個(gè)劣勢(shì)就比較突出了,于是從2007年起,F(xiàn)acebook就嘗試多種方法來解決這個(gè)問題,最后誕生于Facebook Hackathon的HipHop產(chǎn)品成功地脫穎而出。

HipHop可以自動(dòng)將PHP轉(zhuǎn)化為C++代碼,F(xiàn)acebook在使用HipHop后,同等配置的機(jī)器,可支撐的請(qǐng)求量是之前的6倍,CPU的使用率平均下降了50%,從而為Facebook節(jié)省了大量主機(jī)。將來Facebook還會(huì)對(duì)HipHop進(jìn)行再次改進(jìn),通過HipHop將PHP編譯為bytecode,放入HipHop VM中執(zhí)行,再由HipHop VM來編譯為機(jī)器代碼,方式與JIT類似。

2009年,F(xiàn)acebook研發(fā)了BigPipe,借助此系統(tǒng),F(xiàn)acebook成功讓網(wǎng)站的速度提升了兩倍。隨著Facebook訪問量的上漲,收集眾多服務(wù)器上的執(zhí)行日志也開始面臨挑戰(zhàn),于是Facebook研發(fā)了Scribe來解決此問題。對(duì)于存儲(chǔ)在MySQL中的數(shù)據(jù),F(xiàn)acebook采用垂直拆分庫(kù)和水平拆分表的方式來支撐不斷增長(zhǎng)的數(shù)據(jù)量。作為Facebook技術(shù)體系中重要的一環(huán),F(xiàn)acebook也對(duì)MySQL進(jìn)行了很多優(yōu)化和改進(jìn),例如Online Schema Change等,更多信息可見http://www.facebook.com/MySQLAtFacebook。

發(fā)展之初的Facebook采用了高端的存儲(chǔ)設(shè)備(例如NetApp、Akamai)來存圖片,隨著圖片不斷增加,成本也大幅提高,于是2009年Facebook開發(fā)了Haystack來存儲(chǔ)圖片。Haystack可采用廉價(jià)的PC Server進(jìn)行存儲(chǔ),大幅度降低了成本。

Facebook除了使用MySQL存儲(chǔ)數(shù)據(jù)外,近幾年也開始摸索采用新的方式。在2008年Facebook開發(fā)了Cassandra,在Message Inbox Search中作為新的存儲(chǔ)方式。不過在2010年,F(xiàn)acebook又放棄了Cassandra,轉(zhuǎn)為采用HBase作為其Messages的存儲(chǔ),并在2011年將HBase應(yīng)用在了Facebook更多的項(xiàng)目上(例如Puma、ODS)。據(jù)說,現(xiàn)在Facebook更是在嘗試將其用戶以及關(guān)系數(shù)據(jù)從MySQL遷移到HBase。
從2009年開始,F(xiàn)acebook嘗試自行設(shè)計(jì)DataCenter以及服務(wù)器,以降低其運(yùn)行成本,并對(duì)外開放了其構(gòu)建的PUE僅1.07的DataCenter的相關(guān)技術(shù)。Facebook在技術(shù)方面的基本原則是:“在能用開源產(chǎn)品的情況下就用開源,根據(jù)情況對(duì)其進(jìn)行優(yōu)化并反饋給社區(qū)”。從Facebook的技術(shù)發(fā)展歷程上可以看到這個(gè)原則貫徹始終,F(xiàn)acebook的技術(shù)改造也主要是圍繞在可伸縮、性能、成本和可用性4個(gè)方面。

Twitter目前Alexa排名第8。在2006年誕生之時(shí)是采用Ruby On Rails+ MySQL構(gòu)建的,2007年增加了Memcached作為Cache層,以提升響應(yīng)速度。基于Ruby on Rails讓Twitter享受到了快速的開發(fā)能力,但隨著訪問量的增長(zhǎng),其對(duì)CPU和內(nèi)存的消耗也讓Twitter痛苦不堪,于是Twitter做了不少改造和努力,例如編寫了一個(gè)優(yōu)化版的Ruby GC。

2008年Twitter決定逐步往Java遷移,選擇了Scala作為主力的開發(fā)語(yǔ)言(理由是“難以向一屋子的Ruby程序員推銷Java”),采用Thrift作為其主要的通信框架,開發(fā)了Finagle作為其Service Framework,可將后端各種功能暴露為Service提供給前端系統(tǒng)使用,使得前端系統(tǒng)無需關(guān)心各種不同的通信協(xié)議(例如對(duì)于使用者可以用同樣的調(diào)用服務(wù)的方式去訪問Memcache、Redis、Thrift服務(wù)端),開發(fā)了Kestrel作為其消息中間件(替代之前用Ruby寫的Starling)。

Twitter的數(shù)據(jù)存儲(chǔ)一直采用MySQL,發(fā)展過程中出現(xiàn)的小插曲是,當(dāng)Facebook開源了Cassandra時(shí),Twitter本計(jì)劃使用,但最終還是放棄,仍然保持了使用MySQL,Twitter的MySQL版本已開源(https://github.com/twitter/mysql)。Twitter也是采用分庫(kù)分表的方式來支撐大數(shù)據(jù)量,使用Memcached來Cache tweet,timeline的信息則遷移為用Redis來Cache。
2010年,Twitter在鹽湖城擁有了第一個(gè)自建的DataCenter,主要是為了增加可控性。從Twitter的發(fā)展過程看,6年來它的技術(shù)改造主要圍繞可伸縮以及可用性。

作為一家電子商務(wù)網(wǎng)站的員工,請(qǐng)?jiān)试S我在此介紹這個(gè)Alexa排名21的著名電子商務(wù)網(wǎng)站的技術(shù)演變。
1995年,eBay誕生,當(dāng)時(shí)采用CGI編寫,數(shù)據(jù)庫(kù)采用的是GDBM,最多只能支撐5萬件在線商品。1997年,eBay將操作系統(tǒng)從FreeBSD遷移到Windows NT,另外將數(shù)據(jù)庫(kù)從GDBM遷移為Oracle。1999年,eBay將前端系統(tǒng)改造為Cluster(之前只有一臺(tái)主機(jī)),采用Resonate作為負(fù)載均衡,后端的Oracle機(jī)器升級(jí)為Sun E1000小型機(jī),同年給數(shù)據(jù)庫(kù)增加了一臺(tái)機(jī)器作為備庫(kù),提升可用性。前端機(jī)器隨著訪問量不斷增加還可以應(yīng)付,但數(shù)據(jù)庫(kù)機(jī)器在1999年11月時(shí)已經(jīng)達(dá)到了瓶頸(已經(jīng)不能再加CPU和內(nèi)存了),于是在11月開始將數(shù)據(jù)庫(kù)按業(yè)務(wù)拆分為多個(gè)庫(kù)。2001-2002年,eBay將數(shù)據(jù)表進(jìn)行了水平拆分,例如按類目存儲(chǔ)商品,同時(shí)部署Oracle的小型機(jī)換為Sun A3500。2002年,將整個(gè)網(wǎng)站遷移為用Java構(gòu)建,在這個(gè)階段,做了DAL框架來屏蔽數(shù)據(jù)庫(kù)分庫(kù)分表帶來的影響,同時(shí)還設(shè)計(jì)了一個(gè)開發(fā)框架以供開發(fā)人員更好地上手進(jìn)行功能開發(fā)。從eBay的整個(gè)發(fā)展過程來看,技術(shù)改造主要圍繞在可伸縮性和可用性兩點(diǎn)。

騰訊目前Alexa排名第9。最初QQ IM采用的是單臺(tái)接入服務(wù)器來處理用戶的登錄和狀態(tài)保持,但在發(fā)展到一百萬用戶同時(shí)在線時(shí),這臺(tái)服務(wù)器已經(jīng)無法支撐。于是QQ IM將所有單臺(tái)服務(wù)器改造為了集群,并增加了狀態(tài)同步服務(wù)器,由其完成集群內(nèi)狀態(tài)的同步,用戶的信息存儲(chǔ)在MySQL中,做了分庫(kù)分表,好友關(guān)系存儲(chǔ)在自行實(shí)現(xiàn)的文件存儲(chǔ)中。為了提升進(jìn)程間通信的效率,騰訊自行實(shí)現(xiàn)了用戶態(tài)IPC。之后騰訊將狀態(tài)同步服務(wù)器也改造為同步集群,以支撐越來越多的在線用戶。在經(jīng)歷了前面幾次改造后,已基本能支撐千萬級(jí)別的用戶同時(shí)在線,但可用性比較差,于是騰訊對(duì)QQ IM再次進(jìn)行改造,實(shí)現(xiàn)了同城跨IDC的容災(zāi),加強(qiáng)了監(jiān)控和運(yùn)維系統(tǒng)的建設(shè)。此后騰訊決定對(duì)QQ IM架構(gòu)完全重寫(大概是2009年持續(xù)到現(xiàn)在),主要是為了增強(qiáng)靈活性、支持跨城市的IDC、支撐千萬級(jí)的好友。在這次大的技術(shù)改造過程中,騰訊的數(shù)據(jù)都不再存儲(chǔ)于MySQL中,而是全部存儲(chǔ)在了自己設(shè)計(jì)的系統(tǒng)里。
從QQ IM的技術(shù)演變來看,其技術(shù)改造主要是圍繞在可伸縮性和可用性上。

2003年,淘寶誕生,直接購(gòu)買了一個(gè)商業(yè)的phpAuction的軟件,在此基礎(chǔ)上改造產(chǎn)生了淘寶。2004年,將系統(tǒng)由PHP遷移到Java,MySQL遷移為Oracle(小型機(jī)、高端存儲(chǔ)設(shè)備),應(yīng)用服務(wù)器采用了WebLogic。2005-2007年的發(fā)展過程中,用JBoss替代了WebLogic,對(duì)數(shù)據(jù)庫(kù)進(jìn)行了分庫(kù),基于BDB做了分布式緩存,自行開發(fā)了分布式文件系統(tǒng)TFS以支持小文件的存儲(chǔ),并建設(shè)了自己的CDN。2007-2009年對(duì)應(yīng)用系統(tǒng)進(jìn)行垂直拆分,拆分后的系統(tǒng)都以Service的方式對(duì)外提供功能,對(duì)數(shù)據(jù)采用了垂直和水平拆分。
在進(jìn)行了數(shù)據(jù)的垂直和水平拆分后,Oracle產(chǎn)生的成本越來越高,于是在之后的幾年,淘寶又開始將數(shù)據(jù)逐漸從Oracle遷移到MySQL,同時(shí)開始嘗試新型的數(shù)據(jù)存儲(chǔ)方案,例如采用HBase來支撐歷史交易訂單的存儲(chǔ)和檢索等。近幾年淘寶開始進(jìn)行Linux內(nèi)核、JVM、Nginx等軟件的修改定制工作,同時(shí)也自行設(shè)計(jì)了低能耗服務(wù)器,同時(shí)在軟硬件上進(jìn)行優(yōu)化,以更好地降低成本。
從淘寶的整個(gè)發(fā)展過程來看,技術(shù)改造主要圍繞在可伸縮性和可用性兩點(diǎn),現(xiàn)在也開始逐漸將精力投入在了性能和成本上。目前淘寶的Alexa排名為第14。
總結(jié)
從上面這些Alexa排名靠前網(wǎng)站的技術(shù)發(fā)展過程來看,每家網(wǎng)站由于其所承擔(dān)的業(yè)務(wù)不同、團(tuán)隊(duì)人員組成不同、做事風(fēng)格相異,在技術(shù)的不同發(fā)展階段中會(huì)采用不同的方法來支撐業(yè)務(wù)的發(fā)展,但基本都會(huì)圍繞在可伸縮性、可用性、性能以及成本這4點(diǎn)上,在發(fā)展到比較大規(guī)模后,各網(wǎng)站在技術(shù)結(jié)構(gòu)上有了很多的相似點(diǎn),并且這些結(jié)構(gòu)還將繼續(xù)進(jìn)行演變。
原作者林昊,就職于淘寶,2007-2010年負(fù)責(zé)設(shè)計(jì)和實(shí)現(xiàn)淘寶的服務(wù)框架,此服務(wù)框架在淘寶大面積使用,每天承擔(dān)了150億+的請(qǐng)求;2011年開始負(fù)責(zé)HBase在淘寶的落地,目前淘寶已有20個(gè)以上的在線項(xiàng)目在使用HBase。
其它: Cassandra
設(shè)計(jì)Cassandra存儲(chǔ)的時(shí)候,書中建議要圍繞著查詢建模,而不是最先對(duì)數(shù)據(jù)進(jìn)行建模。有人反對(duì)這個(gè),認(rèn)為查詢的類型變化太快了。作者是這樣反駁的:查詢類型和數(shù)據(jù)本身都有變化的。Cassandra最根本的模型是簡(jiǎn)單的kv,所以,還是得盡可能的圍繞查詢建模。這里怎么更好的協(xié)調(diào),是一個(gè)有挑戰(zhàn)的事情。
Cassandra的column family就像一個(gè)表結(jié)構(gòu),修改了要重啟,一個(gè)cf單獨(dú)一個(gè)文件,一行數(shù)據(jù)可以有多個(gè)column family。user是一個(gè)family, user_ext一個(gè)family, row key 為uid, 感覺cassandra用起來會(huì)更像db,

Youtube的社交趨勢(shì)經(jīng)理Kevin Allocca解釋最火的youtube視頻的三個(gè)共同點(diǎn)。1、Tastemakers - 達(dá)人的推薦。 2、Community - 志氣相投的群體。 3、Surprise - 意想不到的驚奇。
Cassandra在360的應(yīng)用,用戶收藏夾、圖床、垂直搜索等在線業(yè)務(wù)有大量存儲(chǔ)需求,考慮到MySQL不能滿足需求,但是HBase有Availabilty的缺點(diǎn),所以選擇了Cassandra,目前規(guī)模是600~700臺(tái),年底預(yù)計(jì)1500左右,目前沒有出過大的故障。估計(jì)是全球最大規(guī)模Cassandra集群

Key-Value,Column oriented,Document oriented三個(gè)概念的區(qū)別和聯(lián)系誰能幫我解釋清楚??戳藞D中的劃分,我徹底糊涂了。我一直以為三者是一回事
:息隊(duì)列傳輸:kafka,timetunnel,kestrel,scribe;列存儲(chǔ)數(shù)據(jù)庫(kù)領(lǐng)域hbase;kv型數(shù)據(jù)庫(kù):cassandra,riak,voldemort,tair;文檔數(shù)據(jù)庫(kù):mongodb,couchdb;圖形數(shù)據(jù)庫(kù):neo4j,pregel,flockdb;流式計(jì)算:storm,iprocess;實(shí)時(shí)計(jì)算:prom;圖形計(jì)算:pregel,apache hama;離線計(jì)算:hive,spark。

facebook 局部kv過期用復(fù)雜的中間層解決
mysql上沒有join查詢,并采用昂貴的Fusion IO。nginx好于lighttpd。scribe是個(gè)好東西
本文發(fā)布于北京網(wǎng)站制作公司推來客http://www.tlkjt.com/

我們專注高端建站,小程序開發(fā)、軟件系統(tǒng)定制開發(fā)、BUG修復(fù)、物聯(lián)網(wǎng)開發(fā)、各類API接口對(duì)接開發(fā)等。十余年開發(fā)經(jīng)驗(yàn),每一個(gè)項(xiàng)目承諾做到滿意為止,多一次對(duì)比,一定讓您多一份收獲!

本文章出于推來客官網(wǎng),轉(zhuǎn)載請(qǐng)表明原文地址:https://www.tlkjt.com/web/13224.html
推薦文章

在線客服

掃碼聯(lián)系客服

3985758

回到頂部