日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通向高可扩展性之路(谷歌篇)

發(fā)布時間:2025/4/9 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通向高可扩展性之路(谷歌篇) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文鏈接:http://highscalability.com/google-architecture

原文寫于2008年11月22日,以下是譯文:

?

平臺:

1. Linux

2. 很多種語言: Python, Java, C++

?

平臺上有什么?

一些數(shù)據(jù):

1. 2006年時大約有450,000 臺廉價商用服務(wù)器

2. 2005年的時候谷歌已經(jīng)索引了80億網(wǎng)頁。現(xiàn)在大概沒人知道他們已經(jīng)索引了多少網(wǎng)頁了。

3. 現(xiàn)在谷歌有超過200個GFS集群。一個集群可以有1000甚至5000臺機(jī)器。成千上萬臺的機(jī)器從這些可以裝得下5PB存儲的GFS集群中讀取數(shù)據(jù)。一個集群的總的讀寫吞吐量可以高達(dá)每秒40GB。

4. 目前谷歌已有6000個MapReduce的程序,還正在已每個月數(shù)百的速度增加。

5. BigTable可以擴(kuò)展到存儲數(shù)以十億計得URL,數(shù)以百TB計的衛(wèi)星圖片,以及數(shù)以億計的用戶偏好。

?

技術(shù)堆棧:

谷歌把他們的基礎(chǔ)設(shè)施視為一個三層的堆棧:

1. 產(chǎn)品:搜索,廣告,郵件,地圖,視頻,聊天,博客

2. 分布式系統(tǒng)基礎(chǔ)設(shè)施: GFS,MapReduce, 和BigTable

3. 計算平臺: 在各個不同數(shù)據(jù)中心運(yùn)行著的那些機(jī)器

4. 確保公司員工可以以較低的成本方便地部署應(yīng)用

5. 關(guān)注每一個應(yīng)用的性價比。花更多的錢在硬件上來確保不丟失日志數(shù)據(jù),但是在其他類型的數(shù)據(jù)上花更少的錢。雖然這么說,但是谷歌不丟失數(shù)據(jù)。

?

基于GFS(Google File System)的可靠存儲機(jī)制:

1. 可靠地可擴(kuò)展存儲是任何應(yīng)用的一個核心需求。GFS是谷歌的核心存儲平臺。

2. 谷歌文件系統(tǒng) - 大規(guī)模分布式日志結(jié)構(gòu)的文件系統(tǒng),用來存儲了很多很多數(shù)據(jù)

3. 為什么要自己開發(fā)這套系統(tǒng)而不是拿個已經(jīng)存在的系統(tǒng)來用用?因為他們可以控制所有的細(xì)節(jié),并且正是這套系統(tǒng)把谷歌和其他人區(qū)分了開來。他們需要:

  - 多個數(shù)據(jù)中心之間的高可靠性

  - 可擴(kuò)展到數(shù)千個網(wǎng)絡(luò)節(jié)點(diǎn)

  - 巨大的讀寫帶寬要求

  - 支持大塊的GB級的數(shù)據(jù)

  - 有效地將多個操作分散到不同節(jié)點(diǎn)來減少瓶頸

4. 系統(tǒng)有主服務(wù)器和塊服務(wù)器

  - 主服務(wù)器用來存儲各種數(shù)據(jù)文件的元數(shù)據(jù)。真正的數(shù)據(jù)在文件系統(tǒng)中存為多個64MB大小的塊文件。客戶從主服務(wù)器獲取元數(shù)據(jù)并由此找到包含他們想要的文件的塊服務(wù)器。

  - 塊服務(wù)器在硬盤上存著那些真正的數(shù)據(jù)。每一個塊都被復(fù)制到三個不同的塊服務(wù)器上來提供冗余,以防有的服務(wù)器會出故障。一旦客戶從主服務(wù)器上獲取了路徑信息,客戶的應(yīng)用就會從塊服務(wù)器上直接下載文件。

5. 一個新的應(yīng)用上線既可以使用已有的GFS集群,也可以建立一個新的集群。理解谷歌在他們的數(shù)據(jù)中心中使用什么樣的配置過程會是一件非常有趣的事情。

6. 關(guān)鍵是要有足夠的基礎(chǔ)設(shè)施來確保人們在上線他們的應(yīng)用時有選擇的余地。GFS可以被適當(dāng)?shù)卣{(diào)整來適應(yīng)不同應(yīng)用的需求。

?

用MapReduce來處理數(shù)據(jù):

1. 現(xiàn)在你有了一個很好的存儲系統(tǒng),那么這么多數(shù)據(jù)能用來干嘛呢?我們假設(shè)你在1000臺機(jī)器上有好幾TB的數(shù)據(jù)。數(shù)據(jù)庫通常不能支持這么大的數(shù)據(jù),就算支持,這樣的數(shù)據(jù)庫也會非常昂貴。這時MapReduce就體現(xiàn)出了作用。

2. MapReduce是一個編程模型,也包含一個與之關(guān)聯(lián)的處理和產(chǎn)生大數(shù)據(jù)集的具體實(shí)現(xiàn)。用戶聲明一個映射(map)函數(shù)來把一個鍵值對(key value pair)轉(zhuǎn)化成多個作為中間變量的鍵值對,以及一個歸納(reduce)函數(shù)來合并所有中間變量中具有相同鍵(key)的值(value)。很多現(xiàn)實(shí)中的任務(wù)可以用這個模型來表達(dá)。用這種功能性風(fēng)格寫出來的代碼可以自動在大集群的商用服務(wù)器上并行執(zhí)行。有一個實(shí)時系統(tǒng)會來管理輸入數(shù)據(jù)的分割,在多臺機(jī)器上調(diào)度程序的運(yùn)行,處理機(jī)器故障,以及機(jī)器間溝通的問題。這可以使沒有在并行分布式系統(tǒng)下編程經(jīng)驗的程序員們方便的利用一個大型分布式系統(tǒng)的資源。

3. 為什么使用MapReduce?

  - 這是一個很好的在多臺機(jī)器間分?jǐn)側(cè)蝿?wù)的方法

  - 處理機(jī)器故障

  - 支持多種不同類型的應(yīng)用,如搜索和廣告。幾乎每個應(yīng)用都有MapReduce的操作。你可以預(yù)算有用的數(shù)據(jù),找到單詞計數(shù),為TB級的數(shù)據(jù)排序等等。

  - 計算可以自動的離IO源更近

4. MapReduce系統(tǒng)有三種不同的服務(wù)器。

  - 主服務(wù)器將用戶任務(wù)分配到映射服務(wù)器和歸納服務(wù)器上。它也跟蹤任務(wù)狀態(tài)。

  - 映射服務(wù)器接受用戶輸入的數(shù)據(jù),并對之執(zhí)行映射操作。結(jié)果會被寫到中間文件中去。

  - 歸納服務(wù)器對中間文件執(zhí)行歸納操作。

5. 例如你想數(shù)數(shù)所有網(wǎng)頁中一共有多少個詞。你可以把所有GFS上的網(wǎng)頁輸入MapReduce。這將會導(dǎo)致數(shù)以千計的機(jī)器同時開工,而這一切的協(xié)調(diào),任務(wù)調(diào)度,處理失敗,以及數(shù)據(jù)調(diào)送都會被自動執(zhí)行。

  - 具體步驟如下:GFS -> 映射 -> 洗牌 -> 歸納 -> 把結(jié)果存回GFS

  - 在MapReduce中一個映射函數(shù)將數(shù)據(jù)從一種形式映射到另一種形式,并產(chǎn)生一個鍵值對。在我們的這個例子中,鍵就是單詞,值就是計數(shù)。

  - 洗牌過程匯總了鍵的類型。

  - 歸納函數(shù)把所有鍵值對做了匯總并產(chǎn)生了最終結(jié)果。

6. 谷歌索引流水線有大約20種不同的MapReduce。一個MapReduce匯總數(shù)據(jù)中的各種記錄的鍵,第二個mapReduce再利用這個結(jié)果做些別的事,然后又傳遞給下面的MapReduce,以此類推。

7. 程序可以很小,甚至20到50行的代碼都有。

8. 不過拖后腿的任務(wù)會是一個問題。拖后腿的任務(wù)指的是那些比其他任務(wù)執(zhí)行的慢的任務(wù)。它會影響整個任務(wù)的進(jìn)度。它可能是由于比較慢的I/O(比如一個差的控制器)或是一個暫時的CPU利用率陡升。解決方案就是同時執(zhí)行多個一樣的任務(wù),一旦有一個完成了就終止其它的。

9. 映射服務(wù)器和歸納服務(wù)器之間的數(shù)據(jù)傳輸是壓縮過的。基本想法是因為服務(wù)器并不受限于CPU,所以花點(diǎn)CPU時間在壓縮和解壓數(shù)據(jù)上來節(jié)省帶寬和I/O是值得的。

?

?在BigTable中存儲結(jié)構(gòu)化數(shù)據(jù):

1. BigTable是一個大規(guī)模容錯的自管理系統(tǒng),包括TB級的內(nèi)存和PB級的存儲。它可以支持每秒百萬的讀寫。

2. BigTable有一個基于GFS的分布式哈希機(jī)制。它不是關(guān)系型數(shù)據(jù)庫,不支持聯(lián)合或者SQL式的查詢。

3. 它支持基于關(guān)鍵字的查詢來獲得結(jié)構(gòu)化的數(shù)據(jù)。GFS存儲不透明數(shù)據(jù),許多應(yīng)用需求也含有結(jié)構(gòu)化的數(shù)據(jù)。

4. 商業(yè)數(shù)據(jù)庫通常不能擴(kuò)展到如此規(guī)模,也不能運(yùn)行在上千臺機(jī)器上。

5. 通過控制他們自己的下層存儲系統(tǒng),谷歌可以獲得更多的控制力和杠桿來優(yōu)化他們的系統(tǒng)。比如說,如果他們想要使跨數(shù)據(jù)中心的操作更簡單一些,他們可以把這個功能直接寫入他們的系統(tǒng)中。

6. 機(jī)器可以隨時加入或者離開這個系統(tǒng),而這個系統(tǒng)還是可以工作。

7. 每一個數(shù)據(jù)項都被存在一個單元中,可以通過行健,列鍵或者時間標(biāo)簽來獲取。

8.每一行都被存在一個或多個表單中。一個表單就是一系列64KB大小的,數(shù)據(jù)結(jié)構(gòu)被稱為SSTable的塊。

9. BigTable有三種不同的服務(wù)器:

  - 主服務(wù)器把表單分配到表單服務(wù)器上。它們跟蹤表單們在哪里,并且在需要時會重新分配任務(wù)。

  - 表單服務(wù)器處理表單的讀寫請求。當(dāng)表單的大小超過限制(通常100-200MB)時,它們會把表單拆分。當(dāng)一臺表單服務(wù)器出故障時,它的表單會被分配到其他100臺服務(wù)器上,這樣系統(tǒng)就可以不受影響。

  - 鎖服務(wù)器提供分布式鎖服務(wù)。一些類似向表單中寫入數(shù)據(jù), 主服務(wù)器仲裁,以及訪問控制等操作需要互斥。

10. 一個地域性小組可以用來物理地集中存儲相關(guān)數(shù)據(jù),以提高地域性偏好。

11. 表單盡可能的被存在RAM中。

?

硬件:

1. 當(dāng)你有很多機(jī)器的時候,你會怎樣制造他們使得他們更加省錢省電?

2. 使用超級便宜的商用硬件,然后在其上設(shè)置軟件來處理它們的故障。

3. 如果你使用一個偵察故障的基礎(chǔ)設(shè)施,而不是確保每個部件都高度可靠,一千倍的用電量的增加可能可以只會增加33倍的支出。你必須在不可靠之上構(gòu)建可靠來使這一套方法行之有效。

4. Linux,自己的服務(wù)器架設(shè)計,PC級的母板,低端存儲

5. 用每瓦特的成本來衡量的性價比并沒有提高,因為存在很大的電能和冷卻的問題。

6. 混合使用自己獨(dú)立的數(shù)據(jù)中心和與他人共享的數(shù)據(jù)中心。

