@Gargron This is true in the scale we are currently living in, but this won't hold up in a future where we are "popular".
Opening connections and delivering the payload is much more expensive compared to receiving an item, so eventually, the relays will simply be unable to deliver their backlog. Now, you can scale the relays by throwing a lot of hardware and a lot of bandwidth to them.
@Gargron To be more specific: There is a huge difference between a relay delivering 10 posts from 100k nodes (the relay delivering 1 mil. posts) vs. having each node delivering 10 posts.
You'd have to do a lot of work to get the relay-cluster performant enough to handle that load, while delivering 10 posts within a short period of time is a perfectly reasonable workload, even for small nodes on slow hardware.
@Gargron But it doesn't have to impact UX. Put outbound jobs into it's own queue, make sure they don't consume all available sockets so other jobs can run just well.
We (diaspora, that is) would be able to deliver a post to 100k nodes within ~9 minutes on average server hardware (assuming response times I measured across our actual network), while on the same scenario, we would not be able to handle the same load on a central relay, as even the TLS handshakes would consume more than 4 hours.
@Gargron What I'm concerned about, at least in diaspora*s case (and yes, I am obviously biased) is that we are trying to work around an actual issue by implementing a workaround that will not scale in the case we become somewhat popular.
I have not yet found a nice solution, but I always try to talk to people who might also have spent some time thinking about that...