aboutsummaryrefslogtreecommitdiff
path: root/doc/handbook/chapters/developer.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/handbook/chapters/developer.texi')
-rw-r--r--doc/handbook/chapters/developer.texi44
1 files changed, 44 insertions, 0 deletions
diff --git a/doc/handbook/chapters/developer.texi b/doc/handbook/chapters/developer.texi
index 64ebec46e..e101b06bd 100644
--- a/doc/handbook/chapters/developer.texi
+++ b/doc/handbook/chapters/developer.texi
@@ -79,6 +79,7 @@ new chapters, sections or insightful comments.
79* File-sharing (FS) Subsystem:: 79* File-sharing (FS) Subsystem::
80* REGEX Subsystem:: 80* REGEX Subsystem::
81* REST Subsystem:: 81* REST Subsystem::
82* RPS Subsystem::
82@end menu 83@end menu
83 84
84@node Developer Introduction 85@node Developer Introduction
@@ -8863,3 +8864,46 @@ so please make sure that endpoints are unambiguous.
8863 8864
8864This is WIP. Endpoints should be documented appropriately. 8865This is WIP. Endpoints should be documented appropriately.
8865Preferably using annotations. 8866Preferably using annotations.
8867
8868
8869@cindex RPS Subsystem
8870@node RPS Subsystem
8871@section RPS Subsystem
8872
8873In literature, Random Peer Sampling (RPS) refers to the problem of
8874reliably drawing random samples from an unstructured p2p network.
8875
8876Doing so in a reliable manner is not only hard because of inherent
8877problems but also because of possible malicious peers that could try to
8878bias the selection.
8879
8880It is useful for all kind of gossip protocols that require the selection
8881of random peers in the whole network like gathering statistics,
8882spreading and aggregating information in the network, load balancing and
8883overlay topology management.
8884
8885The approach chosen in the rps implementation in GNUnet follows the
8886Brahms@uref{https://bib.gnunet.org/full/date.html\#2009_5f0} design.
8887
8888The current state is "work in progress". There are a lot of things that
8889need to be done, primarily finishing the experimental evaluation and a
8890re-design of the API.
8891
8892The abstract idea is to subscribe to connect to/start the rps service
8893and request random peers that will be returned when they represent a
8894random selection from the whole network with high probability.
8895
8896An additional feature to the original Brahms-design is the selection of
8897sub-groups: The GNUnet implementation of rps enables clients to ask for
8898random peers from a group that is defined by a common shared secret.
8899(The secret could of course also be public, depending on the use-case.)
8900
8901Another addition to the original protocol was made: The sampler
8902mechanism that was introduced in Brahms was slightly adapted and used to
8903actually sample the peers and returned to the client.
8904This is necessary as the original design only keeps peers connected to
8905random other peers in the network. In order to return random peers to
8906client requests independently random, they cannot be drawn from the
8907connected peers.
8908The adapted sampler makes sure that each request for random peers is
8909independent from the others.