在经过数年的开发之后,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
重要通知:接下来 InfoQ 将会选择性地将部分优秀内容首发在微信公众号中,欢迎关注 InfoQ 微信公众号第一时间阅读精品内容。
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
评论