Crate subotai [] [src]

Subotai is a Kademlia based distributed hash table. It's designed to be easy to use, safe and quick. Here are some of the ideas that differentiate it from other DHTs:

  • Externally synchronous, internally concurrent: All public methods are blocking and return a sane result or an explicit timeout. Internally however, subotai is fully concurrent, and parallel operations will often help each other complete.

  • Introduce nodes first, resolve conflicts later: Subotai differs to the original Kademlia implementation in that it gives temporary priority to newer contacts for full buckets. This makes the network more dynamic and capable to adapt quickly, while still providing protection against basic DDoS attacks in the form of a defensive state.

  • Flexible storage: Any key in the key space can hold any number of different entries with independent expiration times.

  • Impatient: Subotai is "impatient", in that it will attempt to never wait for responses from an unresponsive node. Queries are sent in parallel where possible, and processes continue when a subset of nodes have responded.

Subotai supports automatic key republishing, providing a good guarantee that an entry will remain in the network until a configurable expiration date. Manually storing the entry in the network again will refresh the expiration date.

Subotai also supports caching to balance intense traffic around a given key.

Modules

hash

The SubotaiHash is the element around which the Subotai network organizes itself. It's 160 bits long, and it serves as an ID number to identify nodes, as a key to identify storage entries, and optionally as a stored value.

node

The node module is the main point of contact with Subotai. Node structs contain all the pieces needed to join a Subotai network.

Enums

SubotaiError

Subotai error type. It reports the various ways in which a hash table query may fail.

Type Definitions

SubotaiResult

Custom result type over SubotaiError.