Eksperymentowanie z kontami federacyjnymi i migracyjnymi

Nov 28 2022
Cześć przyjaciele. To był szalony miesiąc.

Cześć przyjaciele. To był szalony miesiąc. Nasz mały serwer mediów społecznościowych stał się infrastrukturą produkcyjną i wciąż się rozwija.

Masowy exodus społeczności technologicznej z Twittera jest niezwykle realny. Moim zdaniem liczby te potwierdzają hipotezę, że Dolina Krzemowa straciła wiarę w zdolność Muska do poprowadzenia Twittera. Czuję, że zbliżamy się do renesansu mediów społecznościowych i korporacji.

Przegląd wzrostu i liczb Hachyderm

Z punktu widzenia adopcji nasz rozwój jest nieracjonalnie „zdrowy”, jeśli można to tak nazwać:

3 listopada: 720 użytkowników
13 listopada: 6000 użytkowników
23 listopada: 25 000 użytkowników

W mniej niż 30 dni rozwinęliśmy się od pojedynczego węzła do globalnie rozproszonej i redundantnej infrastruktury. Nasz mały magazyn danych Postgres o pojemności 400 MB to teraz 177 GB danych. Przewidujemy ponad 30 TB przestrzeni dyskowej w ciągu najbliższych 6 miesięcy tylko na potrzeby dostarczania treści.

Prawdopodobnie najbardziej fascynującym elementem obserwowania rozwoju naszych usług był ruch. TAk! Ruch!

Dzisiaj całkowicie wyczerpaliśmy naszą główną rurę publiczną, która ogranicza prędkość do 200 Mb/s. Nasz główny dostawca usług internetowych musiał zmienić sposób zarządzania naszym kontem i teraz uważa nas za duże konto firmowe zamiast małego konta firmowego. Dzięki tej zmianie mamy teraz dostęp do wielu nowych funkcji i usług, które z przyjemnością odkrywamy w ramach hostingu Hachyderm.

W najbardziej pracowity dzień (21 listopada) przetworzyliśmy do 1 TB danych.

Myślę o Federacji

Któregoś dnia nasz zespół operatorów i ja wyłączyliśmy usługę z powodu zaplanowanego przestoju. Lecieliśmy trochę na ślepo z naszym ulepszeniem i zdecydowanie nie była to moja najlepsza praca. Transmitowaliśmy aktualizację na żywo na moim kanale twitch. Zarchiwizowane wideo jest dostępne do obejrzenia .

Mój wspaniały partner, Quintessence, spojrzał na mnie po aktualizacji i zapytał, czy mamy środowisko testowe online. Co było całkowicie poprawnym pytaniem, które miało bardzo złą odpowiedź.

Nie. Nie mieliśmy środowiska testowego online. Szczerze mówiąc, nie jestem nawet pewien, jak wyglądałoby środowisko pomostowe poza rozwidleniem danych i utworzeniem małej instancji hachyderm. Problem polega na tym, że Mastodon, podobnie jak wordpress i inne aplikacje, jest świadomy swojej domeny. Stworzenie instancji „staging” wymagałoby trochę przemyślenia.

Im dłużej zastanawiałem się nad tym problemem, tym bardziej odkrywałem, że systemy zdecentralizowane i systemy sfederowane mają nowe problemy, dla których nasza branża nie ma doskonałych wzorców. Mastodon jest zbudowany z przekonaniem, że ludzie z całego świata będą się z nim kontaktować, a także z faktem, że będą dostępne inne instancje online, z którymi będzie mógł się sfederować.

Jak zbudować środowisko przejściowe, aby przetestować federację lub segregację domen? Jeśli pomyśleć o tym. Jak w ogóle działa federacja? Jak duży wpływ ma hachyderm na inne instancje w fediverse? Jaki wpływ na moje systemy mają inne instancje?

Tworzenie hachyderm.wtf

Naturalnie mój umysł zaczął gorączkowo zastanawiać się nad implikacjami bezpieczeństwa i problemami związanymi z wąskimi gardłami związanymi z posiadaniem online dużych globalnie rozproszonych i sfederowanych systemów. Postanowiłem pójść za dopaminą i kupić nową domenę.

Kupiłem hachyderm.wtfi zduplikowałem jeden z naszych hachyderm.iowęzłów. Z kilkuminutowym opóźnieniem nowa domena została wskazana na kopię starego węzła. Teraz nadszedł czas, aby rozpocząć inżynierię wsteczną założeń, które przyjmuje Mastodon i uczyć się o federacji.

