←back to thread

Are we decentralized yet?

(arewedecentralizedyet.online)
487 points Bogdanp | 8 comments | | HN request time: 0s | source | bottom
Show context
INTPenis ◴[] No.45077453[source]
We're more decentralized in fedi but we're also not really consistent either. Which I think is the number one gripe for users who manage to get into the fedi.

I don't mind, I still think it's a huge leap forward, but it's important to set realistic expectations.

replies(2): >>45077542 #>>45121194 #
kace91 ◴[] No.45077542[source]
What do you mean by consistent?

(Never used the fediverse, so zero context here).

replies(1): >>45077886 #
skybrian ◴[] No.45077886[source]
Not who you're replying to, but one issue is that different users will sometimes see a different subset of replies to a post, depending on what the server they're using has copied from other servers.
replies(1): >>45078071 #
alethic ◴[] No.45078071[source]
This isn't correct. Mastodon merged fetch-all-replies in March. https://github.com/mastodon/mastodon/pull/32615

The only difference in visible replies is in the moderation choices of the server the post is viewed from.

replies(3): >>45078107 #>>45078133 #>>45081945 #
danabramov ◴[] No.45078133[source]
How does it work?

In ATProto, there is no need to do this on-demand because the data is already there in the AppView. When you want to serve a page of replies, you read them from the database and serve them. There is no distributed fetching involved, no need to hit someone else's servers, no need to coalesce them or worry about limiting fetches, etc. This is why it works fine for threads without thousands of replies and hundreds of nesting levels. It can also be paginated on the server.

If you don't have this information on your server, how can you gracefully fetch thousands of replies from different servers and present a cohesive picture during a single request? I'm sure this PR does an attempt at that but I'm not sure this is a direct comparison because Mastodon can't avoid doing this on-demand. If we're comparing, it would be good to list the tradeoffs of Mastodon's implementation (and how it scales to deep threads) more explicitly.

replies(1): >>45078358 #
alethic ◴[] No.45078358[source]
There is a detailed explanation available at the link I posted. Second header, "Approach".
replies(1): >>45078670 #
danabramov ◴[] No.45078670[source]
What do you expect the performance characteristics to be compared to querying a database?
replies(1): >>45078966 #
alethic ◴[] No.45078966[source]
I expect them to be unimportant. This has been merged upstream and running on the flagship Mastodon instance for a little while now.

There is also a section related to performance available at the link I posted. Third header, "Likely Concerns", second subheader, "DoS/Amplification".

replies(1): >>45079004 #
danabramov ◴[] No.45079004[source]
What do you mean by unimportant?

I mean from the user's perspective: when I open a thread, I expect to instantly see the entire discussion happening across the entire network, with the paginated data coming back in a single roundtrip. Moreover, I expect every actor participating in the said discussion (wherever their data is stored) to see the same discussion as I do, with the same level of being "filled in", and in real time (each reply should immediately appear for each participant). It should be indistinguishable from UX of a centralized service where things happen instantly and are presented deterministically and universally (setting aside that centralized services abandoned these ideals in favor of personalization).

With ATProto, this is clearly achieved (by reading already indexed information from the database). How can you achieve this expectation in an architecture where there's no single source of truth and you have to query different sources for different pieces on demand in a worker? (To clarify, I did read the linked PR. I'm asking you because it seems obviously unachievable to me, so I'm hoping you'll acknowledge this isn't a 1:1 comparison in terms of user experience.)

To give a concrete example: is this really saying that replies will only be refreshed once in fifteen minutes[1]? The user expectation from centralized services is at most a few seconds.

[1]: https://github.com/mastodon/mastodon/pull/32615/files#diff-6...

replies(1): >>45079136 #
alethic ◴[] No.45079136[source]
I'm not very interested in arguing over the ins and outs of "user expectations" and Mastodon vs. Bluesky, sorry. I would suggest you try it yourself and come to your own conclusion about whether this is a usable system :^)
replies(1): >>45079188 #
1. danabramov ◴[] No.45079188[source]
I'm arguing that "not really consistent" from the grandparent post still applies, and therefore your "this isn't correct" isn't correct.

