天天看點

【雲栖大會】阿裡雲首席架構師唐洪:飛天,網際網路規模的作業系統

10月13日,2016杭州·雲栖大會主論壇上,阿裡雲首席架構師唐洪以《飛天,網際網路規模的作業系統》為題進行了主題演講。在他看來,飛天,通過與資料密集型學科的緊密合作重新定義人們對計算的認知界線。

【雲栖大會】阿裡雲首席架構師唐洪:飛天,網際網路規模的作業系統

<b>以下是演講全文:</b>

<b>唐洪:</b>各位尊敬的上司,各位尊敬的來賓,各位在網際網路上觀看大會的朋友們,大家中午好,很高興今天有機會跟大家聊一聊飛天,大家也知道,從2009年開始,飛天的研發已經走過了7個年頭。在這7年裡,我們跟大家分享過飛天是什麼,也曾經用不同的名字來描述飛天,它是一個超級計算機,它是一個大規模的分布式計算系統,它是一個作業系統,今天大會的主題是“飛天·進化”,其實這些名字背後也意味着我們對于“飛天”了解的進化。

我想從我今天演講的标題開始,飛天:網際網路規模的作業系統。我想這個名字也代表了我們對飛天的了解的又一次進化。

大家都知道,作業系統是用來管理硬體裝置的,是以一個網際網路規模的作業系統,它顧名思義就是要管理網際網路規模的基礎設施,那怎麼樣才叫做網際網路規模的基礎設施?它首先是指阿裡巴巴遍布在全球的幾十個資料中心,我們将資料中心以區域為機關組織起來,今天阿裡巴巴的資料中心遍布在全球的幾十個資料中心,我們把資料中心以region為機關組織起來。今天阿裡巴巴的資料中心遍布了世界的15個region,在大陸有五個區域,在大陸之外我們已經上線和以及即将上線的有十個區域,在遍布世界各地的資料中心之間,我們有專線聯系,這些專線就構成了阿裡巴巴的骨幹網,通過阿裡巴巴骨幹網我們可以在阿裡巴巴的資料中心之間進行海量的資料傳輸和服務的資料傳遞。此外,我們的資料中心也和營運商之間有專線聯系,這樣就把阿裡巴巴的資料中心和整個網際網路聯系在了一起,這張網也叫做阿裡巴巴的傳輸網。

最後,我們還有遍布在世界各地的600多個pop節點,構成了阿裡巴巴的邊際網絡,通過部署在阿裡巴巴的邊際網絡的cdn服務,終端使用者可以很便捷地通路部署在雲上的服務,這就是網際網路規模的基礎設施。

我這裡想強調的是,今天飛天管理的是這張圖上畫的基礎設施,并且在這個世界上隻有一份飛天在跑,而且我想說的是跟傳統的作業系統不一樣的是,傳統的作業系統在更新硬體時,它是需要重新開機的,但我們在更新飛天的時候是不可以重新開機的,也就是說飛天具備在持續運作的時候就能夠擴充其基礎設施的能力,這也是和傳統的作業系統不一樣的地方。為了說明飛天是一個作業系統,我想最好的辦法是把飛天和傳統的pc作業系統作一個對比。

這張圖上畫的是pc作業系統的幾個層次,首先是pc作業系統的核心,它負責管理硬體裝置,在它之上擁有賬号管理和權限控制,在這之上是系統調用層,這是作業系統為上層應用提供的公共服務接口,通常它是很少改變系統調用接口的,這也是作業系統為上層的應用保持相容性的很重要的關鍵。再往上是輸入/輸出系統,它是操作和外界進行資料交換和資訊同步的通道。

最後說一下應用商店,可能在十年前的教科書裡邊,應用商店還不是作業系統的一部分,但今天越來越多的主流作業系統都已經将應用商店變成了它的一個有機組成部分。

相對應的,我們可以看一下在飛天,每個層次也跟pc作業系統各個層次相對應,首先,對應作業系統的核心是飛天的核心層,飛天的核心是跑在每個資料中心裡邊的,負責把資料中心的伺服器叢集組成一台超級計算機。在核心層上面是飛天的雲服務層,元服務的意思就是服務的服務,包括賬号管理、認證授權、計量和結算,我想強調的是,飛天的賬号體系是全球統一的,并且我還想強調的是飛天元服務層的資料是存在好多個不同的資料中心裡邊的,也就是說,當任何一個資料中心出現問題的時候,飛天還可以正常地運作。

對于傳統pc作業系統的系統調用層是飛天的雲服務層,飛天的雲服務包含了各種雲服務的web api,跟系統調用一樣,飛天的web api也是不可以随意改變的。對應于pc作業系統的輸出輸入子系統是飛天的接入層,這裡包括了資料傳輸、内容分發和混合雲的網絡接入等等服務。最後是雲市場,雲市場是飛天的應用商店。下面我想展開講一下飛天的系統架構。

首先是核心層,飛天的核心層對應的是幾個進行支援分布式系統開發的最基本的子產品,包括分布式的協調服務、安全管理,日志采集以及監控報警等,我想強調一下,大家可以看到,安全管理在飛天核心的最底層,它是飛天最基本的能力。另外我想強調一下飛天的監控報警、診斷也是飛天最基本的能力,分布式系統的開發是軟體開發裡邊最難的工程挑戰,很有可能你線上上發生的故障是很難在測試環境裡出現的,是以飛天底層為上層應用提供了非常詳細的監控事件的收集,并且它可以回溯到問題發生的那一刻的現場幫助工程師診斷問題,在此之上,飛天還有兩個最基本的服務,一個是盤古,一個是伏羲,盤古是飛天的存儲管理,伏羲是飛天的資源排程。此外在邊上還有一個很重要的服務,叫做天基。天基的意思叫做飛天的基礎,它是飛天的自動化運維服務;盤古、伏羲和天基我待會兒會稍微講一下。

接下來看一下飛天的雲服務,飛天的webapi包括60多款産品,首先是飛天的核心服務它包括了存儲、計算、資料庫和網絡等,在這之上,飛天還提供了豐富的連接配接和編排服務,這些連接配接和編排服務将這些核心的服務很輕易地組合起來,能夠很友善地在雲上開發應用,最後飛天提供了資料智能和安全等方向的很多進階服務,因時間關系,我就不一一展開。

最後我想講一下雲市場,飛天在2011年推出第一個雲産品的時候,我們同時推出了雲市場,并且當時的雲市場我們隻是很單一地應用包裝的方式,就是虛拟機鏡像,今天我們的雲市場除了虛拟機鏡像之外,還支援容器鏡像,還支援api服務以及資源編排的模闆,這個就是飛天的架構。

下面我想講一下飛天的核心服務和飛天的核心,首先是飛天的計算類服務,飛天推出的第一個雲服務ecs,就是計算服務,今天飛天還推出了functioncompute(函數計算),acs (容器服務),ecs(彈性計算)和maxcompute (大規模計算)。

此外我們還支援了基于開源軟體的計算類服務,如hadoop mapreduce、hive、pig、spark。我們之是以支援這些服務的原因是很多的開發者已經在這些計算架構上開發了應用,我們希望他們可以很友善地變遷到雲上,其配置、更新也是非常頭痛的,我們通過托管服務幫助開發者降低了使用這些服務的開銷。

再講一下存儲,今天提供了ebs(塊存儲)、nas(檔案存儲)、oss(對象存儲)、oss-ia(低頻存儲)、oas(歸檔存儲)。

下面是資料庫服務,基于ocs緩存服務,以及面向半結構資料的tablestore表格型存儲,此外還提供了單機rds資料庫,還包括分布式的analyticdb、oceanbase,還有混合型的資料庫,同樣我們對于主流開源的伺服器産品進行了支援,包括redis、mongodb、hbase、greenplum。所有這些資料庫裡面的産品支援了各種應用,各種資料存儲的需求。

此外,我們還提供了豐富的網絡産品,這一點包括vpc專有網絡、slb負載均衡、nat網關、vpc互聯,通過這些服務我們可以讓雲上的開發者能夠建構非常複雜的分布式應用。

這些是飛天提供的核心服務。

