Skip to content

Document rdsys's architecture and design

Let's document rdsys's architecture and design. The documentation has the following purposes:

  • Help prospective developers familiarise themselves with rdsys.
  • Explain to bridge operators, users, and researchers how bridges are managed.

The documentation should go into README.md, a more extensive document in the doc/ directory, and a blog post. Here's a bit of documentation to get us started:

Introduction

  • BridgeDB needs an overhaul.

    • Code base is complicated and convoluted; difficult to make big changes.
    • Antiquated and rigid architecture.
  • Been reimplementing the service in Golang.

Goals

  • Zero-latency architecture

  • abstract, lightweight, resilient, and extensible design

Code abstractions

How is the code organised?

  • "Clean architecture"

    • Code centers around domain logic.
  • Rdsys distributes resources to users.

    • Resource can be a bridge, proxy, Snowflake, or even Tor Browser links.

System architecture

What components are there and how do they talk to each other?

Registration mechanism

  • Rdsys supports resources that are not coupled to a tor process. These resources (e.g. Snowflakes, HTTPT proxies, etc.) can register themselves.

Microservices

  • Backend plus several distributor processes.

  • Distributors use an HTTP streaming API to learn about resource updates.

Distributors

  • Will build Salmon for rdsys.

Feedback loop with OONI

  • Hand out bridges to OONI for testing; incorporate results into rdsys. Salmon actually relies on these results.

Bridge testing with bridgestrap

  • Upon learning about new resources, rdsys tests them via bridgestrap.