For realtime discussions (like this one), I don't think we can call it consistent if it takes multiple minutes for each back-and-forth reply to propagate across instances in the best case (and potentially longer through multiple hops?) because you'll see different things depending on where you're looking and at which point in time.

replies(1): >>45079495 #
2. shadowgovt ◴[] No.45079495[source]
In practice, this is rarely an issue due to the nature of human attention. Beyond a couple dozen speakers in a conversation, it's noise.

At least to my observation; I haven't pulled apart the protocol to know why: if you're in a conversation in Mastodon it's real good about keeping you in it. The threading of posts seems to route them properly to the host servers the conversing accounts live on.

replies(1): >>45079599 #
3. danabramov ◴[] No.45079599[source]
And yet I could have a realtime public threaded conversation on Twitter, and am having one on Bluesky (regardless of which PDSs or AppViews other people are using), but cannot in principle have on Mastodon (unless everyone I talk to shares my instance). Does this say anything about relative ability of ATProto vs ActivityPub to meaningfully compete with centralized services?

I hear your point that slower conversation can be better. That’s a product decision though. Would you intentionally slow down HN so that our comments don’t appear immediately? You could certainly justify it as a product decision but there’s a fine line between saying you should be able to make such decisions in your product, and your technology forcing you to make such decisions due to its inability to provide a distributed-but-global-and-realtime view of the network.

replies(1): >>45079638 #
4. shadowgovt ◴[] No.45079638{3}[source]
I'm not sure where you reached the conclusion that you can't have a realtime public threaded conversation on Mastodon; I do it frequently. The way it generally works is that clients will auto-at-tag people in the conversation, which makes sure the message is routed to all in the conversation within more-or-less milliseconds.

Auto-at-tagging doesn't scale to dozens and dozens of actively-engaged speakers, but neither does human attention, so that's not a problem that needs to be solved.

replies(1): >>45079745 #
5. danabramov ◴[] No.45079745{4}[source]
I realize that we might be arguing over definitions here, but to me part of the experience of Twitter-like conversation is seeing other replies appear in real time even when they’re not directed at me — same as how you’ve noticed this thread on HN.

Seeing the existing convo in real time lets me decide which points to engage with and which have been explored, and to navigate between branches as they evolve in real time (some of which my friends participate in). I do earnestly navigate hundreds of times within an active thread — maybe it’s not your usage pattern but some of us do enjoy a realtime conversation with dozens of people (or at least observing one). There’s also something to the fact that I know others will observe the same consistent conversation state at the time I’m observing it.

You might not consider such an experience important to a product you’re designing, but you’re clearly taking a technological limitation and inventing a product justification to it. If Mastodon didn’t already have this peculiarity, you wouldn’t be discussing it since replies appearing in realtime would just seem normal.

In either case, whether you see it as a problem to be solved or not, it is a meaningful difference in the experiences of Twitter, Bluesky, and Mastodon — with both Twitter and Bluesky delivering it.

replies(2): >>45084153 #>>45138585 #
6. shadowgovt ◴[] No.45084153{5}[source]
Oh, that's supported (though the UX is not really ideal): if they're not on the same server as you, you can navigate to the post on its host server and you'll see all replies there. To join the conversation, you can hit reply on one of the posts and you'll get a UI popup to route you back to your own server to respond from there.

It's definitely not as clean as a centralized solution though.

replies(1): >>45084818 #
7. hoidofyolen ◴[] No.45084818{6}[source]
This kind of UX is the main reason I personally dont use Mastodon. It's just not intuitive
8. shadowgovt ◴[] No.45138585{5}[source]
(update: it turns out fetching all the discussion posts is now supported in Mastodon v4.4. https://mastodon.exitmusic.world/@james/115147206129637513)