Peergos / nabu

A minimal Java implementation of IPFS
MIT License
59 stars 11 forks source link

Bandwidth control #84

Open Ghost-chu opened 8 months ago

Ghost-chu commented 8 months ago

Are there any plans to add bandwidth control features? This is a long-standing issue in Kubo, when you need to embed IPFS into an application, if the bandwidth can't be controlled, it usually results in exhausting all the available bandwidth and causing the user's network to block.

ianopolous commented 8 months ago

We use this in Peergos currently and on public servers the idle (not serving blocks on bitswap, but normal kademlia, identify etc. usage) bandwidth is ~20-100KB/s. We hope to reduce that in the future.

Or do you mean a bandwidth limit for active use? In general though, yes, bandwidth control features do sound good. Like a limit per peer, and total for example. Maybe per protocol too. How would you be looking to use it?

Ghost-chu commented 8 months ago

We use this in Peergos currently and on public servers the idle (not serving blocks on bitswap, but normal kademlia, identify etc. usage) bandwidth is ~20-100KB/s. We hope to reduce that in the future.

Or do you mean a bandwidth limit for active use? In general though, yes, bandwidth control features do sound good. Like a limit per peer, and total for example. Maybe per protocol too. How would you be looking to use it?

It's good to keep them separate, it helps to precisely control the resources that IPFS can consume.

For me, I just want to keep IPFS working with as little impact on the user's network as possible. The main traffic will be delivered through the master node, but anyone can join in to help deliver it.

I tried Kubo and it's nice to be able to limit the number of connections, but the lack of bandwidth limiting features is a dead giveaway. (Since it was mentioned in 2016, developers don't seem to have the will to implement it)

Many users have routers that do not perform well, and IPFS can easily destroy a user's home network through the sheer volume of connections and traffic, ultimately resulting in network slowdowns and even outages.

I want IPFS to work in a way that doesn't interfere with the user's network, but assists in the transfer of files (even though it's not fast), which it need on bandwidth and connections control.

If a user starts an IPFS application and immediately exhausts all the connections and bandwidth allocated by the ISP and causes the network to become unstable or disconnected (or even the router to go down), the user will simply avoid enabling the application if possible.

ianopolous commented 8 months ago

It sounds like you want to be able to limit the total bandwidth used, i.e. the coarsest possible control. I think we will implement that.