Borg論文(二)

課代表劃重點

Borg管理成千上萬的服務器,如何分配硬件資源?

Borg把物理資源抽象爲alloc進行分配。

Borg運行成千上萬的任務,如何協調任務的執行?

爲每個任務設定優先級,優先級高的優先佔有資源並運行,可以搶佔優先級低的資源。同時定義配額的概念,分配的額度是有使用期限的。

Borg運行成千上萬的任務,如何訪問或者調用正在運行的服務?

Borg爲每個任務定義服務名,通過服務名進行調用。同時Borg會監控每個任務,任務失敗Borg會重啓任務。

Allocs(分配)

Borg把物理資源抽象爲alloc,任務運行在alloc定義的資源範圍內,可以定義單個任務的alloc,也可以定義alloc set運行多個任務。

Borg的 alloc(allocation的縮寫)是機器上分配給任務的一組預留資源,可以在其中運行一個或多個任務;不管是否使用這些資源,它們都被分配。

Allocs可用於爲未來任務設置資源,在停止任務和再次啓動任務之間保留資源,以及將來自不同作業的任務收集到同一臺機器上。可以把alloc等同於物理資源;在一個alloc內運行的多個任務共享它的資源。如果一個alloc必須被重新定位到另一臺機器,那麼任務會像alloc一樣被重新調度。

alloc set:它是一組在多臺機器上的保留資源。一旦創建了 alloc set,就可以提交一個或多個作業以在其中運行。

Priority, quota, and admission control(優先級,配額,准入控制)

Borg運行的任務有優先級,優先級高的任務可以搶佔優先級低任務的資源。並且可以爲任務分配配額,配額指一段時間內指定優先級具備多少資源的一個定義。

當更多的任務出現時,超出資源可容納的範圍,會發生什麼?Borg的解決方案是優先級和配額。

每個作業都有一個優先級,一個小的正整數。高優先級的作業可以搶佔低優先級作業的資源(即使殺死低優先級的作業)。Borg爲不同用途定義了不重疊的優先級區間,包括(按優先級遞減順序):monitoring, production, batch, 和 best effort(也叫testing 或 free)。在本文中,生產級的作業優先級是 monitoringproduction

雖然被搶佔的任務經常會在 cell 中的其他位置重新調度,但是如果高優先級任務遇到稍微低優先級的任務,而稍微低優先級任務又遇到另一個稍微低優先級的任務,則會發生搶佔級聯,以此類推。

爲了消除大部分這種情況,Borg不允許處於 production 優先級區間的作業相互搶佔。細粒度的優先級在其他情況下仍然有用,例如,MapReduce主節點以略高於從節點的優先級運行,以提高其可靠性。

優先級表示在 cell 中運行或等待運行的任務的相對重要性。配額被用來決定哪些作業要用於調度。配額表示給定 優先級一段時間資源數量 的向量。配額指定了用戶的作業請求一次可以請求的最大資源量,例如(例如,“從 現在到7月底cell xx 中處於 production優先級20TiB RAM”)。

配額檢查是准入控制的一部分,而不是調度:配額不足的作業在提交後立即被拒絕。

高優先級的配額比低優先級的配額成本更高。生產優先級配額限制於 cell 中可用的實際資源,以便提交符合其配額的生產優先級作業的用戶能夠期望它運行、模塊化分段和約束。

儘管我們鼓勵用戶不要購買超過他們需要的配額,但是許多用戶還是超額購買,因爲當應用程序的用戶基數增加時,它使他們免受未來短缺的影響。對此,我們通過在較低優先級級別上超額銷售配額進行響應:每個用戶在優先級爲零時都有無限的配額,儘管這常常很難執行,因爲資源被超額訂閱。

由於資源不足,低優先級作業會一致處於 等待(未調度) 的狀態。

配額分配在Borg之外處理,並且與我們的物理容量計劃緊密相關,其結果反映在不同的數據中心的價格和配額的可用性。只有當用戶作業在所需的優先級上具有足夠的配額時,才允許用戶作業。配額的使用減少了對諸如資源優勢公平等政策的需求。

Borg有一個能力系統,它給予一些用戶特殊的特權;例如,允許管理員刪除或修改單元中的任何作業,或者允許用戶訪問受限制的內核特性或Borg行爲,例如禁止對其作業的資源估計。

Naming and monitoring(命名和監控)

Borg系統中的任務通過服務名發現和調用,通過高可用一致性文件存儲數據。Borg會自動監控任務的健康狀況,失敗重啓任務。

Borg可以創建和運行任務,但需要讓客戶端或者其他系統能夠發現這些任務,不管這些任務是跑在哪臺主機上。爲解決這個問題,Borg爲每個任務創建一個穩定的 “Borg name service”(BNS) 名稱,包括 cell名稱、job名稱和task編號

Borg將任務的 主機名和端口 寫入高可用一致性文件Chubby中,RPC系統通過Chubby文件中的條目來查找任務端點。BNS 名稱還構成了任務DNS名稱的基礎,因此 cell cc 中的 用戶ubar 擁有的 作業jfoo 中的 第50個任務 可以通過 50.jfoo.ubar.cc.borg.google.com 訪問。

Borg還在Chubby中寫入任務大小和任務健康信息,這樣負載均衡器就可以知道將請求路由到哪裏。

幾乎所有在Borg下運行的任務都包含一個內置的HTTP服務器,該服務器發佈關於任務健康狀況和數以千計的性能指標(例如,RPC延遲)的信息。Borg監視健康檢查URL並重新啓動 沒能立即響應或返回HTTP錯誤代碼 的任務。其他數據通過監控工具追蹤,提供儀表板和服務違規的告警。

稱爲Sigma的服務提供基於Web的用戶界面(UI),用戶可以通過該界面檢查其所有作業、特定cell的狀態,或者向下鑽取到單個作業和任務,以檢查它們的資源行爲、詳細日誌、執行歷史以及最終狀態。

我們的應用程序生成大量的日誌;這些日誌被 自動流轉(rotated) 以避免磁盤空間耗盡,並在任務退出後保留一段時間以協助調試。如果作業沒有運行,Borg提供了一個“why pending?”註解,同時提供指導如何修改作業的資源請求以更好地適應cell。我們發佈了“符合”資源形狀(resource shapes) 的指導方針,這些資源形狀很可能很容易進行調度。

Borg通過Dremel記錄所有作業提交和任務事件,以及Infrastore中每個任務的詳細資源使用信息,Infrastore是一個可伸縮的只讀數據存儲,具有交互式SQL接口。這些數據用於基於使用的計費、調試作業和系統故障以及長期容量規劃。它還提供了谷歌集羣工作負載跟蹤的數據。

所有這些特性都幫助用戶理解和調試Borg及運行在Borg上的作業,並幫助SRE們每人管理幾萬臺機器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章