多代理集群调度:可伸缩性和灵活性
今天閱讀了一個berkeley學生Andrew Konwinski的有關集群資源調度的技術報告,其中對于目前現有集群調度技術的分類,我覺得說的很好,另外,它還介紹了一種模擬實驗的蒙特卡洛方法,現在做一個摘要與總結,報告鏈接:http://www.eecs.berkeley.edu/Pubs/TechRpts/2012/EECS-2012-273.html?
里面還說了一個比較重要的特點是,悲觀鎖和樂觀鎖:
The pessimistic concurrency control approach is to have the database server lock the row on User A's behalf, so User B has to wait until User A has finished its work before proceeded. We effectively solve the problem by not allowing two users to work on the same piece of data at the same time. It just prevents the conflict.
The optimistic concurrency control approach doesn't actually lock anything - instead, it asks User A to remember what the row looked like when he first saw it, and when it's time to update it, the user asks the database to go ahead only if the row still looks like he remembers it. It doesn't prevent a possible conflict, but it can detect it before any damage is done and fail safely.
?
動機
目前,大型web服務主要運行在普通服務器集群上面。這個主要是由于(1)更加廉價的計算資源和(2)通過公有云和私有云接口訪問這些資源的方便性。這個現象導致了多種編程模型的出現,比如為處理留作業的MapReduce,Dryad,MapReduce Online以及為圖計算開發的Pregel和很多其他的系統。
新的計算框架會持續的出現,沒有一個單獨的框架能滿足所有的需求。這個就導致了我們希望在同一個集群中同時運行不同的計算模型,為某個應用選擇最好的框架。這個需求就需要一個支持多編程模型的集群資源管理系統,這個系統需要滿足一下要求:
可伸縮性:對于節點的數目和能處理的作業到達速率的增長,系統有很好的伸縮性。
靈活性:支持高度異構的混合作業同時運行在普通的集群中。
可用性和可維護性:在集群中方便地兼容新的作業。部署/升級編程框架簡答。
錯誤隔離:隔離不同種作業的錯誤,防止錯誤的級聯。
資源利用率:提高整個集群資源的利用率。
?
集群負載的分類
為了達到以上的目的和設計出滿足要求的系統,我們需要對目前集群中的作業進行一個分類:
服務任務和終止任務(Service Jobs vs Terminating Jobs)
? ? ? 服務任務是一直運行的程序,比如web服務器和關系數據庫。
? ? ? 終止任務類似于批處理程序,它們根據一定的輸入進行一定的處理,然后退出。
目前的資源管理系統一般只會處理其中的一種任務。
任務選擇率(Task pickiness)
? ? ? 任務可以選擇為其提供服務的資源的要求和偏好。
作業彈性(Job elasticity)
? ? ? 可能根據作業不同時間的負載動態的伸縮資源。
任務和作業的持續時間(Job and task duraton)
? ? ? 終止作業可能有不同的持續時間。
任務調度時間敏感性
? ? ? 有的任務會有響應時間的要求,這回影響到用戶體驗。
?
集群調度的分類
目前所有的集群調度技術可以以下面的方式分類:
?
?
?單代理(Monolithic):
集群中僅僅只有一個調度器,它串行的做出所有的調度決策。
這個是目前大多數集群管理系統,比如Hadoop和Torque系統使用的架構,優勢在于簡單。但是有很多先天的劣勢:
1單調度策略,在伸縮性,靈活性和拓展性方面均不好。
? ? ? ? 對于混合的作業流,這個方式并不能很好適應。批處理式的作業比較適合用非搶占的公平調度而延遲敏感的作業需要使 ? 用優先級搶占策略,這樣的架構不能滿足這些要求。
2單點故障。
3負載瓶頸。
4Head of line(HOL) blocking餓死現象。
?
多代理架構
狀態分區的調度(Partitioned State Scheduling)
靜態分區
優勢:沒有單點故障,等待調度延遲小,更好的錯誤隔離。
劣勢:劣勢主要集中在靜態的分區上,比如1)一個超過一個分區的作業就不能運行。2)一個分區可能對于一個小作業來說太大了。3)碎片問題
?
動態分區
優勢:如靜態分區,并加上其的劣勢。
劣勢:需要維護一個元數據服務器,這個元數據服務器需要上鎖,可能會有性能開銷。
以上的兩個部分分區方案就類似于數據庫中控制同步的方式中的悲觀并發控制。這種方式要求提前就把調度管理域給劃分開來。
?
復制狀態的調度(Replicated State Scheduling)
這個調度策略允許調度管理域重疊,比較像數據庫中同步控制中的樂觀并發控制。
這個架構目前是最靈活的,但是需要更復雜的處理邏輯以及同步的控制。
總結
以上是生活随笔為你收集整理的多代理集群调度:可伸缩性和灵活性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fedora 17 install V
- 下一篇: [LeetCode] Permutati