Sfederowany problem

Mamy trzy główne topologie czy też modele działania usług w sieci: scentralizowany, sfederowany[1] i rozproszony. Każdy z nich ma swoje wady, zalety i… problemy. W tym wpisie będzie o tym, czemu federacja nie zawsze jest dobrym pomysłem, jaki problem wprowadził z powodu wyboru sfederowanego modelu Mastodon. I co można z tym zrobić.

Wstęp

Na początek dla przypomnienia – albo dla kontekstu – Mastodon to serwer social media, w założeniu mający być – mniej więcej – alternatywą dla Twittera. Działaja w oparciu o protokół ActivityPub. Zamiast jednego, centralnego serwera, działającego pod jedną domeną[2] istnieje wiele serwerów. Każdy z nich ma swoją odrębną domenę, swojego administratora, swoją moderację i swoich użytkowników. A pod spodem – swoją własną bazę danych. Jednak przy tych wszystkich odrębnościach, w przeciwieństwie do sieci scentralizwoanych, serwery wymieniają się między sobą danymi, jeśli zachodzi taka potrzeba. Czyli na Bluesky nie polubimy tweeta, natomiast w przypadku wpisu na Mastodonie (toot) nie ma przeszkód by użytkownik jednego serwera polubił wpis z innego[3].

Typowym przykładem sieci zdecentralizowanej podawanym jako przykład są serwery popularnej usługi, jaką jest poczta elektroniczna (email). Niezależnie, czy „skrzynkę”[4] mamy na Gmail, Outlook, Onecie, Protonie czy własnym serwerze, możemy wysłać mail i za – pośrednictwem protokołu SMTP – dotrze on na serwer odbiorcy.

Osobiście uważam, że lepszym, bliższym przykładem usługi sfederowanej, do której można porównać Mastodona, są grupy dyskusyjne, działające w oparciu o protokół NNTP. Niestety, usługa nie jest już powszechnie używana czy znana, więc jako przykład przybliżający ideę słabo się nadaje. Jednak wydaje mi się lepsza, bo zachodziła interakcja między wieloma użytkownikami, którzy mogli swobodnie wchodzić w interakcję z treściami zamieszczonymi przez innych użytkowników. Nie było określonego przez nadawcę odbiorcy.

Technicznie działało to tak, że administrator uruchamiał serwer NNTP, ustalał z jakimi serwerami wymienia się treściami, jakie grupy, czyli treści będzie utrzymywał na swoim serwerze. I jacy użytkownicy mogą z jego serwera korzystać, czyli pobierać i zamieszczać treści. Z punktu widzenia użytkownika wyglądało to tak, że łączy się do jednego serwera, odbiera wiadomości z wybranych grup dyskusyjnych napisane przez różnych użytkowników. A jeśli coś napisze, to trafia to na wszystkie serwery, na których obsługiwana jest dana grupa.

Problem

Tyle tytułem wstępu, pora przejść do problemu. Serwer Mastodona może postawić każdy. Obecnie działa blisko 10 tys. serwerów Mastodon[5]. Gdy któryś z użytkowników zamieści toot z linkiem do strony WWW, to wszystkie serwery, na których na których znajdują się jego followers (obserwujący), generują podgląd strony. W tym celu każdy z serwerów wysyła żądanie do docelowego serwera WWW w celu pobrania strony? Gdzie problem? Ano w tym, że w przypadku kont z większą liczbą obserwujących, tych serwerów potrafi być wiele. I wysyłają te żądania w zbliżonym czasie. Z punktu widzenia ofiary, czyli serwera WWW do którego link zamieszczono to coś w rodzaju DDoS.

Temat nie jest nowy, był dokładnie opisany w 2022, z wykresami, schematem działania i ilością żądań. Gorąco polecam lekturę, szczególnie jeśli w moim opisie jest coś niejasnego. Jest tam też trochę o zasadności nazywania tego działania DDoSem. Oryginalne zgłoszenie na GitHub jest jeszcze starsze i pochodzi z roku 2017. Sam schemat „ataku” w pewnym sensie przypomina botnet, przy czym kontrolującym byłaby tu dowolna osoba zamieszczająca link w treści toota, a boty wykonują tylko jedno żądanie.

Tyle, że to wystarcza do zakłócenia działania zewnętrznych usług. O tym, że problem nie jest jedynie teoretyczny, świadczą niedawne przykłady z kraju:

