.NET平臺上的分布式編程框架MBrace發布1.0版本
來自:http://www.infoq.com/cn/news/2015/11/mbrace-distributed-programming
在經過數年的開發之后,MBrace 1.0終于在上周正式發布了。MBrace是一種使用F#及C#進行腳本編寫與編程,適用于高伸縮性的云數據應用的編程模型。該項目主要包含了各種代碼類庫以及適配各種云供應商的運行時。
該項目的關鍵組件是MBrace.Core,這是一個獨立的類庫,包含了核心MBrace編程模型。它提供了一種基于API的計算表達式,調用者既可以直接使用這種表達式,也可以通過它創建其他類庫,例如MBrace.Flow。以下示例將使用云工作流,展現如何通過HTTP調用獲取遠程內容。
let urls = [| ("bing", "http://bing.com") ("google", "http://google.com") /* more urls*/ |] let download (name: string, uri: string) = cloud { let webClient = new WebClient() let! text = webClient.AsyncDownloadString(Uri(uri)) |> Cloud.OfAsync do! CloudFile.Delete(sprintf "pages/%s.html" name) let! file = CloudFile.WriteAllText(path = sprintf "pages/%s.html" name, text = text) return file } let filesTask = urls |> Array.map download |> Cloud.Parallel |> cluster.CreateProcess
MBrace.Flow是一個基于MBrace.Core創建的分布式流(Streaming)類庫,該類庫使用了函數式的管道聲明。下面的示例展示了如何通過云流查找在多個CSV文件中出現重復字符串的次數。
let numberOfDuplicates = CloudFlow.OfCloudFilesByLine ["container/data0.csv" ; "container/data1.csv"] |> CloudFlow.map (fun line -> line.Split(',')) |> CloudFlow.map (fun tokens -> int tokens.[0], Array.map int tokens.[1 ..]) |> CloudFlow.groupBy (fun (id,_) -> id) |> CloudFlow.filter (fun (_,values) -> Seq.length values > 1) |> CloudFlow.length |> cluster.Run
除了代碼類庫之外,MBrace中還包括了其他的主要組件,即MBrace運行時實現。目前該實現只支持Azure這一種云提供商,不過對AWS的支持已經在開發當中了。Azure運行時實現包括對MBrace.Core編程模型的完整支持,以及用于集群管理的輔助工具。以下代碼展示了如何創建一個基于Azure平臺上的四個A3實例的集群:
let pubSettingsFile = @"... path to your downloaded publication settings file ... " let config = DeploymentManager.BeginDeploy(pubSettingsFile, Regions.North_Europe, VMSizes.A3, vmCount = 4)
為了幫助使用者快速上手,MBrace提供了兩個學習工具包:一個工具包對應Azure平臺,而另一個工具包則對應一個模擬的集群。模擬集群可運行在一臺單獨的機器上,通過這種方式,就可以在某個開發者的機器上直接運行與調試分布式的代碼,而無需依賴任何額外的基礎設施了
MBrace是一個托管在GitHub平臺上的開源項目,可以通過多種方式為該項目貢獻你的力量:包括對類庫的貢獻、對云提供商運行時的貢獻、以及對示例和文檔的貢獻。
查看英文原文:Release of MBrace 1.0, a Distributed Programming Framework for .NET