.NET 平台上的分布式编程框架 MBrace 发布 1.0 版本

  • Pierre-Luc Maheu
  • 邵思华

2015 年 11 月 22 日

话题:.NETAzure语言 & 开发架构

在经过数年的开发之后,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

.NETAzure语言 & 开发架构