Après plusieurs années de développement, MBrace 1.0 est sorti mi-novembre. MBrace est un modèle permettant de traiter de façon scalable des données sur le Cloud via des environnements de développement ou de scripting en F# et C#. Le projet est principalement constitué de librairies et de runtimes pour différents fournisseurs de Cloud. Le composant central est MBrace.Core, une librairie autonome contenant le coeur du modèle de programmation de MBrace. Celui-ci fournit une API s’appuyant sur des "computations expressions" pouvant être utilisées soit directement, soit pour créer des libraires telles que MBrace.Flow. L’exemple suivant, qui utilise la "computation expression" cloud, montre comment récupérer un contenu distant via 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
Construit en s’appuyant sur MBrace.Core, MBrace.Flow est une librairie permettant de réaliser du streaming distribué via des déclarations de pipelines fonctionnels. L’exemple suivant montre comment déterminer le nombre de chaînes de caractères dupliquées à l’intérieur de fichiers CVS en utilisant des flux Cloud.
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
A côté des libraires, les autres composants majeurs sont les implémentations du runtime MBrace. Azure est actuellement le seul fournisseur complètement supporté, mais AWS est en cours de développement. L’implémentation du runtime pour Azure inclut le modèle de programmation MBrace complet et des utilitaires pour la gestion des clusters. On peut voir ci-dessous comment créer un cluster de quatre instances A3 sur Azure :
let pubSettingsFile = @"... path to your downloaded publication settings file ... "
let config = DeploymentManager.BeginDeploy(pubSettingsFile, Regions.North_Europe, VMSizes.A3, vmCount = 4)
Pour commencer à développer, deux kits de démarrage sont disponibles : l’un utilise Azure, l’autre une émulation de cluster. Ce dernier, pouvant s’exécuter sur une machine unique, permet d’exécuter et de débugger du code distribué depuis une machine de développement sans besoin d’infrastructure additionnelle. MBrace est un projet open source disponible sur GitHub. Il est possible de contribuer à différents niveaux : librairies, cloud providers et documentations/exemples.