This is cool but p2p pub sub seems like a hard problem to me. How does it scale? Based on the readme it uses epidemic-based message propagation, which I interpret (wrongly?) to be some kind of gossip protocol. But what happens when an individual floods the network? Also, if the network is very large, and there are a lot of people publishing, how does the network ensure that only people who care about specific topics receive the relevant message traffic while still supporting sparse connectivity? The alternative seems like everyone would get spammed and DOSed.
I’m honestly curious because I’ve been spending a little time looking at p2p pubsub and the solutions to these problems aren’t immediately obvious to me.
Good questions. I found this app on f-droid. Haven’t dived into the source much yet, but would be interesting to find out how/if these issues are addressed.
Hi, I am the developer of this app.
You are right, there is no obvious solution and fighting against DDOS is not straightforward in this kind of DTN networks. The short answer to your question is that if some people are willing to SPAM the network, they would :)
The way routing work in Rumble is not just a blind epidemic though. Messages are send following a Roulette-wheel selection which means that messages are randomly selected from the database but it does not follow an homogeneous law. Instead, a score is computed for every message and high score will have a higher chance of being forwarded. Now the score depends on several factors, its age (younger the better), its popularity (number of first-degree likes), its replication density (number of duplicate received), hashtag subscription (also called Interest Vector) and group membership. So it is not perfect, but I hope that it should be enough to drive the routing protocol so that “best” content will be forwarded first. Some of the features used to compute the score can be spoofed but some cannot.
But there is a lot of work to do, I have to find a way to suppress spammers using some combination of reputation or blacklist but as you know, this isn’t obvious neither. This app is still in heavy development and I will be releasing new features (such as public/private key pair, signing, path of trust) in the future.
Thanks for the answer. Roulette wheel selection is an interesting approach.
Honestly I think these kinds of projects are great, and this one is unique. Reading over the high level description it reminds me of secure scuttlebutt. One interesting thing about that project is that essentially they use a web of trust. This is a nice way to counteract a bunch of problems with bad actors, but it also introduces a barrier to entry with is antithetical to its goal. Another issue with it (and many similar solutions) is that it requires you to download and run a server, which is another barrier to entry that an android app doesn’t have.
Microblogging does seem like it could somehow introduce a “soft” web of trust in a unobtrusive way - following someone and adding them to your web of trust are similar ideas in my mind - I mean it’s unusual for someone to follow a spammer intentionally. I wonder if there’s something there.
But I may be barking up the wrong tree :)
Overall, cool project!