Czy linki dodawane na fedi obciążają serwery www? Obciążają, bo po dodaniu linku, każdy sfederowany serwer zaciąga sobie jego podgląd.
[…]
Spotkałem się już z głosami, że to coraz poważniejszy problem, porównywalny z małym atakiem DDOS. Nie wiem na ile wpływa to na obciążenie mojej strony, ale na pewno jest zauważalne. Dlatego będę pamiętał, aby dodawać link nieco wcześniej lub później niż w innych mediach.
Źródło: https://101010.pl/@rdrozd/113668863306405283

To jest problem, który mnie dotknął (blog na WP z wtyczką ActivityPub), po przeprowadzce na mniejszy serwer.
Mimo tego, że śledzących na fedi mam raptem niecałe cztery dychy, to pierwsza publikacja nowego wpisu zamuliła mi stronę na jakieś pół godziny, może dłużej, a logi były pełne błędów 500 i 503 (w tysiącach).
Dzięki pomocy @m0bi ustaliłem co bardziej obciążające wtyczki, wywaliłem je i trochę innych, zostawiając pewnie z połowę. Do tego czyszczenie instalacji i takie tam, a i tak pomogło dopiero zwiększenie limitów serwera. Dzięki temu przydycha po publikacji „tylko” na 5-10 minut :/
Myślałem o rezygnacji z wtyczki AP, ale widzę, że musiałbym też odpuścić wrzucanie odnośników do wpisów na fedi.

To właściwie uniemożliwia funkcjonowanie w fediświecie malutkim amatorskim blogom bez wsparcia dużych platform.
Źródło: https://pol.social/@LukaszHorodecki/113685265406284436

Jeśli chodzi o mnie i ten blog, to z zupełnie innej okazji mam nieco stuningowaną konfigurację, relatywnie mało obserwujących, a serwer uruchomiony na dedykowanym VPSie. Więc jedyne co zauważam – poza wpisami w logach – to kilkusekundowa mniejsza responsywność serwera[6].

Dlaczego problem dotyczy Mastodona, a nie innych wspomnianych wcześniej sfederowanych usług? Powody są dwa. Po pierwsze, poczta elektroniczne czy grupy dyskusyjne działają wyłącznie same ze sobą, nie wchodząc w automatyczne, masowe interakcje z zewnętrznymi usługami. Po drugie, zjawisko popularny serwis linkuje do mniejszego i ten nie daje rady obsłużyć ruchu jest znane od dawna pod nazwą Slashdot effect. Tyle, że w tamtym przypadku ruch inicjowany był przez ludzi, a nie automatycznie. Czyli problem wynika z architektury rozwiązania i implementacji.

Rozwiązanie

Możliwych rozwiązań jest kilka. Pierwsze, najprostsze, to usunięcie interakcji z zewnętrznymi usługami w ogólności, a funkcjonalności generowania podglądu w szczególności. Tyle, że to obecnie trochę standard w social media i Mastodon wyglądałby ubogo.

Kolejne rozwiązanie to wprowadzenie jakiegoś rozwiązania typu cache, działającego w obrębie całej sieci. Czy to w stylu: serwer, którego użytkownik zamieszcza link, jego serwer generuje podgląd i rozsyła go razem z tootem. Czy też w postaci zewnętrznego, wspólnego dla wielu instancji Mastodon, serwisu służącego do generowania podglądu. Wreszcie można wyznaczyć główne serwery, które będą generować podgląd, a pozostałe będą polegać na ich danych. Tyle, że wszystkie te rozwiązania – może pierwsze najmniej – podważają niezależność działania poszczególnych serwerów.

Innym rozwiązaniem jest zmniejszenie ilości serwerów, czyli większa koncentracja użytkowników. Jednak nie zanosi się na to i trudno w praktyce na to liczyć.

Konsekwencje

Z jednej strony trudno posądzać autorów rozwiązania o celowe stworzenie takiej architektury, by powodowała problemy zewnętrznych serwisów, Z drugiej strony jeśli coś wygląda jak kaczka, chodzi jak kaczka i kwacze jak kaczka... Problem jest znany twórcom Mastodona od blisko dekady i… jest uparcie ignorowany.

