MapReduce 是由Google公司開發的一個針對大規模群組中的海量資料處理的分散式程式設計模型。 它實現了兩個功能:Map把一個函數應用於集合中的所有成員,然後返回一個基於這個處理的結果集。 而Reduce是把從兩個或更多個Map中,通過多個執行緒,進程或者獨立系統並存執行處理的結果集進行分類和歸納。 Map() 和 Reduce() 兩個函數可能會並行運行,即使不是在同一的系統的同一時刻。
微軟于2010年12月21日發佈了分散式平行計算基礎平臺——Dryad測試版,成為谷歌MapReduce分散式資料計算平臺的競爭對手。 它可以使開發人員能夠在Windows或者.Net平臺上編寫大規模的並行應用程式模型,並能夠在單機上所編寫的程式很輕易的運行在分散式平行計算平臺上,程式師可以利用資料中心的伺服器集群對資料進行並行處理,當程式開發人員在運算元千台機器時,而無需關 心分散式並行處理系統方面的細節。 本文將重點講述微軟最新Dryad平臺方面的功能原理以及應用。
Dryad平臺也是構建微軟雲計算基礎設施重要核心技術之一。 要使雲計算真正的「落地」主要面臨兩個重要問題:如何構建與應用程式來緊密結合的大規模底層基礎設施?目前構建分散式平臺的基礎設施主要包括Dryad、Dynamo和MapReduce等框架。
▲圖1 資料平行計算
另一個問題就是如何通過構建新型的雲計算應用程式,能夠在網路上提供更加豐富的使用者體驗? Yahoo擴展了MapReduce並提出了MapReduceMerge框架,並可以應用到多核處理器上。 HP則將注意力關注于分散式共用記憶體的使用上,而不同于MapReduce程式設計方面。 IBM主要使用Linux系統映射以及Hadoop軟體(Google File System以及MapReduce的開源實現)。 微軟則自主研發了Dryad和DryadLINQ,並可以用於輔助C#開發人員在電腦集群或資料中心裡分散式並行處理大規模的資料,從而在程式執行性能與效率上提高數倍。
Dryad和DryadLINQ是微軟矽谷研究院創建的研究專案,主要用來提供一個分散式平行計算平臺,DryadLINQ提供一種高階語言介面,使普通程式師可以輕易進行大規模的分散式運算, 它結合了微軟Dryad和LINQ兩種關鍵技術,被用於在該平臺上構建應用。 Dryad與微軟體系結構中的位置關係,如圖2所示。
▲圖2 Dryad與微軟體系結構的關係
Dryad同MapReduce一樣,它不僅僅是一種程式設計模型,同時也是一種高效的任務調度模型。 Dryad這種程式設計模型並不僅適用于雲計算,在多核和多處理器以及異構機群上同樣有良好的性能。
我們知道在Visual Studio 2010 C++有一套平行計算程式設計框架,支援常用的協同任務調度和硬體資源(例如CPU和記憶體等)管理,通過Work stealing演算法可以充分利用細顆細微性並行的優勢, 來保證空閒的執行緒依照一定的策略建模,從所有線程佇列中「偷取」任務執行,所以能夠讓任務和資料細微性並行。 如果一個耗時的任務只被粗略分割成四個子任務併發執行,即使是在四核心CPU的電腦上運行也無法做到即時動態的負載均衡,可能發生三個子任務很早就完成了,而另一個任務還在一個核上是等候狀態。
Dryad與上述並行框架相似,同樣可以對電腦和它們的CPU進行調度,不同的是Dryad被設計為伸縮于各種規模的集群計算平臺,無論是單台多核計算機還是到由多台電腦群組成的集群,甚至擁有數千台電腦的資料中心, 可以從任務佇列中創建的策略建模來實現分散式平行計算的程式設計框架。