溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

job和task的概念是什么

發(fā)布時間:2022-01-12 10:23:22 來源:億速云 閱讀:219 作者:iii 欄目:云計算

這篇文章主要介紹了job和task的概念是什么的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇job和task的概念是什么文章都會有所收獲,下面我們一起來看看吧。

1. 簡介

集群管理系統(tǒng)我們內(nèi)部叫Borg,它管理、調(diào)度、開始、重啟和監(jiān)控谷歌運行的應(yīng)用程序的生命周期。本文介紹它是怎么做到這些的。

Borg提供了三個主要的好處:它(1)隱藏資源管理和故障處理細(xì)節(jié),使其用戶可以專注于應(yīng)用開發(fā);(2)高可靠性和高可用性的操作,并支持應(yīng)用程序做到高可靠高可用;(3)讓我們在跨數(shù)以萬計的機(jī)器上有效運行。Borg不是第一個來解決這些問題的系統(tǒng),但它是在這個規(guī)模,這種程度的彈性和完整性下運行的為數(shù)不多的幾個系統(tǒng)之一。

本文圍繞這些主題來編寫,包括了我們在生產(chǎn)環(huán)境運行十年的一些功力。

job和task的概念是什么

2.用戶視角

Borg的用戶是谷歌開發(fā)人員和系統(tǒng)管理員(網(wǎng)站可靠性工程師 SRE),他們運行谷歌應(yīng)用與服務(wù)。用戶以job的方式提交他們的工作給Borg,job由一個或多個task組成,每個task含有同樣的二進(jìn)制程序。一個job在一個Borg的Cell里面跑,一個Cell是包括了多臺機(jī)器的單元。這一節(jié)主要講用戶視角下的Borg系統(tǒng)。

2.1 工作負(fù)載

Borg Cell主要運行兩種異構(gòu)的工作負(fù)載。第一種是長期的服務(wù),應(yīng)該“永遠(yuǎn)”運行下去,并處理短時間的敏感請求(幾微秒到幾百毫秒)。這種服務(wù)是面向終端用戶的產(chǎn)品如Gmail、Google Docs、網(wǎng)頁搜索,內(nèi)部基礎(chǔ)設(shè)施服務(wù)(例如,Bigtable)。第二種是批處理任務(wù),需要幾秒到幾天來完成,對短期性能波動不敏感。在一個Cell上混合運行了這兩種負(fù)載,取決于他們的主要租戶(比如說,有些Cell就是專門用來跑密集的批處理任務(wù)的)。工作負(fù)載也隨著時間會產(chǎn)生變化:批處理任務(wù)做完就好,終端用戶服務(wù)的負(fù)載是以每天為周期的。Borg需要把這兩種情況都處理好。

Borg有一個2011年5月的負(fù)載數(shù)據(jù)[80],已經(jīng)被廣泛的分析了[68,26,27,57,1]。

最近幾年,很多應(yīng)用框架是搭建在Borg上的,包括我們內(nèi)部的MapReduce[23]、flumejava[18]、Millwheel[3]、Pregel[59]。這中間的大部分都是有一個控制器,可以提交job。前2個框架類似于YARN的應(yīng)用管理器[76]。我們的分布式存儲系統(tǒng),例如GFS[34]和他的后繼者CFS、Bigtable[19]、Megastore[8]都是跑在Borg上的。

在這篇文章里面,我們把高優(yōu)先級的Borg的jobs定義為生產(chǎn)(prod),剩下的是非生產(chǎn)的(non-prod)。大多長期服務(wù)是prod的,大部分批處理任務(wù)是non-prod的。在一個典型的Cell里面,prod job分配了70%的CPU資源然后實際用了60%;分配了55%的內(nèi)存資源然后實際用了85%。在$5.5會展示分配和實際值的差是很重要的。

2.2 集群和Cell

一個Cell里面的所有機(jī)器都屬于單個集群,集群是由高性能的數(shù)據(jù)中心級別的光纖網(wǎng)絡(luò)連接起來的。一個集群安裝在數(shù)據(jù)中心的一座樓里面,n座樓合在一起成為一個site。一個集群通常包括一個大的Cell還有一些小的或測試性質(zhì)的Cell。我們盡量避免任何單點故障。

在測試的Cell之外,我們中等大小的Cell大概包括10000臺機(jī)器;一些Cell還要大很多。一個Cell中的機(jī)器在很多方面都是異構(gòu)的:大小(CPU,RAM,disk,network)、處理器類型、性能以及外部IP地址或flash存儲。Borg隔離了這些差異,讓用戶單純的選擇用哪個Cell來跑任務(wù),分配資源、安裝程序和其它依賴、監(jiān)控系統(tǒng)的健康并在故障時重啟。

(譯者:Cell其實就是邏輯上的集群)

2.3 job和task

一個Borg的job的屬性有:名字、擁有者和有多少個task。job可以有一些約束,來指定這個job跑在什么架構(gòu)的處理器、操作系統(tǒng)版本、是否有外部IP。約束可以是硬的或者軟的。一個job可以指定在另一個job跑完后再開始。一個job只在一個Cell里面跑。