接下來我想講一下監控和跟蹤,所有的分布式系統都會用到監控和跟蹤,但飛天的監控和跟蹤還有點不太一樣,它是預設開啟的,我們在7×24小時都會詳細地采集系統的各種資料,并且為了能夠抓住系統的細微的變化,我們的采集精度需要達到秒級,此外我們還支援全精度的使用者的行為的跟蹤,也就是說,我們要抓取到在系統服務一個使用者請求的整個過程當中的所有事件,這裡不單包括使用者程序事件,也包括核心事件,不但要能夠進行非常高頻的系統事件的捕獲,并且我們要在這個捕獲的過程中需要對系統幹擾達到最小,那我們是怎麼做到的?我們做了非常多的優化,其中包括一些優化,我們要摳到指令級别,首先是基于共享記憶體的資料采集,我們能夠支援多程序的并發無鎖寫入,并且在整個寫入過程當中不需要任何的鎖,不需要額外的另存拷貝,此外是分布式的事物的關聯,我們需要為每個事件來留存其日志時間戳,一個時間戳的獲得需要40納秒,通過優化以後,達到13納秒,通過事件生成随機的辨別,如果使用系統自帶的随機函數生成的話,每個随機辨別需要16nm,通過我們優化之後可以達到4納秒,通過所有的優化我們今天可以支援在每台技術上進行渺當中的手機,并且在收集過的過程當中,對機器的影響微不足道。

這張圖像是整個生命周期。當我們這個伺服器需要維護的時候,或者淘汰的時候,我們需要将應用從這個伺服器上遷移掉,最後下架,但将這個過程複制到上萬台規模時是非常有挑戰的,講三個,一個是幽靈節點,在這個系統裡在任何時候都有節點是沒有辦法被通路到的,這個時候的運維動作無法進行下去,當這些節點連到節點時,它是在不極緻的狀态,如果我們不即使修複的話,那就會導緻非常嚴重的問題,這個現象就要幽靈節點。

第二個挑戰是灰階釋出。在我們的系統裡所有的軟體都是以灰階的形式釋出的,一開始隻是更新到一小部分機器,隻有當它發現沒有問題的時候,再去擴大到更大的範圍,這使得整個的運維流程更加複雜。

第三個挑戰是線上調試,在系統裡通常會有一些情況發生了緊急問題,需要線上上進行緊急的修複,采用了熱更新檔的方式,操作不當會被自動化的運維系統覆寫掉,導緻運維系統白修了。

在天基看來,在系統裡每一台機器都無時無刻地處在部署、更新、遷移以及各個狀态的轉換中,是以它在整個運作中精準地去控制每個程序,每一個元件的狀态,進而達到了控制每個系統的狀态。這個小圈代表了程序級别狀态的變化,這個大圈就代表了整個機器級别程序的狀态的變化。

天基采用了一個面向恢複的計算模型,怎麼了解這件事情?在每台天基管理的機器上會定期向天基發送這台節點的狀态,這是這個系統目前的狀态。此外天基還維護一個整個系統預期的狀态。所有的運維指令發送到天基并沒有被馬上執行,而是被用來更新這個預期的狀态。它會定期的比較它的預期狀态和系統的目前的狀态,能夠根據其差别來制定出詳細的執行計劃并下發到天基的agent,通過這樣一個過程疊代,使得整個系統的狀态逐漸逼近到系統的預期的狀态。

接下來我想講一下盤古,盤古是飛天的分布式管理,盤古提供了統一的存儲管理,它能夠支援各種離線、線上的運用,我們可以在秒級時間裡進行切換,今天盤古可以支援單叢集10000台的規模。

對于盤古來說,對它最重要的事情是確定其資料不丢失,在盤古我們預設使用了三副本的拷貝,并且分布在不同的機架下面,可以達到10個a的資料可靠性。并且我們還可以支援把副本分布在不同的資料中心,達到更高的可靠性。此外盤古還支援基于資料備援,可以把資料的備援的開銷從三倍降低到1.375倍。

第三點,我們發現整個資料鍊路上的各種問題都會導緻資料的損毀,如網卡上會發生tcp的網絡包的校驗錯誤,是以飛天提供了端到端的資料校驗,確定資料即使發生這樣的問題,也不會損毀。