Mastodon ulegnie awarii, jeśli spróbujesz „zmienić” domenę.

Pojedynczy węzeł Mastodona jest samoświadomy, co ogólnie mówiąc w systemach rozproszonych jest dużym „nie, nie”. Nauczyliśmy się tego w Kubernetes. Duża infrastruktura zwykle nie powinna mieć świadomości własnej nazwy domeny, tak aby można ją było łatwo replikować i przenosić.

Jednak Mastodon jest zbudowany „dla Internetu”, a nie „dla naszych sieci korporacyjnych”, więc nazwa domeny jest w rzeczywistości granicą systemów dyskretnych w modelu. Im więcej się dowiadywałem, tym bardziej zaczynałem myśleć, że internet po raz pierwszy wydaje się „właściwy”.

W każdym razie nie byłem w stanie utworzyć węzła przejściowego z danymi produkcyjnymi z powodu problemu z domeną, więc po prostu zbukowałem bazę danych i zacząłem od nowa.

Nowe instancje Mastodona wymagają konta administratora.

Aby założyć nową instancję musisz utworzyć konto administratora, inaczej nie będzie możliwości uzyskania dostępu do systemu. Nie byłoby żadnych danych do sfederowania.

Utworzyłem nowe konto administratora [email protected]i zacząłem wprowadzać system online.

Ponieważ większość naszych konfiguracji produkcyjnych była już załadowana na nowy serwer, większość funkcji nowego Mastodona „po prostu działała”. E-maile były wysyłane, a nginx reagował na ruch. Sidekiq był zrównoważony itp.

Hachyderm z zewnątrz

Chciałem zobaczyć, jak to jest być outsiderem hachyderm. Ile z naszych danych było „unikatowych” dla hachyderm? Jak wiele z moich doświadczeń z mastodontem dotyczyło tylko naszego przypadku?

Moja konkluzja brzmiała: „nie wszystko, ale dużo”. Mastodon ma fascynujący związek z „wyznawcami” i nie pozwalał mi już zobaczyć, za kim podążają hachydermianie. To wielka sprawa, zwłaszcza dla systemu, który uczy się i tworzy treści w oparciu o obserwujących.

Na przykład nie mogłem już zobaczyć listy osób mojej partnerki Quintessence, którą obserwuje z hachyderm.wtf.

Hashtagi

Kolejną obserwacją było to, że hashtagi są zarządzane na poziomie instancji. Moje strony z wiadomościami, społecznością i dla Ciebie były puste. Ponieważ na mojej instancji nie było innych osób, nie było „zawartości społeczności”.

Przyzwyczaiłem się do dużej ilości wiadomości technicznych, blogów, postów i artykułów udostępnionych na hachyderm. To wszystko już zniknęło.

Domowa oś czasu

Moja domowa oś czasu była miastem duchów. Nikogo nie obserwowałem, a na moim serwerze nie było nikogo innego. Zasadniczo było tak, jakby fediverse w ogóle nie istniał.

Migracja mojego konta

Jedno z pytań, które nie dawało mi spokoju, brzmiało: w jaki sposób Mastodon zarządza obserwującymi? Co z migracją kont?

Zarządzanie koncepcją zwolenników z wielu systemów jest ogólnie interesującym zagadnieniem informatycznym. Wykorzystałem problem „The Twitter Follower” w kodowaniu wywiadów jako sposób na omówienie niektórych podstaw rozproszonych tablic haszujących oraz grafów kierunkowych i bezkierunkowych.

Decydując się na migrację

Przypadkowo zdecydowałem się wziąć kilka dni wolnego od zarządzania Hachyderm i codziennej pracy w GitHub, aby cieszyć się koncertem Sigur Rós w Islandii. Wiedziałem, że będę „offline” przez około 5 dni.

Jedno z pytań, które przyszło mi do głowy, dotyczy tego, w jaki sposób obserwatorzy są przechowywani w bazie danych i jaki stopień kontroli ma każda instancja federacyjna, a inna instancja zagraniczna? Wszystko, co wiem o systemach rozproszonych, mówi mi, że współzależne systemy z luźną choreografią między nimi to wrzód na dupie i prawie zawsze zły pomysł. A co, gdy węzły w systemie mają różnych właścicieli? To wygląda jak przepis na katastrofę.

Podjąłem szybką decyzję o wypróbowaniu funkcji migracji Mastodona do hachyderm.wtf w nadziei, że dowiem się, jak bardzo jedna instancja ma kontrolę nad inną. Czy mój serwer właśnie powiedział wszystkim pozostałym serwerom, aby zaktualizowały swoje rekordy? Jak to działa? Pomyślałem, że równie dobrze możemy przetestować z danymi produkcyjnymi, a tak się złożyło, że miałem konto leżące w pobliżu, aby stworzyć prototyp podczas moich wakacji.

Zrzut ekranu przedstawiający migrację [email protected] do [email protected]

Zdalna odmowa usługi

Postępowałem więc zgodnie z dokumentacją i kliknąłem przycisk migracji konta. Co najgorszego może się stać?

Poświęciłem kilka chwil na zbadanie mojego nowego konta i skonfigurowałem moje stare konto tak, aby wskazywało nowe. Koncepcja utrzymywania obu instancji w „zgodzie” ze sobą będzie wspólnym tematem w federacji.

Kilka godzin po rozpoczęciu procesu zauważyłem, że moi obserwatorzy zaczęli „migrować” do nowej instancji. Ważne jest, aby zrozumieć, że hachyderm.wtfdziałało to na bardzo małym serwerze z 2 rdzeniami, w zasadzie raspberry pi, gdzie hachyderm.iodziałało na sprzęcie obsługującym przedsiębiorstwa rozproszonym w kilku węzłach w szafie z łącznie ponad 132 rdzeniami.

Mogłem zobaczyć hachyderm.io, jak rozpoczyna się move_workerproces, który jest zdefiniowany w Ruby tutaj i przepisze obserwujących na lokalnej instancji.

Niemal natychmiast zauważyłem problem na hachyderm.wtf. Serwis nie odpowiadał. Po kilku minutach udało mi się wyświetlić działający pulpit nawigacyjny i zauważyłem, że moja oś czasu sama się ogranicza.

429 wniosków o limit stawki
Ograniczanie stawek i niereagujący pulpit nawigacyjny

Zmieniłem rozmiar hachyderm.wtfi dałem mu więcej mocy obliczeniowej, a usługa znów była responsywna.

Oglądanie obserwujących obserwujących

Kiedy wszystko się uspokoiło, zauważyłem, że zachowałem tylko około 10% moich obserwujących? Czy coś było nie tak?

Przejrzałem logi hachyderm.wtfi szybko odkryłem, że coś wyraźnie dzieje się w „partiach”, a partie zostały pogrupowane według serwerów.

Innymi słowy, byłem w stanie zobaczyć , jak w ciągu jednej chwili hachyderm.wtfotrzymałem kilka tysięcy żądań od mastodon.sociali innych instancji. mastodon.sdf.orgNajwyraźniej zdalne serwery musiały przeprowadzić jakieś negocjacje hachyderm.wtfw celu migracji obserwujących.

To było interesujące odkrycie i wyjaśnia, w jaki sposób byłem w stanie wykonać atak DDoS podczas migracji.

Konkretnym wektorem, który może spowodować samoczynne wyłączenie serwera, jest otwarcie osi czasu użytkownika w przeglądarce z załadowaną nową funkcją websocket 4.0.2. Podczas migracji obserwatorzy zapełniają się w czasie rzeczywistym, co powoduje, że inna część pulpitu nawigacyjnego wysyła zapytania do /accountspunktu końcowego szybciej, niż może nadążyć. Skontaktowałem się z zespołem bezpieczeństwa Mastodona w sprawie potencjalnego otwarcia CVE w tej sprawie.

Ale to, co się działo, powodowało tak duże obciążenie między hachyderm.wtfzdalnymi serwerami, które próbowały migrować obserwujących.

Związek wyznawców Mastodona

Tak więc bardzo ekscytującą cechą federacji w Mastodon jest sposób, w jaki zarządza ona relacją obserwujący/obserwowany i uwierzytelnia ją.

Znalazłem kod FollowRequest , który pokazuje punkt początkowy pracy, która przechodziła w hachyderm.wtftryb offline. Mastodon używa publicznych kluczy kryptograficznych do uwierzytelniania różnych żądań i funkcji systemu. Mastodon jest oparty na ActivityPub, który używa sygnatur HTTP do uwierzytelniania między dwiema instancjami. W ten sposób jedna instancja jest pewna, że ​​inna instancja jest w rzeczywistości osobą, za którą się podaje.

Podczas migracji kont wszystkie kluczowe dane muszą zostać odbudowane, ponieważ zaufanie między systemami zostaje zerwane. Funkcja DDoSing hachyderm.wtfpolegała na tym, że tysiące moich obserwujących musiało negocjować i ponownie uwierzytelniać odpowiednio z każdym ze swoich serwerów hosta.