每個task包括了一組linux進(jìn)程,跑在一臺機(jī)器的一個容器內(nèi)[62]。大部分Borg的工作負(fù)載沒有跑在虛擬機(jī)(VM)里面,因為我們不想付出虛擬化的代價。而且,Borg在設(shè)計的時候還沒硬件虛擬化什么事兒哪。

task也有一些屬性,包括資源用量,在job中的排序。大多task的屬性和job的通用task屬性是一樣的,也可以被覆蓋 —— 例如,提供task專用的命令行參數(shù),包括CPU核、內(nèi)存、磁盤空間、磁盤訪問速度、TCP端口等等,這些都是可以分別設(shè)置并按照一個好的粒度提供。我們不提供固定的資源的單元。Borg程序都是靜態(tài)編譯的,這樣在跑的環(huán)境下就沒有依賴,這些程序都被打成一個包,包括二進(jìn)制和數(shù)據(jù)文件,能被Borg安裝起來。

用戶通過RPC來操作Borg的job,大多是從命令行工具,或者從我們的監(jiān)控系統(tǒng)($2.6)。大多job描述文件是用一種申明式配置文件BCL -- GCL[12]的一個變種,會產(chǎn)生一個protobuf文件[67]。BCL有一些自己的關(guān)鍵字。GCL提供了lambda表達(dá)式來允許計算,這樣就能讓應(yīng)用在環(huán)境里面調(diào)整自己的配置。上萬個BCL配置文件超過一千行長,系統(tǒng)中累計跑了了千萬行BCL。Borg的job配置很類似于Aurora配置文件[6]。

job和task的概念是什么

圖2展現(xiàn)了job的和task的狀態(tài)機(jī)和生命周期。

用戶可以在運行時改變一個job中的task的屬性,通過推送一個新的job配置給Borg。這個新的配置命令Borg更新task的規(guī)格。這就像是跑一個輕量級的,非原子性的事務(wù),而且可以在提交后輕易再改回來。更新是滾動式的,在更新中可以限制task重啟的數(shù)量,如果有太多task停掉,操作可以終止。

一些task更新,例如更新二進(jìn)制程序,需要task重啟;另外一些例如修改資源需求和限制會導(dǎo)致這個機(jī)器不適合跑現(xiàn)有的task,需要停止task再重新調(diào)度到別的機(jī)器上;還有一些例如修改優(yōu)先級是可以不用重啟或者移動task的。

task需要能夠接受Unix的SIGTERM信號,在他們被強(qiáng)制發(fā)送SIGKILL之前,這樣就有時間去做清理、保存狀態(tài)、結(jié)束現(xiàn)有請求執(zhí)行、拒絕新請求。實際的notice的delay bound。實踐中,80%的task能正常處理終止信號。

2.4 Allocs

Borg的alloc(allocation的縮寫)是在單臺機(jī)器上的一組保留的資源配額,用來讓一個或更多的task跑;這些資源一直分配在那邊,無論有沒有被用。allocs可以被分配出來給未來的task,用來保持資源在停止一個task和重啟這個task之間,用來聚集不同jobs的tasks到同一臺機(jī)器上——例如一個web server實例和附加的,用于把serverURL日志發(fā)送到一個分布式文件系統(tǒng)的日志搜集實例。一個alloc的資源管理方式和一臺機(jī)器上的資源管理方式是類似的;多個tasks在一個alloc上跑并共享資源。如果一個alloc必須被重新定位到其他的機(jī)器上,那么它的task也要跟著重新調(diào)度。

一個alloc set就像一個job:它是一組allocs保留了多臺機(jī)器上的資源。一旦alloc set被創(chuàng)建,一個或多個jobs就可以被提交進(jìn)去跑。簡而言之,我們會用task來表示一個alloc或者一個top-level task(一個alloc之外的),用job來表示一個job或者alloc set。

2.5 優(yōu)先級、配額和管理控制

當(dāng)有超量的工作負(fù)載在運行的時候會發(fā)生什么事情?我們的解決方案是優(yōu)先級和配額。

所有job都有優(yōu)先級,一個小的正整數(shù)。高優(yōu)先級的task可以優(yōu)先獲取資源,即使后面被殺掉。Borg定義了不重疊的優(yōu)先級段給不同任務(wù)用,包括(優(yōu)先級降序):監(jiān)控、生產(chǎn)、批任務(wù)、高性能(測試或免費)。在這篇文章里面,prod的jobs是在監(jiān)控和生產(chǎn)段。

雖然一個降級的task總會在cell的其他地方找到一席之地。降級瀑布也有可能會發(fā)生,就是一個task降下來之后,把下面運行的task再擠到別的機(jī)器上,如此往復(fù)。為了避免這種情況,我們禁止了prod級task互相排擠。合理粒度的優(yōu)先級在其他場景下也很有用——MapReduce的master跑的優(yōu)先級比worker高一點,來保證他們的可用性。

