Skip to content

Staged Event-Driven Architecture Bus - A form of message bus avoiding the high overhead of thread-based concurrency models where channels get their own inbound and outbound queues.

Notifications You must be signed in to change notification settings

resolvingarchitecture/seda-bus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Resolving Architecture

Clarity in Design

SEDA Bus

Staged Event-Driven Architecture Bus - A form of message bus avoiding the high overhead of thread-based concurrency models where channels get their own inbound and outbound queues.

build Crate Info API Docs

License PGP

commits repo size

num lang top lang Rustc Version 1.42+

Donate

Request BTC address for a donation at brian@resolvingarchitecture.io.

Notes

!! WIP - not stable until version 1.0 !!

Roadmap

*[ ] 1.0.0 - Minimal Stable Useful Functionality *[x] 0.1.0 - send/receive non-persistent messages between two channels *[x] 0.2.0 - provide CLI *[ ] 0.3.0 - provide optional guaranteed delivery at the message level *[ ] 2.0.0 - use dbus for inter-process communications on Linux *[ ] 3.0.0 - use ipcd for inter-process communications on RedoxOS

Crates.io

Background

Staged Event-Driven Architecture (SEDA) is an approach to software architecture that decomposes a complex, event-driven application into a set of stages connected by queues. It avoids the high overhead associated with thread-based concurrency models (i.e. locking, unlocking, and polling for locks), and decouples event and thread scheduling from application logic. By performing admission control on each event queue, the service can be well-conditioned to load, preventing resources from being over-committed when demand exceeds service capacity.

SEDA employs dynamic control to automatically tune runtime parameters (such as the scheduling parameters of each stage) as well as to manage load (like performing adaptive load shedding). Decomposing services into a set of stages also enables modularity and code reuse, as well as the development of debugging tools for complex event-driven applications.

A Bus type architectural router style is decentralized in nature such that each instance of a node can be used with other bus nodes, messages need to go through any specific node as in more centralized routers like hub-and-spoke type routers. This is accomplished by supporting publishers and consumers using their own addressing schemes creating their own mappings through chosen message channels, e.g. one message channel could be associated with a persistence type service while another with a network type service - the bus cares not which is called they're all just endpoints.

Bringing together SEDA and Bus architectural patterns is what this component attempts.

This component is also implemented in Java and Typescript. This project is meant to support the design of the Java SEDA Bus in an implementation closer to the Linux/Redox Operating System for embedded projects. It may eventually support integration with each operating system's own messaging bus.

Setup - Ubuntu 18.04

  1. Install Rust
    sudo apt update
    sudo apt upgrade
    curl https://sh.rustup.rs -sSf | sh
  2. Restart terminal
  3. Verify Rust installed
     rustc --version
  4. Install build essentials
    sudo apt install build-essential
  5. install crate
    cargo install seda_bus

Development

Links

About

Staged Event-Driven Architecture Bus - A form of message bus avoiding the high overhead of thread-based concurrency models where channels get their own inbound and outbound queues.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published