I was thinking about chat protocols.
Had a federated design in mind, where each channel had its authoritative server for metadata, and then mirror servers for redundancy and scaling out, with rules for complex netsplit/netjoin situations, etc., and then users had their homeservers.
But then I thought:
Why not have the authoritative server only host the list of members, and version it, and then have all the clients put a reference to specific immutable version of channel's member list as destination of the messages they send.
And then all the messages would bypass the authoritative severs, going directly between users' homeservers. And history replay would be much simpler because you wouldn't have to go back and recalculate past membership lists based on past joins/parts.
It seemed like such an elegant solution, making everything way simpler and more scalable at the same time. I didn't like it, but rationally it seemed like a superior solution...
And then it occured to me - either this is what Matrix did, or it has the same problem:
Just joining a room makes your homeserver receive new connections from every other homeserver in the room.
Join the biggest room, change your DNS to point to your enemy, and bam, that person gets DDoSed by all the other homeservers.
@wolf480pl I was also thinking chat protocols, similar ideas, didn't think of that, nice catch.
@wolf480pl I wonder what XMPP does?
@philipwhite XMPP doesn't have distributed chatrooms, so your homeserver will only interact with the server hosting the chatroom, and not with the homeservers of other participants.
All your moe needs! A kind, generalistic instance where everyone is welcome! Important: if you sign up, be sure to check "spam" for your confirmation email if it does not appear.