Guide - Cloud Programming with F#
Cloud computing relies on leveraging multiple integrated services. Using multiple services required a unique set
of technologies and capabilities, and F# excels in this domain. With the recent rise of cloud solutions, it is becoming increasingly easy to deploy multiple services “in the cloud”, expanding what is possible both by storing large amounts of data and running heavy computations distributed across clusters of machines.
The combination of built in support for asynchronous workflows, data processing capabilities, computation expressions,
extensible syntax, composability, expressiveness for numeric code and more make F# uniquely suited to develop
scalable cloud solutions efficiently.
This guide is an overview of the packages and tools for scalable compute, messaging, storage, and data processing with F#, particularly for taking advantage of cloud-computing resources.
For cloud-hosted web programming and services, refer to the Web Programming Guide.
To contribute to this guide edit this page. These resources are for educational purposes.
- Integrated Stacks
- Cloud Platforms
- Scalable Data Programming
- Scalable Distributed Programming and Messaging
- Containers
Integrated Stacks
SAFE Stack
SAFE Stack is an end-to-end, functional-first stack for cloud-ready web development that emphasizes type-safe programming. It is an application development stack that brings several technologies together into a single, coherent stack for type-safe, flexible, web-enabled applications that can be written almost entirely in F#.
Cloud Platforms
Microsoft Azure
Microsoft Azure provides access to Microsoft’s worldwide datacenters through services including virtual machines, geo-redundant storage, database clusters, website deployment and other services.
- Using F# on Azure - Microsoft’s comprehensive guide to using F# on Azure.
Amazon Web Services
Amazon Web Services (AWS) provide a large array of on-demand and managed computing and hosting services. Amazon offers a .NET SDK for managing the AWS services, described here. This SDK provides facilities for managing storage, compute instances, and other Amazon services. Some additional resources for using F# and .NET on Amazon’s AWS service:
- FSharp.AWS.DynamoDB - an F# wrapper over the standard Amazon.DynamoDB library which allows you to represent table items using F# records and perform updates, queries and scans using F# quotation expressions
Scalable Data Programming
F# can be used with many scalable data-storage systems. Some are accessible via the Cloud SDKs outlined above.
Apache Spark
Apache Spark™ is a free, open-source, and cross-platform analytics engine for large-scale data processing.
-
F# samples are included in the GitHub Repo
-
Getting Started with Data Analytics & Machine Learning in F#
Scalable Distributed Programming and Messaging
Distributed compute problems require a wide range of communication capabilities, ranging from simple command line argument passing to heavily optimized, low-latency interprocess communications. This section lists a wide range of communication libraries available to F#.
Akka.NET
The Akka.NET framework is an open source toolkit and runtime for building highly concurrent, distributed, and fault-tolerant event-driven applications. It is used in production systems by its own contributors.
Orleans
The Orleans framework provides a straightforward approach to building distributed high-scale computing applications, without the need to learn and apply complex concurrency or other scaling patterns. It was designed for use in the cloud, and has been used extensively in Microsoft Azure.
Kafka
-
FsKafka - An F# Kafka client.
-
anaerobic - A simple implementation of a Kafka producer and consumer in F#.
ZeroMQ
-
F# ZeroMQ bindings An F#-specific binding for the ZeroMQ (Zero Message Queue) library.
-
ZeroMQ - A more general .NET binding for ZeroMQ.
MPI
-
MPI .NET - A C# implementation of the popular Message Passing Interface (MPI) protocol.
-
MS-MPI - Microsoft’s implementation of the MPI protocol, available on some versions of Windows Server.
Containers
Docker
Docker automates the deployment of applications inside software containers, by providing an additional layer of abstraction and automation of operating system–level virtualization on Linux.
F# is available in the official Docker images for the .NET SDK.