?

其他:

1. 快速推出改動,而不是等待QA。

2. 代碼庫是創(chuàng)建程序的主要途徑。

3. 一些應(yīng)用被當(dāng)成服務(wù)提供給別人,例如爬蟲。

4. 有一個控制應(yīng)用版本的基礎(chǔ)設(shè)施,所以不用擔(dān)心新發(fā)布一個版本會破壞什么東西。

?

谷歌的未來之路:

1. 支持含地理信息的分布式集群。

2. 給所有數(shù)據(jù)創(chuàng)建一個單一的全局命名域。現(xiàn)在數(shù)據(jù)被分散在各個集群中。

3. 更多更好的自動數(shù)據(jù)和計算遷徙。

4. 解決廣域復(fù)制和網(wǎng)絡(luò)分割引起的一致性問題(例如,即使一個集群因為做維護(hù)或者其他原因停運(yùn)而下線,仍能保持服務(wù)可訪問)

?

學(xué)到的經(jīng)驗教訓(xùn):

1. 基礎(chǔ)設(shè)施可以是一個競爭優(yōu)勢。 這對于谷歌來說是很明顯的。他們可以更快更便宜的推出新的互聯(lián)網(wǎng)服務(wù),規(guī)模之大很少有人可以媲美。很多公司走上了一條完全不同的路。他們把基礎(chǔ)設(shè)施認(rèn)為是負(fù)擔(dān)。每一個組使用完全不同的技術(shù),也沒有通用的計劃來構(gòu)建這些系統(tǒng)。谷歌認(rèn)為自己是一家系統(tǒng)工程公司,這是一個非常新穎的看待軟件開發(fā)的角度。

2. 拓展到多個數(shù)據(jù)中心仍然是一個未解決的難題。大多數(shù)網(wǎng)頁存在于一個或最多兩個數(shù)據(jù)中心之中。如何把一個網(wǎng)頁分布到多個數(shù)據(jù)中心上去是一個可以說非常需要技巧的事情。

3. 看看Hadoop如果你自己沒有時間從頭重新構(gòu)建這整個一套基礎(chǔ)設(shè)施。Hadoop是一個開源的實(shí)現(xiàn)了很多跟這里說的類似的想法的系統(tǒng)。

4. 一個被低估了的平臺化開發(fā)的優(yōu)勢就是年輕的開發(fā)員可以更快更有自信地在這個平臺上創(chuàng)造靠譜的應(yīng)用。如果每一個項目都需要創(chuàng)建一樣的分布式基礎(chǔ)架構(gòu)的話,你就有麻煩了,因為知道怎么做這些事情的人相當(dāng)少見。

5. 協(xié)同并不是總是一件壞事。讓一個系統(tǒng)的所有部件協(xié)同工作的話,某一個部件改進(jìn)就可以惠及其它所有的部件。優(yōu)化文件系統(tǒng),那每個人都可以立即不費(fèi)任何功夫地受益。如果每一個項目都是用一個不同的文件系統(tǒng),那就不可能對整個技術(shù)堆棧有一個持續(xù)的遞增的優(yōu)化。

6. 創(chuàng)建不需要關(guān)閉系統(tǒng)的自管理系統(tǒng)。這樣可以使你更加容易地在服務(wù)器之間均衡資源,動態(tài)地增加容量,淘汰機(jī)器,以及自然地處理升級。

7. 創(chuàng)建一個達(dá)爾文式的基礎(chǔ)設(shè)施。并行處理多個相同的耗時操作,并只等最快的那個結(jié)束。

8. 不要忽視學(xué)術(shù)界。學(xué)術(shù)界有很多好的想法沒有被引入產(chǎn)業(yè)界。很多谷歌做的事情都有先例,只是沒有大規(guī)模部署。

9. 考慮壓縮。當(dāng)你有很多CPU可以浪費(fèi),而I/O受限時,壓縮是一個很好地選擇。

轉(zhuǎn)載于:https://www.cnblogs.com/zhutianshi/p/4340925.html

總結(jié)

以上是生活随笔為你收集整理的通向高可扩展性之路(谷歌篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。