[][src]Crate bastion

Bastion: Fault-tolerant Runtime for Rust applications

Bastion

Bastion is a highly-available, fault-tolerant runtime system with dynamic dispatch oriented lightweight process model. It supplies actor model like concurrency with primitives called lightproc and utilize all the system resources efficiently with at-most-once message delivery guarantee.

To have a quick start please head to: Bastion System Documentation.

Features

  • Message-based communication makes this project a lean mesh of actor system.
    • Without web servers, weird shenanigans, forced trait implementations, and static dispatch.
  • Runtime fault-tolerance makes it a good candidate for distributed systems.
    • If you want the smell of Erlang and the powerful aspects in Rust. That's it!
  • Completely asynchronous runtime with NUMA-aware and cache-affine SMP executor.
    • Exploiting hardware locality wherever it is possible. It is designed for servers.
  • Supervision system makes it easy to manage lifecycles.
    • Kill your application in certain condition or restart you subprocesses whenever a certain condition is met.

Guarantees

  • At most once delivery for all the messages.
  • Completely asynchronous system design.
  • Asynchronous program boundaries with fort.
  • Dynamic supervision of supervisors (adding a subtree later during the execution)
  • Lifecycle management both at futures and lightproc layers.
  • Faster middleware development.
  • Above all "fault-tolerance".

Why Bastion?

If one of the questions below is answered with yes, then Bastion is just for you:

  • Do I need fault-tolerance in my project?
  • Do I need to write resilient middleware/s?
  • I shouldn't need a webserver to run an actor system, right?
  • Do I want to make my existing code unbreakable?
  • Do I need an executor which is using system resources efficiently?
  • Do I have some trust issues with orchestration systems?
  • Do I want to implement my own application lifecycle?

Modules

children

Children are a group of child supervised under a supervisor Allows users to communicate with children through the mailboxes.

context

A context allows a child's future to access its received messages, parent and supervisor.

message

Dynamic dispatch oriented messaging system

prelude

Prelude of Bastion

supervisor

Supervisors enable users to supervise a subtree of children or other supervisor trees under themselves.

Macros

msg

Matches a Msg (as returned by BastionContext::recv or BastionContext::try_recv) with different types.

Structs

Bastion

A struct allowing to access the system's API to initialize it, start, stop and kill it and to create new supervisors and top-level children groups.

Callbacks

A set of methods that will get called at different states of a Supervisor or Children life.

Config

The configuration that should be used to initialize the system using Bastion::init_with.