W tym modelu są dobre i złe rzeczy. Jeśli chodzi o federację, była to właściwa decyzja architektoniczna w odniesieniu do uwierzytelniania. Nie mogę się doczekać, aby zobaczyć, czy w przyszłości istnieją inne sposoby bezproblemowej migracji danych!

Inne niezamierzone konsekwencje

Podsumowując, eksperyment zakończył się sukcesem i ujawnił wiele informacji na temat władzy, jaką mam jako administrator Mastodona, a także władzy, jaką inni administratorzy mają nad moimi systemami. Obserwowanie wzajemnego zaufania między systemami dzięki podpisom HTTP jest bardzo fajne!

Migracja do hachyderm.ioiz powrotem hachyderm.wtfzakończyła się sukcesem. Wiem, że będziemy nadal wykorzystywać hachyderm.wtfjako naszą instancję laboratoryjną, abyśmy mogli pracować nad RustyPub, naszą implementacją ActivityPub w Rust, którą zamierzamy zbudować, aby zrozumieć, jak działają przekaźniki.

Zaufanie społeczności

Zostałem dość ostro skarcony przez mojego partnera Quintessence za nieoczekiwane opuszczenie hachyderm.io. Myślę, że poruszyła słuszną kwestię, że inni będą postrzegać zmianę jako coś nieznanego i spekulować na najgorsze. Jak się okazało – jak zawsze – miała rację.

Chociaż mam nadzieję, że fediverse jest mniej budowane wokół reputacji i wizerunku, wierzę, że nie wszyscy rozumieją systemy tak jak ja i postrzegają coś takiego jak zmiana domeny jako ryzyko, a nie jako eksperyment.

Czynnik ograniczający: czas

Myślę, że kolejną nieoczekiwaną konsekwencją jest to, że moi obserwatorzy są teraz do dyspozycji dowolnego właściciela instancji mastodonta, który pierwotnie obserwował moje konto w tym sensie, że ich zadania związane z renegocjacją podpisów HTTP mogą być bardzo opóźnione.

Nie sądzę, aby ktokolwiek kiedykolwiek stracił obserwujących podczas migracji, chyba że serwer zdalny, który podążał za tobą, został trwale zniszczony.

Myślę jednak, że renegocjacja zaplecza w innych przypadkach może zająć dni, tygodnie, a nawet dłużej. Jednorazowe śledzenie jest szybkie i łatwe, ponieważ większość negocjacji można przeprowadzić w przeglądarce, jednak praca wsadowa na zapleczu daje dużo wiary, że inne instancje mają poprawnie skonfigurowane sidekiq i nie ma opóźnień w ich kolejkach .

Powrót do domu na Hachyderm.io

Kilka minut temu rozpocząłem migrację z powrotem z hachyderm.wtfmojej instancji domowej hachyderm.io. Podejrzewam, że minie kilka dni, zanim większość moich zwolenników ponownie rozpocznie negocjacje.

Powrót do hachyderm.iokraju uświadomił mi, dlaczego ostatnio było tak cicho.

Zauważyłem, że wszystkie moje powiadomienia, które wysadzały mój telefon, nagle ucichły.

Zrozumienie Twoich danych

Tak więc dane, które sprawiają, że jesteś „ty” na Mastodon, w większości opierają się na twojej instancji. Przeważnie.

W przypadku przenoszenia instancji zauważyłem, że wszystkie moje powiadomienia nagle się zatrzymały. Spędziłem trochę czasu, rozumiejąc, że migracja oznacza, że ​​moje konto jest zamrożone po migracji, co oznacza, że ​​powiadomienia, które są wysyłane na stare konto po migracji, są niejako utracone na zawsze.

Gdy zacznę publikować więcej na nowym koncie, podejrzewam, że mój strumień powiadomień będzie kontynuowany w miarę tworzenia nowych powiadomień dotyczących moich nowych treści. Jednak stare odpowiedzi, polubienia itp. Zniknęły.

Jak tylko wyczyścimy hachyderm.wtf, jestem bardzo ciekawy, co stanie się z wiadomościami na innych serwerach? Czy to możliwe, aby te posty przetrwały nawet po tym, jak ich oryginalny serwer zniknął na zawsze?

Dziękuje za przeczytanie

Wiem, że było tego dużo! To głównie strumień świadomości i moje notatki terenowe, kiedy przygotowuję się do dzisiejszego koncertu.

Śledź mnie na Mastodon [email protected] po więcej!