All Projects → microsoft → ReactiveMachine

microsoft / ReactiveMachine

Licence: other
Author microservices without thinking about faults or servers. Then compile and deploy anywhere.

Programming Languages

C#
18002 projects
powershell
5483 projects
Batchfile
5799 projects

Projects that are alternatives of or similar to ReactiveMachine

privacy-preserving-primitives
primitives and protocols for implementing privacy preserving networks
Stars: ✭ 14 (-67.44%)
Mutual labels:  distributed-systems
ring-election
A node js library with a distributed leader/follower algorithm ready to be used
Stars: ✭ 92 (+113.95%)
Mutual labels:  distributed-systems
campaign
Comic Relief Campaign Distribution in Drupal 8
Stars: ✭ 22 (-48.84%)
Mutual labels:  distributed-systems
open-box
Generalized and Efficient Blackbox Optimization System [SIGKDD'21].
Stars: ✭ 174 (+304.65%)
Mutual labels:  distributed-systems
reactive-pipes
A thin library around Reactive Extensions to simplify writing evented applications in C#.
Stars: ✭ 12 (-72.09%)
Mutual labels:  distributed-systems
core
Microservice abstract class
Stars: ✭ 37 (-13.95%)
Mutual labels:  distributed-systems
chapar
A framework for verification of causal consistency for distributed key-value stores and their clients in Coq [maintainer=@palmskog]
Stars: ✭ 29 (-32.56%)
Mutual labels:  distributed-systems
arakat
ARAKAT - Big Data Analysis and Business Intelligence Application Development Platform
Stars: ✭ 23 (-46.51%)
Mutual labels:  distributed-systems
elixir cluster
Distributed Elixir Cluster on Render with libcluster and Mix Releases
Stars: ✭ 15 (-65.12%)
Mutual labels:  distributed-systems
CrashTuner
CrashTuner(SOSP2019)
Stars: ✭ 26 (-39.53%)
Mutual labels:  distributed-systems
DTC
DTC is a high performance Distributed Table Cache system designed by JD.com that offering hotspot data cache for databases in order to reduce pressure of database and improve QPS.
Stars: ✭ 21 (-51.16%)
Mutual labels:  distributed-systems
XLearning-GPU
qihoo360 xlearning with GPU support; AI on Hadoop
Stars: ✭ 22 (-48.84%)
Mutual labels:  distributed-systems
road-to-orleans
This repository illustrates the road to orleans with practical, real-life examples. From most basic, to more advanced techniques.
Stars: ✭ 55 (+27.91%)
Mutual labels:  distributed-systems
Layr
A decentralized (p2p) file storage system built atop Kademlia DHT that enforces data integrity, privacy, and availability through sharding, proofs of retrievability, redundancy, and encryption, with smart-contract powered incentive scheme
Stars: ✭ 90 (+109.3%)
Mutual labels:  distributed-systems
mesomatic
A simple and idiomatic Clojure facade around the Mesos JAVA API
Stars: ✭ 68 (+58.14%)
Mutual labels:  distributed-systems
v6d
vineyard (v6d): an in-memory immutable data manager. (Project under CNCF)
Stars: ✭ 557 (+1195.35%)
Mutual labels:  distributed-systems
Saga
Saga pattern implementation in Kotlin build in top of Kotlin's Coroutines.
Stars: ✭ 24 (-44.19%)
Mutual labels:  distributed-systems
kraker-info
Microservices based project to extract the information from the user data from different sources.
Stars: ✭ 17 (-60.47%)
Mutual labels:  distributed-systems
retry-go
Retrying made simple and easy for golang 🔁
Stars: ✭ 43 (+0%)
Mutual labels:  distributed-systems
Kites
🪁 A consistency, partition tolerance completed distributed KV store, implementation of the Raft distributed consensus protocol and Kotlin.
Stars: ✭ 41 (-4.65%)
Mutual labels:  distributed-systems

Reactive Machine

Reactive Machine is a serverless programming model for writing reliable elastic micro-services.

This project is no longer actively maintained. It was our initial foray into this space. But we have now joined forces with Azure Durable Functions, which has a similar mission, but is more specifically targeted at serverless application development.

The idea is to express the application logic at a level of abstraction that hides platform failures (machines or connections going down) and configuration choices (e.g. the number of servers). This high-level representation is then compiled and deployed on a back-end host of choice. Importantly, the host can recover from failures transparently and consistently, because our compiler produces a deterministic state machine that makes it possible to reliably track the application state by logging messages and/or persisting snapshots to durable storage.

Programming Model

Reactive machine programs are built on task abstraction that we call an operation. The model offers a number of different operations:

  • Orchestrations describe operations that are composed of one or more other operations. They are written in async/await style, and execute deterministically and reliably. When executing an operation, orchestrations can either perform it (meaning they wait for its completion) or fork it (meaning it executes completely independently of its parent).
  • Activities are operations that can be unreliable or nondeterministic, such as calls to external services.
  • States represent a small piece of information (cf. key-value pair, or a grain, or virtual actor) that can be atomically accessed via a specified set of read and update operations.
  • Affinities define locality, by specifying keys that can be used to place state, orchestrations, and activities. These keys are also used for synchronization (locking).
  • Events provide reliable, consistent pub-sub. When an event is raised by an orchestration, all the states that subscribe to it are modified. Events appear to be globally ordered and virtually synchronous.

Languages

At the moment, both the programming model and the hosts are written in C#. Support for other languages is conceivable, but not on our immediate Radar.

Hosts

Because reactive machine applications are compiled into an intermediate representation (specifically, deterministically replayable state machines), it is easy to build and experiment with multiple hosting back-ends. Different hosts always provide the same application semantics, and are therefore easily interchangeable. But they can exhibit large differences in non-semantic characteristics, such as cost, scalability, latency, throughput, and recovery speed.

Currently, the repository contains two hosts:

  • A local emulator, meant for debugging and local profiling. It emulates the reactive machine processes in a single process, using either a single thread or multiple threads.
  • A functions host, built on top of Azure Functions, Azure EventHubs, and Azure Blobs. It uses EventHubs to launch the reactive machine processes inside Azure functions, and to implement reliable communication between the processes. State snapshots are stored in Azure Blobs.

Also, we are currently working on releasing a third host that executes on top of the Ambrosia system. Ambrosia is the ideal back-end for Reactive Machine, because it provides virtual resiliency with very good performance.

Status and Plan

We are currently at 1.0.0-alpha, meaning that this is preview which should give you an idea of what this is all about once finished. What we have is:

  • A C# implementation of the reactive machine programming model and compiler
  • Two host implementations (emulator and functions)
  • Application examples to demonstrate the features of the programming model
  • A Hello World sample to demonstrate how to use the 2 hosts

Before we can release 1.0.0-beta, we still need to do some significant work:

  • Add an Ambrosia Host
  • Plug the many gaping holes in the documentation
  • Implement support for code updates, placement updates, and changing the number of processes
  • Fix known bugs in existing tests
  • Build and test on Linux

Further in the future, we will consider moving from 1.0.0-beta to 1.0.0 as a matter of stability, i.e. we will remove the 'beta' tag once we feel comfortable with users placing trust on the stability of the code in a production environment.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].