Amazing blog post! Been reading the ActivityPub spec and found it rather lacking. It’s only when you add WebFinger and signed messages that things start to make sense.
And a followup question: wouldn’t it be more efficient for big instances to use WebSockets to federate? Making a HTTP request for every action your users take seems unnecessarily wasteful.
Yeah it’s definitely very busy in terms of the amount of requests that’s get made. I’m not handling a bunch of them that I don’t need but there’s shitloads all the time.
I think that would only work when the number of instances is small. Two solutions to this might be:
have instances act like relays where the home instance of a community notifies 10 instances and then each of those instances notifies 10 instances, etc.
batch updates on a timer such that once a minute all posts, comments, boosts, etc within a minutes are buffered and sent together.
That being said, I do agree with you that it’s inefficient to open a connection to every other instance.
About your proposals:
I don’t think your first solution is feasible. How would an instance know which other 10 instances to notify?
I do like your idea of batching operations together! Would definitely cut back on the amount of HTTP calls and signature validations. Perhaps this can even be extended further: right now every user interaction is signed before its been sent to other instances. Would be interesting if the instance itself also has a public/private key and that it can sign a whole batch at once (rather then signing every single user interaction).
Amazing blog post! Been reading the ActivityPub spec and found it rather lacking. It’s only when you add WebFinger and signed messages that things start to make sense.
And a followup question: wouldn’t it be more efficient for big instances to use WebSockets to federate? Making a HTTP request for every action your users take seems unnecessarily wasteful.
Yeah it’s definitely very busy in terms of the amount of requests that’s get made. I’m not handling a bunch of them that I don’t need but there’s shitloads all the time.
I think that would only work when the number of instances is small. Two solutions to this might be:
I looked at how many WebSocket connections a single server could keep open, and it seems quite high: https://unetworkingab.medium.com/millions-of-active-websockets-with-node-js-7dc575746a01
That being said, I do agree with you that it’s inefficient to open a connection to every other instance.
About your proposals: