Rust implementation of Dataspaces, Syndicate, and a high-speed networked dataspace broker.
Find a file
Tony Garnock-Jones 5805dcfe5b
All checks were successful
/ build (push) Successful in 3m35s
Release independent packages
syndicate@0.42.0
syndicate-macros@0.34.0
syndicate-schema-plugin@0.11.0
syndicate-server@0.48.0
syndicate-tools@0.20.0

Generated by cargo-workspaces
2024-09-26 13:12:20 +02:00
.forgejo/workflows Builder image for workflows 2024-05-31 15:00:18 +02:00
dev-scripts No taskset on osx 2024-04-10 11:07:22 +02:00
docker Generalize target-stompling-avoidance originally only for docker 2024-03-08 10:59:45 +01:00
git-hooks Internal repo consistency checks 2024-06-08 10:34:19 +02:00
syndicate Release independent packages 2024-09-26 13:12:20 +02:00
syndicate-macros Release independent packages 2024-09-26 13:12:20 +02:00
syndicate-schema-plugin Release independent packages 2024-09-26 13:12:20 +02:00
syndicate-server Release independent packages 2024-09-26 13:12:20 +02:00
syndicate-tools Release independent packages 2024-09-26 13:12:20 +02:00
.gitignore Update deps; in particular, get preserves 3.0, which has the fixed numerics/symbols syntax 2023-01-16 15:03:35 +01:00
Cargo.lock Release independent packages 2024-09-26 13:12:20 +02:00
Cargo.toml Fix dependencies to allow pattern-matching plugin to be used on core Syndicate protocols 2024-06-07 14:08:09 +02:00
Cross.toml Makefile & Cross.toml hack to work around an aarch64 cross-compilation issue (https://github.com/rust-embedded/cross/issues/598) 2021-10-13 12:12:02 +02:00
fixtags.sh Add syndicate-tools to fixtags.sh 2023-10-05 10:01:09 +02:00
gatekeeper-config.pr Another way to do it 2023-11-24 14:38:25 +01:00
http-config.pr Static file service 2023-11-14 00:56:10 +01:00
Makefile Internal repo consistency checks 2024-06-08 10:34:19 +02:00
README.md Update README instructions 2023-11-15 21:06:19 +01:00
rust-toolchain Split out syndicate-server crate 2021-08-12 21:42:14 -04:00
rustup-and-install.sh rustup-and-install.sh 2024-05-28 09:37:50 +02:00
setup.sh Internal repo consistency checks 2024-06-08 10:34:19 +02:00
syndicate-rs-server.png README.md 2021-05-12 15:36:27 +02:00
syndicate-rs.code-workspace New dataspace pattern implementation; update HTTP server 2024-04-10 17:03:09 +02:00

Syndicate/rs

A Rust implementation of:

  • the Syndicated Actor model, including assertion-based communication, failure-handling, capability-style security, dataspace entities, and 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

From docker or podman:

docker run -it --rm leastfixedpoint/syndicate-server /syndicate-server -p 8001

Build and run from source:

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

If you have mold available (apt install mold), you may be able to get faster linking by creating .cargo/config.toml as follows:

[build]
rustflags = ["-C", "link-arg=-fuse-ld=mold"]

Enabling the jemalloc feature can get a substantial (~20%-50%) improvement in throughput.

Running the examples

In one window, start the server with a basic configuration:

./target/release/syndicate-server -c dev-scripts/benchmark-config.pr

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 -c dev-scripts/benchmark-config.pr

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