2021-05-12 13:36:18 +00:00
|
|
|
# Syndicate/rs
|
|
|
|
|
|
|
|
A Rust implementation of:
|
|
|
|
|
2021-08-11 20:22:53 +00:00
|
|
|
- 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);
|
|
|
|
|
2021-05-12 13:36:18 +00:00
|
|
|
- the Syndicate network protocol, including
|
2021-08-11 20:22:53 +00:00
|
|
|
|
|
|
|
- a high-speed Dataspace indexing structure
|
2021-08-13 01:40:48 +00:00
|
|
|
([`skeleton.rs`](syndicate/src/skeleton.rs); see also
|
2021-08-11 20:22:53 +00:00
|
|
|
[HOWITWORKS.md](https://git.syndicate-lang.org/syndicate-lang/syndicate-rkt/src/commit/90c4c60699069b496491b81ee63b5a45ffd638cb/syndicate/HOWITWORKS.md)
|
|
|
|
from `syndicate-rkt`) and
|
|
|
|
|
|
|
|
- a standalone Syndicate protocol "broker" service (roughly
|
|
|
|
comparable in scope and intent to D-Bus); and
|
|
|
|
|
2021-08-13 01:40:48 +00:00
|
|
|
- a handful of [example programs](syndicate-server/examples/).
|
2021-05-12 13:36:18 +00:00
|
|
|
|
|
|
|
![The Syndicate/rs server running.](syndicate-rs-server.png)
|
|
|
|
*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.
|