Эксперименты с федерацией и переносом учетных записей
Эй, друзья. Это был дикий месяц. Наш небольшой сервер социальных сетей превратился в производственную инфраструктуру и продолжает расти.
Массовый исход технологического сообщества из Twitter вполне реален. На мой взгляд, эти цифры подтверждают гипотезу о том, что Силиконовая долина разуверилась в способности Маска возглавить Twitter. Я чувствую, что мы приближаемся к возрождению социальных сетей и корпораций.
Обзор роста и численности Hachyderm
С точки зрения принятия наш рост необоснованно «здоровый», если его можно так назвать:
3 ноября: 720 пользователей
13 ноября: 6 000 пользователей
23 ноября: 25 000 пользователей
Мы выросли из одного узла в глобально распределенную и резервированную инфраструктуру менее чем за 30 дней. Наше небольшое хранилище данных postgres объемом 400 МБ теперь составляет 177 ГБ данных. Мы планируем более 30 ТБ хранилища в течение следующих 6 месяцев только для доставки нашего контента.
Вероятно, самым захватывающим выводом из наблюдения за ростом нашего сервиса стал трафик. Да! Трафик!
Сегодня мы полностью загрузили наш основной публичный канал, скорость которого составляет 200 Мбит/с. Наш основной интернет-провайдер должен был изменить способ управления нашей учетной записью и теперь считает нас крупной корпоративной учетной записью, а не маленькой корпоративной учетной записью. Из-за этого изменения у нас теперь есть доступ ко многим новым функциям и услугам, которые мы с удовольствием изучаем для размещения Hachyderm.
В самый загруженный день (21 ноября) мы обработали до 1 ТБ данных по каналу.
Думая о Федерации
На днях наша команда операторов и я отключили сервис на некоторое запланированное время простоя. Мы летели немного вслепую с нашим апгрейдом, и это определенно была не лучшая моя работа. Мы транслировали обновление в прямом эфире на моем канале Twitch. Архивное видео доступно для просмотра .
Мой замечательный партнер, компания Quintessence, посмотрела на меня после обновления и спросила, есть ли у нас промежуточная онлайн-среда. Это был совершенно правильный вопрос, на который был очень плохой ответ.
Нет. У нас не было промежуточной онлайн-среды. Честно говоря, я даже не уверен, как будет выглядеть промежуточная среда, кроме разветвления данных и создания небольшого экземпляра hachyderm. Проблема в том, что Mastodon, подобно wordpress и другим приложениям, знает о своем домене. Создание «промежуточного» экземпляра потребует некоторых размышлений.
Чем больше я размышлял над этой проблемой, тем больше открывалось, что у децентрализованных систем и федеративных систем есть некоторые новые проблемы, для которых в нашей отрасли нет подходящих моделей. Mastodon создан с верой в то, что люди со всего мира будут с ним взаимодействовать, а также с тем фактом, что в сети будут другие экземпляры, с которыми он сможет объединиться.
Как создать промежуточную среду, чтобы можно было протестировать федерацию или разделение доменов? Подумать об этом. Как вообще работает федерация? Какое влияние оказывает hachyderm на другие экземпляры в федиверсе? Насколько сильно другие экземпляры влияют на мои системы?
Создание hachyderm.wtf
Естественно, мой разум начал метаться, размышляя о последствиях безопасности и проблемах с узкими местами, связанными с наличием в сети больших глобально распределенных и федеративных систем. Я решил пойти на поводу у дофамина и купить новый домен.
Я купил hachyderm.wtfи продублировал один из наших hachyderm.ioузлов. С опозданием на несколько минут новый домен был указан на копии старого узла. Теперь пришло время начать реинжиниринг предположений, которые делает Mastodon, и узнать о федерации.
Mastodon сломается, если вы попытаетесь «сменить» домен.
Отдельный узел Mastodon обладает самосознанием, что, вообще говоря, в распределенных системах является большим «нет-нет». Мы научились этому в Kubernetes. Крупная инфраструктура обычно не должна знать о собственном доменном имени, чтобы его можно было легко реплицировать и перемещать.
Однако Mastodon создан «для Интернета», а не «для наших корпоративных сетей», поэтому доменное имя фактически является дискретной границей системы в модели. Чем больше я узнавал, тем больше я начинал думать, что интернет впервые кажется мне «правильным».
В любом случае я не смог создать промежуточный узел с производственными данными из-за проблемы с доменом, поэтому я просто уничтожил базу данных и начал заново.
Для новых экземпляров Mastodon требуется учетная запись администратора.
Чтобы настроить новый экземпляр, вы должны создать учетную запись администратора, иначе вы не сможете получить доступ к системе. Не было бы данных для федерации.
Я создал новую учетную запись администратора [email protected]и начал переводить систему в онлайн.
Поскольку большинство наших производственных конфигураций уже были загружены на новый сервер, большинство функций нового Mastodon «просто работали». Письма отправлялись, а nginx отвечал на трафик. Sidekiq был сбалансирован и т.д.
Хахидерм снаружи
Я хотел увидеть, каково это быть аутсайдером в hachyderm. Какая часть наших данных была «уникальной» для hachyderm? Какая часть моего опыта с мастодонтом была изолирована от нашего экземпляра?
Мой вывод был «не все, но многое». У Mastodon замечательные отношения с «последователями», и он больше не позволял мне видеть, за кем следуют hachydermians. Это большое дело, особенно для системы, которая учится и создает контент на основе подписчиков.
Например, я больше не мог видеть список людей моей партнерши Quintessence, на которых она подписана с hachyderm.wtf.
Хэштеги
Следующим моим наблюдением было то, что хэштеги управляются на уровне экземпляра. Мои новости, сообщество и страницы для вас были пусты. Поскольку на моем экземпляре не было других людей, не было и «контента сообщества».
Я привык к большому количеству технических новостей, блогов, постов и статей, размещенных на hachyderm. Все это исчезло.
Главная Хронология
Моя домашняя временная шкала была городом-призраком. Я ни за кем не следил, и на моем сервере больше никого не было. По сути, это было так, как будто федиверса даже не существовало.
Перенос моей учетной записи
Один из вопросов, который не давал мне покоя, заключался в том, как Mastodon управляет последователями? Как насчет переноса аккаунтов?
Управление концепцией последователей из нескольких систем в целом является интересным вопросом информатики. Я использовал задачу «Подписчик в Твиттере» в интервью по кодированию, чтобы рассказать о некоторых основах распределенных хеш-таблиц и направленных и ненаправленных графах.
Решение о миграции
По стечению обстоятельств я решил взять отпуск на несколько дней от управления Hachyderm и от своей основной работы в GitHub, чтобы насладиться концертом Sigur Rós в Исландии. Я знал, что буду «офлайн» около 5 дней.
Один из вопросов, который был у меня на уме, заключается в том, как последователи хранятся в базе данных и какой уровень контроля каждый федеративный экземпляр имеет над другим экземпляром? Все, что я знаю о распределенных системах, говорит мне о том, что взаимозависимые системы с нечеткой хореографией между ними — заноза в заднице и почти всегда плохая идея. Что делать, если у узлов в системе разные владельцы? Это похоже на рецепт катастрофы.
Я принял внезапное решение опробовать функцию переноса Mastodon на hachyderm.wtf в надежде узнать, насколько один экземпляр имеет контроль над другим. Мой сервер только что сказал всем остальным серверам обновить свои записи? Как это работает? Я подумал, что мы могли бы также протестировать с производственными данными, и у меня просто завалялась учетная запись для создания прототипа во время моего отпуска.
Удаленный отказ в обслуживании
Поэтому я следовал документации и нажал кнопку, чтобы перенести свою учетную запись. Что самое худшее может случиться?
Я потратил несколько минут на изучение своей новой учетной записи и настроил свою старую учетную запись так, чтобы она указывала на новую. Концепция поддержания обоих экземпляров в «соглашении» друг с другом станет общей темой в федерации.
Через несколько часов после запуска процесса я заметил, что мои подписчики начали «мигрировать» в новый инстанс. Важно понимать, что hachyderm.wtfон работал на очень маленьком сервере с 2 ядрами, в основном на raspberry pi hachyderm.io, который работает на корпоративном обслуживающем оборудовании, распределенном по нескольким узлам в стойке с общим числом ядер более 132.
Я смог наблюдать за hachyderm.ioзапуском move_workerпроцесса, который определен в Ruby здесь и будет переписывать последователей на локальном экземпляре.
Почти сразу заметил проблему на hachyderm.wtf. Служба не отвечала. Через несколько минут я смог открыть работающую панель инструментов и заметил, что моя временная шкала ограничивает скорость.
Я изменил размер hachyderm.wtfи дал ему больше вычислений, и сервис снова стал реагировать.
Наблюдая за подписчиками
Когда все успокоилось, я заметил, что у меня осталось только около 10% моих подписчиков? Что-то не так?
Я просмотрел журналы hachyderm.wtfи быстро обнаружил, что что-то явно происходит в «пакетах», и пакеты сгруппированы по серверам.
Другими словами, я мог наблюдать за тем, как за один момент hachyderm.wtfполучаю несколько тысяч запросов от mastodon.socialи mastodon.sdf.orgдругих экземпляров. Очевидно, что удаленным серверам нужно было выполнить какое-то согласование hachyderm.wtf, чтобы перенести последователей.
Это было интересное открытие, и оно объясняет, как я сам смог атаковать DDoS при миграции.
Конкретный вектор, который может привести к отключению сервера, — это пользователь, открывающий свою временную шкалу в браузере с загруженной новой функцией веб-сокета 4.0.2. Во время миграции подписчики заполняются в режиме реального времени, что заставляет другую часть панели мониторинга запрашивать /accountsконечную точку быстрее, чем она успевает. Я связался с командой безопасности Mastodon по поводу возможного открытия CVE для этого.
Но то, что происходило, вызывало так много накладных расходов между hachyderm.wtfудаленными серверами и удаленными серверами, которые пытались мигрировать последователей.
Отношения последователей мастодонта
Таким образом, очень захватывающей особенностью федерации в Mastodon является то, как она управляет и аутентифицирует отношения между подписчиками и подписчиками.
Я нашел код FollowRequest , который показывает отправную точку работы, которая переходила в hachyderm.wtfавтономный режим. Mastodon использует открытые криптографические ключи для аутентификации различных запросов и функций системы. Mastodon основан на ActivityPub, который использует подписи HTTP для аутентификации между двумя экземплярами. Вот как один экземпляр уверен, что другой экземпляр на самом деле является тем человеком, за которого он себя выдает.
При переносе учетных записей все ключевые данные необходимо восстановить, так как доверие между системами нарушается. Особенностью DDoSing hachyderm.wtfбыло то, что тысячи моих подписчиков должны были согласовать и повторно аутентифицироваться на каждом из своих хост-серверов соответственно.
В этой модели есть и плюсы, и минусы. Что касается федерации, это было правильное архитектурное решение в отношении аутентификации. Я очень рад узнать, появятся ли в будущем другие способы беспрепятственного переноса данных!
Другие непредвиденные последствия
В целом эксперимент удался и многое рассказал о власти, которой я обладаю как администратор Mastodon, а также о власти других администраторов над моими системами. Видеть, как взаимное доверие между системами происходит с помощью HTTP-подписей, очень круто!
Миграция от hachyderm.ioи до hachyderm.wtfпрошла успешно. Я знаю, что мы продолжим использовать hachyderm.wtfв качестве нашего лабораторного экземпляра, чтобы мы могли работать над RustyPub нашей реализацией ActivityPub на Rust, которую мы собираемся создать, чтобы понять, как работают реле.
Доверие сообщества
Мой партнер Quintessence довольно сильно отругал меня за то, что я неожиданно покинул hachyderm.io. Я думаю, она подняла хороший вопрос о том, что другие будут рассматривать изменение как что-то неизвестное и размышлять о худшем. Как оказалось, она, как всегда, была права.
Как бы я ни надеялся, что федиверс меньше построен на репутации и имидже, я верю, что не все понимают системы так, как я, и рассматривали бы что-то вроде смены домена как риск, а не как эксперимент.
Ограничивающий фактор: время
Я думаю, что еще одним неожиданным последствием является то, что мои подписчики теперь находятся в распоряжении любого владельца экземпляра мастодонта, который изначально подписался на мою учетную запись, в том смысле, что их работа по повторному согласованию подписей HTTP может быть очень задержана.
Я не думаю, что кто-то когда-либо потеряет подписчиков во время миграции, если только удаленный сервер, который следовал за вами, не был окончательно уничтожен.
Однако я думаю, что другим экземплярам могут потребоваться дни, недели или даже больше, чтобы согласовать серверную часть. Однократное отслеживание выполняется быстро и легко, поскольку большая часть согласований может быть выполнена в браузере, однако работа с ними в пакетном режиме на серверной части дает большую уверенность в том, что другие экземпляры имеют правильно настроенный sidekiq и в их очередях нет задержки . .
Вернуться домой на Hachyderm.io
Несколько минут назад я начал миграцию обратно с hachyderm.wtfмоего домашнего экземпляра hachyderm.io. Я подозреваю, что пройдет несколько дней, прежде чем большинство моих последователей снова начнут переговоры.
Вернувшись, hachyderm.ioя понял, почему в последнее время для меня все было так тихо.
Я заметил, что все мои уведомления, которые взрывали мой телефон, внезапно умолкли.
Понимание ваших данных
Таким образом, данные, которые делают вас «вы» на Mastodon, в основном живут в вашем экземпляре. В основном.
В случае с движущимися экземплярами я заметил, что все мои уведомления внезапно прекратились. Я потратил некоторое время на понимание того, что миграция означает, что моя учетная запись замораживается после миграции, а это означает, что уведомления, которые отправляются на старую учетную запись после миграции, теряются навсегда.
По мере того, как я начинаю публиковать больше в новой учетной записи, я подозреваю, что мой поток уведомлений будет продолжаться, поскольку новые уведомления создаются для моего нового контента. Однако старые ответы, лайки и т. д. теперь исчезли.
Как только мы вайпнем, hachyderm.wtfмне очень любопытно понять, что происходит с сообщениями на других серверах? Могут ли эти сообщения сохраняться даже после того, как их исходный сервер исчез навсегда?
Спасибо за прочтение
Я знаю, что это было много! В основном это поток сознания и мои полевые заметки, пока я готовлюсь к своему сегодняшнему концерту.
Следите за мной на Mastodon, [email protected] чтобы узнать больше!

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































