I’m not sure ActivityPub is suitable for implementation of Lemmy/Kbin. ActivityPub seems to be a push (with retry) protocol, where if a message gets lost, the protocol doesn’t seem to have a means to recover synchronization. Theoretically, instances could verify synchronization on a periodic basis, but that would be a massive increase in traffic.
Kind of. My observed behavior of Lemmy, combined with comments from some developers (I haven’t read the code):
Post goes up on community hosted on instance A, Message goes out to B and C: “here’s a new post”
User x@B comments on post. Message goes from B to A saying “here’s a new comment”. A adds the comment, then sends a message to C “here’s a new comment”
User y@C upvotes the comment. Message goes from C to A, then A sends a message to C.
Each of those messages are confirmed by the recipient, and there are timed retries. However, there have been plenty of cases where one of those messages get lost, and the communities get out of sync. As I understand it, the message traffic is only changes. They don’t talk to each other to see what the current state of the content is. So whenever a sync break happens, it is permanent. New content/changes are fine, but stuff that gets lost in transit is lost for good.
Interesting - TIL. I wonder how Lemmy resolves the post #, since it is different between instances, and if it re-syncs comments when you do that. The post # thing is annoying, btw, because it makes it impossible to use relative links in posts/comments.
federation between kbin.social and my instance lemmy.sdf.org seems to be awful and I couldn’t tell where the breakdown was occurring because the issue is intermittent/partial federation
I’m not a web developer so I can’t really say what solutions are best, but I have faith there are people smarter than me working on robust solutions
I’m not sure ActivityPub is suitable for implementation of Lemmy/Kbin. ActivityPub seems to be a push (with retry) protocol, where if a message gets lost, the protocol doesn’t seem to have a means to recover synchronization. Theoretically, instances could verify synchronization on a periodic basis, but that would be a massive increase in traffic.
I haven’t looked at the specs but it is similar to UDP vs TCP?
Kind of. My observed behavior of Lemmy, combined with comments from some developers (I haven’t read the code):
Post goes up on community hosted on instance A, Message goes out to B and C: “here’s a new post”
User x@B comments on post. Message goes from B to A saying “here’s a new comment”. A adds the comment, then sends a message to C “here’s a new comment”
User y@C upvotes the comment. Message goes from C to A, then A sends a message to C.
Each of those messages are confirmed by the recipient, and there are timed retries. However, there have been plenty of cases where one of those messages get lost, and the communities get out of sync. As I understand it, the message traffic is only changes. They don’t talk to each other to see what the current state of the content is. So whenever a sync break happens, it is permanent. New content/changes are fine, but stuff that gets lost in transit is lost for good.
At least for Lemmy, you can “force” it to sync a particular post or comment by pasting the url into your instance’s search bar.
Interesting - TIL. I wonder how Lemmy resolves the post #, since it is different between instances, and if it re-syncs comments when you do that. The post # thing is annoying, btw, because it makes it impossible to use relative links in posts/comments.
that makes sense
federation between kbin.social and my instance lemmy.sdf.org seems to be awful and I couldn’t tell where the breakdown was occurring because the issue is intermittent/partial federation
I’m not a web developer so I can’t really say what solutions are best, but I have faith there are people smarter than me working on robust solutions
Agreed, matrix seems like a far more sensible protocol for federated forums.