天天看點

《資料中心設計與營運實戰》——第2章 工作負載和軟體基礎架構2.1 資料中心VS. 桌上型電腦

本節書摘來自異步社群《資料中心設計與營運實戰》一書中的第2章,第2.1節,作者: 【美】luiz andré barroso , 【美】jimmy clidaras , 【瑞士】urs hölzle 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

倉儲式資料中心(wsc)中運作的應用主導了衆多系統設計的決策權衡。本章概述了大型網際網路服務中軟體的顯著特征以及一個建構完整計算平台所需要的系統軟體和工具。以下是典型wsc部署中不同的軟體層的相關術語。

平台層軟體:和所有獨立伺服器都一樣的固件、核心、分布式作業系統和函數庫,屏蔽掉單一裝置的具體硬體,提供基本的伺服器級服務。

叢集層基礎架構:在群集層提供資源管理和服務,并最終成為資料中心級作業系統。比如分布式檔案系統、排程器、遠端過程調用(rpc)庫,以及可以簡化資料中心資源調用的程式設計模型等,如mapreduce 【35】、dryad 【86】、hadoop 【77】、sawzall 【122】、bigtable 【26】、dynamo 【36】、dremel 【104】、spanner 【32】和chubby 【22】。

應用層軟體:用于實作特定服務。常用于進一步将應用級軟體分解為線上服務和離線計算服務,原因是這些兩種服務的需求往往不同。例如線上服務有google搜尋、gmail、google地圖。離線計算通常用于大型資料分析或者為線上服務生産資料,例如,建立web索引或處理衛星圖像用來建立地圖圖像塊,以供線上服務使用。

網際網路服務的軟體開發在許多方面有别于傳統的桌上型電腦/伺服器模式。

大并發:典型的網際網路服務表現出大量并發,其主要根源在于資料級和請求級的并發。但問題往往并不在于發現并發性,而是如何管理和有效處理應用内在的顯式并發。資料并行起源于需要處理的關聯大資料集,比如以十億計的網頁或日志。這些非常大的資料集需要大量計算來處理每個并行(子)的任務,這反而有助于掩蓋或容忍通信和同步的開銷。同樣的,請求級并發來自于公衆網際網路服務每秒接收到的成百上千的請求。這些請求很少涉及資料讀寫沖突或者請求間同步。例如,搜尋請求基本是獨立的,處理主要涉及隻讀的資料庫,是以,計算很容易在請求内或跨越不同請求間分段進行。類似的情況還有,web郵件系統處理的使用者資料,來自不同使用者的請求也各不相關,進而生成了資料分區和并發的自然單元。隻要更新速率低,即便是高度關聯的資料系統(比如社交網絡背景端)也能從高并發性中獲益良多。

工作負載波動:網際網路使用者通過定義相對良好、穩定的進階api(比如簡單的url)而和服務的實作細節脫離,進而更容易快速部署新軟體。與桌面軟體産品相比,google關鍵的服務的釋出周期,已經從幾個月甚至幾年縮短至大約幾周。例如,google前端web伺服器二進制檔案(由數以百計的開發人員完成的近千個獨立的代碼變更)每周都有新版本更新,google核心搜尋服務的代碼每兩到三年幾乎從零開始重新建構一次。這樣的環境極大地刺激了産品快速創新,卻使系統設計師無法從一個已經完成的應用中提取出有用的基準點。此外,由于網際網路服務仍然是一個相對較新的領域,新産品和服務頻繁出現,這些産品和服務的成功又直接影響到資料中心的工作負載。例如,youtube等視訊服務在短時間内快速崛起,與資料中心現有主要任務的計算排程相比,這可能産生一組有極大不同的排程需求,進而在對wsc的優化設計中産生意想不到的潛在影響。這種激進的軟體部署情境有益的一面是,硬體架構師不再糾結于無法通過修改代碼片斷,而僅優化硬體來獲得良好的性能;相反,架構師可以考慮通過軟體重寫以利用新的硬體功能或裝置的可能性。

平台同質性:相比桌上型電腦,資料中心的軟硬體開發環境通常更同構化。在任何給定的時間,大型網際網路服務通常使用相對固定的硬體和系統軟體配置。顯著異質性的一個主要原因來自于随時間變化部署的更多低成本元件。平台同質的出現簡化了叢集級的排程和負載均衡,也減輕了平台軟體(核心、驅動等)的維護負擔。同樣,同質性還可以認供應鍊效率更高,使修複過程更加高效,這是因為自動和手動修複可以得益于更少的系統種類,同時可以積累更多的經驗。相比之下,運作在桌面系統上的軟體、硬體和系統平台種類繁多,需要面對成千上萬種硬體及系統軟體配置所帶來的困難。

無故障運作:由于網際網路服務應用運作在由成千上萬台機器組成的叢集上,這些機器單體的可靠性并不比pc高,個體失敗率的乘法效應意味着某種類型的故障可能每幾小時或者在更短時間内就會發生(第6章将提供更多細節)。是以,桌面級軟體對幾個月或幾年硬體無故障運作的假設看上去合理,但對于資料中心級别的服務卻不現實。也就是說,常常出錯是網際網路服務日常狀态的一部分。理想情況下,叢集級系統軟體應能提供一個層,以對應用級軟體隔離大部分的複雜性,雖然這個目标對于所有類型的應用程式來說很難實作。

相比桌面系統,盡管大量線程級别的并行性和更同質化的計算平台有助于減少網際網路服務軟體開發的複雜性,但其規模、在硬體故障下運作的需求,以及工作負載變化的速度都會産生相反的效果。

繼續閱讀