Skip to main content


I'm sorry, it took *how* many servers to post a single long message from Ghost to 5k fediverse accounts and handle some replies?

activitypub.ghost.org/beta-pla…

(via @fediversereport)

(edited again TA: See replies from @thisismissem pointing to implementation choices + @bengo about pushing to Mastodon)

This entry was edited (1 year ago)
in reply to Erin Kissane

I just built a whole thing in Ghost specifically because it was moving toward AP integration and this is…alarming, especially since Ghost plans to charge for fedi subscribers. (Which, no wonder, given that situation.)

But like: WHAT?

in reply to Erin Kissane

i've been paying $100/month for my mastodon instance and I'm happy with the performance now but when I was only on a $20/month server it got really rough sometimes
in reply to Julia Evans

@b0rk I mean, I definitely hear about how resource-intensive fedi servers can be, and we don't have specs on what exactly Ghost is running, but yiiiiiiikes

(Also, for a system that still roots for single-user instances, $100/month is a high barrier to entry!)

in reply to Erin Kissane

@b0rk If I felt the need for a single-user Mastodon instance I would definitely try snac2 first. codeberg.org/grunfink/snac2
in reply to Erin Kissane

Julia wrote a toot before on this: social.jvns.ca/@b0rk/111450383…

At the time it was $40/month

ActivitiyPub/Mastodon are more targeted to communities and to larger instances then to single user instance, which WP/Ghost basically are. Something you touched upon in moderation paper.

ActivityPub is extremenly chatty as well, which doesn't help.

This entry was edited (1 year ago)
in reply to Erin Kissane

@b0rk Just to give a benchmark, we're hosting single-user instances with 100k followers, 25 threads for $49/month.
in reply to Erin Kissane

I know someone who is pondering switching his newsletter from beehiiv (which is pretty janky ime) to Ghost. IDK if he's aware of this.
in reply to Erin Kissane

right. This guy has, I think, some thousands (?) of subs. So,... Not good?
in reply to Santa Dog

@4d3fect Thousands of email subscribers is pretty easy to price out for Ghost, but thousands of fedi subscribers…unclear what that will involve.
in reply to Erin Kissane

@4d3fect I used it for thousands of subscribers years ago and it was like $9/mo. activitypub may only make sense for self hosting if having thousands of masto followers is burning that much juice. I'd be interested to benchmark 5thousand followers on 100 masto servers versus 5000 on 100 threads versus 100 friendica versus 100 pleroma etc etc... someone write a grant proposal! ✍️
in reply to Erin Kissane

ugh so I believe this is a mastodon fail and def not a protocol fail.

(at risk of being wrong, and sorry if I am)

Mastodon only shows things that are pushed into it from other servers.

Push is only important for real-time synchronization.

IMO it's obviously a good idea for any AP Server to check like once a day or on-demand to make a single HTTP Request to an Actor's outbox and show its recent stuff.

But mastodon doesn't do this.

in reply to bengo

so for a publisher to ensure that all their followers see a thing, and because in practice so many people use mastodon, a publisher has to spend all this compute/bandwidth/energy to make sure that they push the post into each followers inbox.

It would be better for everyone for mastodon and everyone else to just fetch a followee's outbox once a day (aka 'what RSS does') and just progressively enhance into receiving pushes from publishing actors that want to do it. but masto requires it

in reply to bengo

I don't think pull is the answer!
The majority of accounts don't post for long periods and doing a fetch on each individual accounts you follow is a lot less efficient. Social media is predominantly read not write.
And caching means you get stale information, might be OK in RSS but not for social media
in reply to bengo

Clarification: to each *domain* mastodon.social/@Gargron/11324…


@polotek @poswald No, that’s not true. A post is only delivered once per domain. And we use keep-alive connections to shave off request setup time for repeat deliveries. If you have 5k followers from 2 domains, 2 requests will be made. Only if you have one follower per domain does it become 5k requests.

in reply to Juanlu

@astrojuanlu I can't help but feel like, regardless of any hypothetical flaws or not in Ghost's implementation, that relays are the answer here. Especially smaller instances could benefit from sharing in/outbox and post discovery to both improve user experience and reduce redundant load.
in reply to Mx Amber Alex (she/it)

@amberage @astrojuanlu
I believe the Fediverse Discovery project will solve the discovery issues and hopefully reduce redundancies (in storage at least)
fediscovery.org/
It's still in the early stages but I think relays will become obsolete
in reply to Erin Kissane

they’ll probably improve performance quite a bit before its ready. They’ve been pretty open about how they’ve been building it to begin with. Just iterating and seeing where the pain points are.
in reply to Erin Kissane