Piszę o tym, bo co jakiś czas wraca temat wykorzystywania scentralizowanych platform social media (Facebook, X/Twitter) przez instytucje publicznie. I pojawia się pomysł/propozycja wykorzystania Mastodona jako alternatywy. Według mnie, przy obecnym stanie rzeczy, jest to pomysł niepoważny. Trudno oczekiwać, by instytucje państwowe czy samorządowe wykorzystywały narzędzia, o których wiadomo, że mogą być szkodliwe dla innych usług w sieci.

Mnie osobiście ten stan rzeczy zniechęca do korzystania z platformy. Nie czuję się komfortowo z tym, że mój błahy wpis może powodować problem u jakiejś strony trzeciej. Może nie na tyle, by przestać zupełnie z niej korzystać, ale na tyle, by ograniczyć aktywność. Staram się linkować tylko do swoich stron i nie podbijać (boost) wpisów z linkami.

[1] Znany też jako zdecentralizowany.
[2] Uproszczenie, w praktyce scentralizowane serwisy mają wiele serwerów, ale dla łączącego z zewnątrz użytkownika jest to niezauważalne.
[3] Uproszczenie, serwery muszą dopuszczać federację między sobą, użytkownicy nie mogą się blokować. Jednak stan domyślny i wyjściowy jest taki, że mogą.
[4] Czyli adres email.
[5] Źródło, Marzec 2026, tylko serwery działające w oparciu o oprogramowanie Mastodon. W praktyce jest więcej kompatybilnego oprogramowania o podobnym schemacie działania.
[6] Dla pamięci: load average 9,95, 3,51, 1,25 w po kilkudziesięciu sekundach od zamieszczenia wpisu. Typowo jest ok. 1 wszędzie.

Mastodon a blokowanie

Mastodon chwali się, że daje możliwość kontroli widoczności. Na poziomie użytkownika posiada do tego celu dwie zbliżone opcje. Pierwsza z nich to mute, czyli wyciszenie, które, cytując komunikaty pojawiające się przy blokowaniu:

They won’t know they’ve been muted.
They can still see your posts, but you won’t see theirs.
You won’t see posts that mention them.
They can mention and follow you, but you won’t see them.

Druga z nich to block, która jest opisana jako:

They can see that they’re blocked.
They can’t see your posts and you won’t see theirs.
You won’t see posts that mention them.
They can’t mention or follow you.

Czyli w obu przypadkach nie widzimy postów w których jest wymieniane (mention) dane konto. Ma to nieco sensu, ale wykorzystując którąkolwiek z możliwości, zepsujemy sobie dostęp do treści. I to nie tylko pisanych przez zablokowane konto, ale także znikną nam wszystkie wiadomości w wątkach, w których jest wymienione to konto, niezależnie od tego, kto je napisał. Dość inwazyjne, zwłaszcza, że ludzie często zostawiają w wątkach wszystkie dotychczas wywołane osoby.

Jeśli chodzi o block, to osoba zablokowana widzi, że jest zablokowana. Przynajmniej teoretycznie, bo co prawda taka informacja jest dostępna (w API), ale nie ma żadnego miejsca, gdzie możemy sprawdzić jakie konta nas zablokowały. Nie dostajemy też informacji o blokowaniu. Co w praktyce możemy zauważyć? Zepsute wątki, zwłaszcza brakujące wiadomości. Choć wtedy może to wynikać także z wyciszenia przez nas innej wywołanej osoby, poprzez mute. Najlepszą metodą bez sięgania po API jest sprawdzenie, czy mamy możliwość obserwacji danego konta. Brak możliwości włączenia obserwacji danego konta – opcja niekatywna – oznacza, że zostaliśmy zablokowani.

Jeśli chodzi o they can’t mention to… nie działa. Jak najbardziej można zamieścić toot zawierający oznaczenie konta, które nas blokuje. Serwer podpowiada nicka i obsługuje go normalniew toocie. Zapewne wywołana osoba nie dowie się, że została oznaczona, ale to nie znaczy, że oznaczenie nie została. Co więcej, wszyscy inni użytkownicy będą widzieli to oznaczenie. Nie wiem jaki był zamysł autorów, ale wygląda na obietnicę bez pokrycia. Podobnie jak they can see that they’re blocked. Niby można się dokopać, ale czy widać? Polemizowałbym.