最後盤古還提供了獨創的并發備援技術,使得當系統發生故障時能夠很快地恢複。

這裡可以看到,當一個磁盤發生故障時,盤古是在所有剩餘的節點之間進行故障的備援恢複,使得整個故障恢複的代價跟時間的大小成反比的;叢集越大,我們可以使整個備援的恢複速度越快,可以在萬台規模下不到的分鐘完成8tb資料的備援恢複,并且盤古在整個過程中精準的控制整個的并發以及網絡帶寬使得前台的應用完全沒有感覺。

最後我想講一下伏羲,伏羲是負責資源排程,資源排程是一個很簡單的問題,可以将資源容器進行比對,這樣很簡單的事情在實際應用場景是非常複雜的,首先是規模,在飛天,上面有上千個并發的分發式程式,每秒鐘盤古資源排程需要做上千次的資源決策。這裡包括了cpu、記憶體,甚至是虛拟資源的請求。此外,為了保證公平性,伏羲還進行額度控制。

第四點,為了讓系統沒有熱點,我們要盡量地将資源的請求分布到所有的節點上去,最後支援複雜的排程限制,我們希望将程序排程到它所通路那塊資料上面。

伏羲做了大量工作來解決這些問題,這裡有講兩點:第一個技術上的數量是兩級排程,在這張圖上可以看到,伏羲負責整個叢集資源的管理,每個分布式的應用有一個appmaster,它直接向伏羲master進行批量的資源申請,再拿到資源之後由它進行work程序的排程。

第二個優化是增量排程,每個appmaster會将其資源請求一開始就發送給伏羲master,伏羲master是需要分時分批來的,是以是一次請求,如果這兩個設計,我們可以機關單叢集1萬台,并發10萬的程序,所有實作秒級響應,特别想指出的是,在100t的排序中我們用377秒完成了排序工作,比之前的世界記錄跨了3倍多。

最後,伏羲的效率,對于一個排程系統來說,規模是其次的。最重要的是排程的效率,大家知道,在一個程序執行過程當中,它的峰值的資源使用和平均的資源使用相差很大,我們按照峰值資源來利用資源的話,會讓整個叢集的資源使用率不是很好。是以,伏羲采用了兩個優化來解決這個問題。

第一個政策是彈性額度,彈性額度裡第一個概念是額度超售,這意味着對所有的額度加起來可以超過百分之百的,在這裡可以看到有綠、紅、藍三個租戶的三個額度加起來是130%,但因為我剛才所說的原因,實際的資源使用隻到了70%。彈性額度裡第二個概念是額度拉伸,當系統比較空閑的時候,我們可以允許單個租戶的資源的使用超過其額度,在這裡邊我們可以看到紅色的租戶的使用量超過50%,超過了額定的40%。在第三個概念是額度收縮,也就是說當系統的資源比較緊張的時候,在這裡邊我看到,整個系統的資源請求超過了系統的容量,130%,是以,我們需要成比例地将所有的租戶的額度進行收縮在這裡可以看到,将所有的租戶額度收縮到三分之二,進而使得所有的需求能夠被整個系統所滿足。

還有是離線、線上的混合排程,這個大家聽得比較多了,本質上很簡單,我們會需要将離線應用和線上應用放在同一個叢集上,當線上應用比較空閑時,将資源進行配置設定排程離線應用,當線上的應用的負載比較高的時候,我們可以将它的從離線應用搶占過來,這樣既可以保證整個系統資源的使用率,也可以確定線上服務的品質,通過這兩個政策,我們可以将叢集中日常資源的使用率,從5%提升至54%,将叢集峰值的使用率從22%提升至64%。

最後我想回顧一下,我今天想講的内容。<b>首先,飛天是規模。其次,飛天是性能。第三,飛天是效率。第四,飛天是高可靠。第五,飛天是高可用。第六,飛天是開放。</b>

我想,規模、性能、效率、高可靠、高可用、開放,這就是今天我們所了解的飛天,一個網際網路規模的作業系統。謝謝大家!