yeaaaaaah, i considered running my own instance til i realized that this stuff runs on ruby on rails, which isnt.. the best... in terms of performance
in reply to Viss

@Viss
This might have been true in 2014, but it’s not really true in 2024. Plenty of us have Rails fleets sized in the dozens with monthly traffic sized in the tens of billions of requests. Shopify does even more than that.

That said, the floor of resource requirements can be fairly high without tuning, but this is largely due to glibc’s malloc and jemalloc helps. This makes you think it scales linearly from this floor, but it doesn’t.

@Viss
in reply to Viss

@Viss Hetzner LOVES rails apps.

That said, I can’t imagine running any of the other apps (Akkoma, iceshrimp, mbin, pixelfed, peertube, bookwyrm, or Lemmy) with 20k concurrent users, though u guess there may be a few lemmy instances that large

@ZiggyTheHamster @kissane @fediversereport

in reply to Erin Kissane

I always thought of this as the fundamental technical problem to solve for distributed social networks. And we're just... not solving it. People are talking about everything else besides this. And it's so weird to me.
in reply to Marco Rogers

@polotek I feel like people are talking about it! But maybe less publicly than they could be.

(And I have no handle on whether what Ghost is encountering is an AP thing or a them thing—or, to be more precise to which degree it's one thing or the other.)

in reply to Marco Rogers

@polotek I remember when twitter first launched and everyone in that community were discovering the work needed to get RoR to scale to a global “firehose” size. Feels like we're back there again but in different ways.
in reply to poswald

@poswald I should be more clear about which issue I'm referring to. There are many technical issues to solve. I'm talking specifically about an issue that is specific to the decentralized nature of the fediverse. There are many optimizations that a company like twitter can do to scale fanouts, because they control both the source and the destination. Fediverse servers do not have that advantage. And more so, many servers are likely to be under resourced.
in reply to Marco Rogers

@poswald As far as I understand, mastodon's implementation is particularly naive today. If you have 5000 followers, every post creates 5000 jobs. There are many optimizations they can make today that will help. But I believe the problem of scaling of decentralized message delivery is going to be a huge bugbear if the fediverse keeps growing.
in reply to Marco Rogers

@polotek @poswald No, that’s not true. A post is only delivered once per domain. And we use keep-alive connections to shave off request setup time for repeat deliveries. If you have 5k followers from 2 domains, 2 requests will be made. Only if you have one follower per domain does it become 5k requests.
in reply to Eugen Rochko

@Gargron @poswald feel free to explain the actual reason this is such a persistent problem. I don't mind being corrected. But please don’t let that be the only reason you pop in.
in reply to Marco Rogers

@polotek @poswald It’s really easy to make mistakes in computing that make a massive difference in performance. For example a database query that runs inside a loop vs outside. And it’s easy to miss when your code runs once but becomes really obvious once it has to run multiple times per second. I would not make any assumptions about the protocol itself based on Ghost’s work in progress implementation.
in reply to Erin Kissane

this seems a bit unbelievable for some reason?

Am wondering if it was actually the AP stuff that was the burden, or whether it was the thundering herd requesting the link previews?

in reply to Emelia 👸🏻

@thisismissem Yeah, I just can't understand this.

The fedi preview DDOS is obviously a thing, but the way this is presented just seems so weird. (And if it's actually about link previews, are they going to charge more for posts that get widely boosted? I have questions.)

in reply to Erin Kissane

@thisismissem this (as in what the ghost post describes) does not pass a smell test for me
in reply to Darius Kazemi

@darius @thisismissem I would say that I am significantly more alarmed by the way they're talking about it and what that implies than by AP's intrinsic resource consumption. But I am just a person who tries to avoid running servers of any kind.
in reply to Emelia 👸🏻

okay, so I had a quick look, at it seems like they're processing everything in the request/response lifecycle, instead of using a queue:

1. github.com/TryGhost/ActivityPu…
2. fedify.dev/manual/mq

So by using queue they could probably get better performance

in reply to Emelia 👸🏻

this also means incoming activities are likely holding connections open longer triggering auto scaling because usually that happens based on request count and CPU/Memory
in reply to Erin Kissane

Admittedly I know nothing about Ghost, but they were a founding member of the Social Web Foundation, which I've seen a lot of people (reasonably) being very concerned about, AND they don't believe in paying artists (check the AI pug), that's like two strikes already.
This entry was edited (1 year ago)
in reply to Erin Kissane

I read that post as “we set this up using our standard systems and they are definitely not right for this, so we’re going to have to figure out a different system that fits and that’ll take a while, but we’ll get there.” But I’m just watching and enjoying the messy honesty of these posts, not necessarily understanding the details.
in reply to Pete Ashton

@pete I think that's a reasonable take!

It's also partly the information that to federate Ghost posts to a group that's equivalent in size to the number of people who follow me on Mastodon will cost at least $155/month—not counting email subscribers—is somewhat startling to me.

Like, I fully understand that infra isn't free, but Wordpress (which I am not going to use) charges $25/mo for a plan that includes AP federation.

in reply to Erin Kissane

Yeah, that’s a downer. I wonder (based on total ignorance!) if there’s an incremental way to do this sort of thing? Like RSS broadcast at one end, full Masto ping-fest at the other, and Ghost could be somewhere inbetween?
in reply to Erin Kissane

@pete You can federate with all of our WordPress.com plans, including the free plan! I assure you our infra can handle a lot more than the fediverse has been able to throw at it thus far. :)
in reply to Erin Kissane

You do need that plan for installing plugins but many features, like ActivityPub, are available on all plans.
in reply to Matt Wiebe

@mattwiebe So I went back to see what docs I'd run into as I searched while making dinner, in case it's useful: I googled "activitypub wordpress free" (not in quotes) bc I thought I remembered that it was free. The first few results offered no obvious answer, but the fourth had one that was accurate at the time, but isn't now.

(Might I have checked another post if I hadn't been stirring multiple pots of noodles? Very likely yes.)

wordpress.com/blog/2023/03/17/…

in reply to Erin Kissane

Aha! That was the post from when we acquired the plugin and brought @pfefferle on board. This is when we launched it for everyone: wordpress.com/blog/2023/10/11/…

We should probably add a follow-up note to the older post :)

in reply to Matt Wiebe

@mattwiebe @pfefferle Honestly this largely is a search results problem, but that's a problem we all live with forever somehow. I keep meaning to check out your implementation!
in reply to Erin Kissane

Maybe we really have to update the blog-post a bit to make that clear. I had quite some comments from people that also thought they had to upgrade!
This entry was edited (1 year ago)
in reply to Erin Kissane

You might want to get Linky to make your text clips more easily readable

“‎Linky: Share links & more” apps.apple.com/us/app/linky-sh…

@kissane @fediversereport @thisismissem

in reply to DrBob, 🧠 Mechanic

@drrjv The quoted text wouldn't come close to fitting in a single Mastodon post on my server except as a screenshot with alt text, but thanks
in reply to Erin Kissane

Thanks for pointing that out. I will definitely hold on before clicking the purchase button! :( I am actually following your steps regarding this: Was almost hitting the publish on a write.as when saw your issues when your post got some traction... Now, back to ground zero! Any other options you've considered?
in reply to Erin Kissane

Yup! We've got to figure some things out here for sure.

You're absolutely right in your assessment that some of the work is on the side of our (fledgling) implementation (eg. queues) and some may also be needed at the protocol level.

cc @evanprodromou

Connected Places reshared this.

in reply to John O'Nolan

@johnonolan

Tbh I appreciate the transparency, even when the implications are startling, in part because it draws out other people's similar struggles. It seems like a whole lot of factors conspiring to be a problem—but also some great people working on those factors.

@fediversereport @thisismissem @bengo @evanprodromou

Erin Kissane reshared this.

in reply to Erin Kissane

@evanprodromou absolutely - we’ll try to keep publicly documenting gotchas and things we struggle with, to create more shared resource and knowledge

Hopefully along the way we’ll also document some solutions 😅

in reply to Erin Kissane

there is definitely a cycle of compute is cheap so software is ineffective followed by compute becomes expensive so folks need to make software efficiently again. I knew we were on the cusp of needing to code efficiently again, but this is egregious.
Unknown parent

friendica (DFRN) - Link to source
Adrian Shaw

@Elena Rossini ⁂

Elena,
I think you could be making a mistake here. If I was a newsletter recipient, I'd be doing everything in my power to prevent any indication of opening or interaction.

Unknown parent

mastodon - Link to source
Erin Kissane
@_elena It's a bit weird, yeah! I have nothing but sympathy for their implementation struggles, and I appreciate them being so transparent, it's just that the business implications were a bit startling.
in reply to Erin Kissane

well I'm a contributor to Mbin. So try to rewrite Ghost to PHP 😂. Problem solved.
in reply to Erin Kissane

Sounds like there's room in the fediverse ecosystem for a resource optimized activity pub implementation ... Just when I was looking for a new side project. Hmm.