Jeśli chodzi o they can’t see your posts, to nie do końca jest to dowiezione. Zadziała tylko, jeśli mamy ograniczoną widoczność własnych tootów do zalogowanych kont. Co raczej nie jest popularnym ustawieniem. W przeciwnym razie wystarczy, że oni skorzystają z okna przeglądarki w trybie prywatnym.

Podsumowując, mam wrażenie, że z poziomu użytkownika blokowanie/wyciszanie na Mastodonie zrobione jest słabo. Skomplikowane (dwie różne metody), nie do końca działające zgodnie z opisem, za to bardzo inwazyjne. Wygląda, jakby ktoś projektując rozwiązanie mocno skupił się na aspektach technicznych, zapominając o „dużym obrazie” i skutkach. W efekcie użytkownicy nie dostają więcej niż na innych platformach, za to cierpi używalność platformy.

Wpis przeleżał nieco w szkicach, więc nadeszła pora na publikację…

Głodny wilk

We wpisie o optymalizacji strony pisałem tym, że wilk może być syty, i owca cała. Czyli, w kontekście reklam AdSense, można mieć reklamy i nie mieć reklam. Zarabiać i nie psuć strony wolnymi reklamami.

Dawno temu pisałem co prawda, że wyłączyłem reklamy AdSense. Przynajmniej na podstawowym blogu. Jednak było zgromadzone sporo środków, ale poniżej progu wypłaty. Co skłoniło mnie do salomonowego rozwiązania – włączenia reklam na wybranych stronach. Dokładnie na tych, które mają najwięcej wejść z wyszukiwarki.

Uznałem rozwiązanie za mało inwazyjne z jednej strony, a z drugiej okazało się zaskakująco dochodowe. To nawet nie było słynne 80/20, to bardziej 95/5. Znaczy się kilka(naście) najpopularniejszych stron robiło praktycznie cały dochód. A skoro nie widać różnicy, to po co spowalniać resztę? Brak inwazyjności objawił się także względnie dopasowanymi reklamami. Może nie były tematyczne, ale gdy zerknąłem parę razy, widziałem reklamy po polsku, bez paramedycznych itp. Raczej duże sklepy itp. Czyli jakby znośnie.

Gdybym był zwolennikiem teorii spiskowych stwierdziłbym, że Google specjalnie zwiększa dochód po włączeniu reklam, a potem steruje tak, żeby się wyświetlały, ale żeby jak najdłużej nie można było wypłacić środków. Bo wykres przychodów z reklam AdSense w czasie wygląda tak:

wykres zarobków AdSense w latach 2023-2025. widoczny wyraźny trend spadkowy
Zarobki AdSense, 2023-2025

Nie trzeba doktoratu ze statystyki, żeby zobaczyć, że zarobki spadają. Systematycznie. I to pewnie mimo dodania reklam na jednej czy dwóch popularnych wpisach w tzw. międzyczasie. Próg wypłaty środków znowu jest blisko ale… jakoś ciągle jest to „za parę miesięcy”. Od paru miesięcy. Czyli ewidentne gotowanie żaby. Czy też bardziej: głodzenie wilka.

Dla jasności, mimo pewnych chwilowych aberracji w pozycji, ilości wejść i odsłon, jest stabilnie. Nic się istotnie nie zmienia – ani ilość wejść, ani pozycja. W panelu AdSense też niby wszystko na zielono. A może to globalny trend?

Cóż, skoro tak to ma wyglądać, to jednak nie będzie połowicznego rozwiązania, tylko reklamy AdSense wylecą. Tym razem zupełnie i na dobre. Ale najpierw chcę uzbierać do progu wypłaty…

Zamiast tego[1] uruchomiłem możliwość postawienia kawy. Zupełnie nieinwazyjne, całkowicie dobrowolne. Czy działa? Za wcześnie, by wnioskować. No ale bez złudzeń, przy blogach tego typu raczej sprawdziłyby się mikropłatności, coś w stylu tego, co próbował kiedyś wdrożyć Brave.

To, co mi jeszcze chodzi po głowie to jakaś sieć, która wyświetla „reklamy” non-profit. Społeczne, jakiś open source itp. I czasami, rzadko, tak 1:20 reklamy stron, które należą do sieci. Znacie coś takiego? A może to pomysł na biznes/startup?

[1] W sumie to nie do końca zamiast, bo trochę szerzej i trochę inna motywacja. Więc to „zamiast” to tylko w kontekście „jest blog i są pieniądze”.