Rust implementation of Dataspaces, Syndicate, and a high-speed networked dataspace broker.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
Tony Garnock-Jones c0b5623310 Merge latest changes from the syndicate-protocols repository 2 years ago
dev-scripts dev-scripts 2 years ago
syndicate Merge latest changes from the syndicate-protocols repository 2 years ago
syndicate-macros Split out initial services in syndicate-server 2 years ago
syndicate-server spawn_link; reactive debt_reporter service startup 2 years ago
.gitignore Use OUT_DIR 2 years ago
Cargo.lock spawn_link; reactive debt_reporter service startup 2 years ago
Cargo.toml Strip release binaries 2 years ago
Makefile Move pull-protocols target to repo root 2 years ago
README.md Split out syndicate-server crate 2 years ago
rust-toolchain Split out syndicate-server crate 2 years ago
syndicate-rs-server.png README.md 2 years ago

README.md

Syndicate/rs

A Rust implementation of:

  • the Syndicated Actor model (partial; includes assertion-based communication, failure-handling, capability-style security, and dataspace entities, but not (yet) facets as a structuring principle);

  • the Syndicate network protocol, including

    • a high-speed Dataspace indexing structure (skeleton.rs; see also HOWITWORKS.md from syndicate-rkt) and

    • a standalone Syndicate protocol "broker" service (roughly comparable in scope and intent to D-Bus); and

  • a handful of example programs.

The Syndicate/rs server running.
The Syndicate/rs server running.

Quickstart

git clone https://git.syndicate-lang.org/syndicate-lang/syndicate-rs
cd syndicate-rs
cargo build --release
./target/release/syndicate-server

Running the examples

In one window, start the server:

./target/release/syndicate-server

Then, choose one of the examples below.

Producer/Consumer (sending messages)

In a second window, run a "consumer" process:

./target/release/examples/consumer

Finally, in a third window, run a "producer" process:

./target/release/examples/producer

State producer/consumer (state replication)

Replace producer with state-producer and consumer with state-consumer, respectively, in the instructions of the previous subsection to demonstrate Syndicate state replication.

Pingpong example (latency)

In a second window, run

./target/release/examples/pingpong pong

and in a third window, run

./target/release/examples/pingpong ping

The order is important - the difference between ping and pong is about who kicks off the pingpong session.

Performance note

You may find better performance by restricting the server to fewer cores than you have available. For example, for me, running

taskset -c 0,1 ./target/release/syndicate-server

roughly quadruples throughput for a single producer/consumer pair, on my 48-core AMD CPU.