優(yōu)先級是jobs的相對重要性,決定了jobs在一個cell里面是跑還是等(pending)。配額則是用來決定jobs是否運行被調(diào)度。配額就是一組資源(CPU, RAM, disk)的數(shù)量在一個指定的優(yōu)先級、一個指定的時間段(月這個量級)。數(shù)量決定了這個用戶的job可以用的最多資源(例子:20TB內(nèi)存和prod優(yōu)先級從現(xiàn)在到7月在xx cell內(nèi))。配額檢查是管理控制的一部分,不是調(diào)度層的:配額不足的任務(wù)在提交的時候就會被拒絕。

高優(yōu)先級的配額總是花費的比低優(yōu)先級要多。prod級的配額是被限制為一個cell里面實際的資源量,所以用戶提交了prod級的job的配額時,可以期待這個job一定會跑,去掉一些碎片外。即使這樣,我們鼓勵用戶多買一點比自己需要多一點的配額,很多用戶超買是因為他們的應(yīng)用程序的用戶數(shù)量增長后需要的配額就大了。對于超買,我們的應(yīng)對方案是低優(yōu)先級資源的超售:所有用戶在0優(yōu)先級都可以用無限的配額,雖然在實際運行中這種情況很難跑起來。一個低優(yōu)先級的job在資源不足時會保持等(pending)狀態(tài)。

配額分配在Borg系統(tǒng)之外,和我們的物理資源計劃有關(guān)。這些資源計劃在不同的數(shù)據(jù)中心產(chǎn)生不同的價格和配額。用戶jobs只在有足夠配額和足夠優(yōu)先級之后才能啟動。配額的使用讓Dominant Resource Fairness(DRF)[29, 35, 36, 66]不是那么必要了。

Borg有一個容量系統(tǒng)給一些特殊權(quán)限給某些用戶,例如,允許管理員刪除或修改cell里面的job,或者允許用戶區(qū)訪問特定的內(nèi)核特性或者讓Borg對自己的job不做資源估算($5.5)。

2.6 命名和監(jiān)控

光是創(chuàng)建和部署task是不夠的:一個服務(wù)的客戶端和其他系統(tǒng)需要能找到它們,即使它換了個地方。為了搞定這一點,Borg創(chuàng)造了一個穩(wěn)定的“Borg name Service”(BNS)名字給每個task,這個名字包括了cell名字,job名字,和task編號。Borg把task的主機(jī)名和端口寫入到一個持久化高可用文件里,以BNS名為文件名,放在Chubby[14]上。這個文件被我們的RPC系統(tǒng)使用,用來發(fā)現(xiàn)task的終端地址。BNS名稱也是task的DNS名的基礎(chǔ)構(gòu)成部分,所以,cc cell的ubar用戶的jfoo job的第50個task的DNS名稱會是50.jfoo.ubar.cc.borg.google.com。Borg同時還會把job的大小和task的健康信息寫入到Chubby在任何情況改變時,這樣負(fù)載均衡就能知道怎么去路由請求了。

幾乎所有的Borg的task都會包含一個內(nèi)置的HTTP服務(wù),用來發(fā)布健康信息和幾千個性能指標(biāo)(例如RPC延時)。Borg監(jiān)控這些健康檢查URL,把其中響應(yīng)超時的和error的task重啟。其他數(shù)據(jù)也被監(jiān)控工具追蹤并在Dashboards上展示,當(dāng)服務(wù)級別對象(SLO)出問題時就會報警。

用戶可以使用一個名叫Sigma的web UI,用來檢查他們所有的job狀態(tài),一個特殊的cell,或者深入到某個job的某個task的資源用率,詳細(xì)日志,操作歷史,和最終命運。我們的應(yīng)用產(chǎn)生大量的日志,都會被自動的滾動來避免塞滿硬盤,會在一個task結(jié)束后保留一小段時間用來debug。如果一個job沒有被跑起來,Borg會提供一個為什么掛起的解釋,指導(dǎo)用戶怎么修改這個job的資源需求來符合目前這個cell的情況。我們發(fā)布資源的使用方針,按照這個方針來做就容易被調(diào)度起來。

Borg記錄所有的job提交和task時間,以及每task的資源使用細(xì)節(jié)在基礎(chǔ)存儲服務(wù)里面。這個存儲服務(wù)有一個分布式的只讀的SQL-like的交互式接口,通過Dremel[61]提供出來。這些數(shù)據(jù)在實時使用、debug、系統(tǒng)查錯和長期容量規(guī)劃上都很有用。這些數(shù)據(jù)也是Google集群負(fù)載追蹤的數(shù)據(jù)來源之一[80].

所有這些特性幫助用戶理解和debug Borg的行為和管理他們的job,并且?guī)椭覀兊腟RE每個人管理超過上萬臺機(jī)器。

關(guān)于“job和task的概念是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“job和task的概念是什么”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI