Experimentando a Federação e Migrando Contas
Oi amigos. Foi um mês selvagem. Nosso pequeno servidor de mídia social se transformou em infraestrutura de produção e continua crescendo.
O êxodo em massa da comunidade de tecnologia do Twitter é extremamente real. Na minha opinião, esses números validam a hipótese de que o Vale do Silício perdeu a fé na capacidade de Musk de liderar o Twitter. Sinto que estamos nos aproximando de uma mídia social e renascimento corporativo.
Visão geral do crescimento e números da Hachyderm
Do ponto de vista da adoção, nosso crescimento é irracionalmente “saudável”, se é que podemos chamá-lo assim:
3 de novembro: 720 usuários
13 de novembro: 6.000 usuários
23 de novembro: 25.000 usuários
Crescemos de um único nó para uma infraestrutura globalmente distribuída e redundante em menos de 30 dias. Nosso pequeno armazenamento de dados postgres de 400 MB agora é de 177 GB de dados. Estamos projetando mais de 30 Tb de armazenamento nos próximos 6 meses apenas para nossa entrega de conteúdo.
Provavelmente, a lição mais fascinante de ver nosso serviço crescer é o tráfego. Sim! O transito!

Hoje, maximizamos completamente nosso canal público principal, que está diminuindo a 200 Mbps. Nosso ISP principal teve que mudar a maneira de gerenciar nossa conta e agora nos considera uma grande conta corporativa em vez de uma pequena conta corporativa. Devido a essa mudança, agora temos acesso a muitos novos recursos e serviços que estamos explorando para hospedar a Hachyderm.
Lidamos com até 1 TB de dados no canal em nosso dia mais movimentado (21 de novembro).
Pensando na Federação
Outro dia, nossa equipe de operadores e eu mesmo tiramos o serviço do ar para uma parada programada. Estávamos voando um pouco às cegas com nossa atualização e definitivamente não foi meu melhor trabalho. Transmitimos a atualização ao vivo no meu canal do Twitch. O vídeo arquivado está disponível para assistir .
Minha parceira maravilhosa, Quintessence, olhou para mim após a atualização e perguntou se tínhamos um ambiente de preparação online. O que era uma pergunta perfeitamente válida que tinha uma resposta muito ruim.
Não. Não tínhamos um ambiente de preparação online. Para ser sincero, nem tenho certeza de como seria um ambiente de teste, exceto bifurcar os dados e criar uma pequena instância de hachyderm. O problema é que o Mastodon, semelhante ao wordpress e outros aplicativos, está ciente de seu domínio. A criação de uma instância de “preparação” exigiria alguma reflexão.
Quanto mais eu ponderava sobre o problema, mais ele revelava que os sistemas descentralizados e os sistemas federados têm alguns novos problemas para os quais nosso setor não tem grandes padrões. O Mastodon é construído com a crença de que pessoas de todo o mundo estarão interagindo com ele, bem como com o fato de que haverá outras instâncias online para ele se federar.
Como construímos um ambiente de preparação para que possamos testar a federação ou a segregação de domínio? Pensando bem. Afinal, como funciona a federação? Quanto impacto o hachyderm tem em outras instâncias no fediverso? Quanto impacto outras instâncias têm em meus sistemas?
Criando hachyderm.wtf
Naturalmente, minha mente começou a pensar nas implicações de segurança e nas preocupações com gargalos de ter grandes sistemas globalmente distribuídos e federados on-line. Decidi seguir a dopamina e comprar um novo domínio.
Eu comprei hachyderm.wtf
e dupliquei um de nossos hachyderm.io
nós. Alguns minutos depois, o novo domínio foi apontado para uma cópia do nó antigo. Agora era hora de começar a engenharia reversa das suposições que o Mastodon faz e aprender sobre federação.

Mastodon irá quebrar se você tentar “alterar” o domínio.
Um único nó Mastodon é autoconsciente, o que, de um modo geral, em sistemas distribuídos é um grande “não, não”. Aprendemos isso no Kubernetes. As grandes infraestruturas geralmente não devem ter conhecimento de seu próprio nome de domínio, de modo que possam ser facilmente replicadas e movidas.
No entanto, o Mastodon foi desenvolvido “para a Internet” e não “para nossas redes corporativas”, portanto, o nome de domínio é, na verdade, o limite discreto dos sistemas no modelo. Quanto mais eu aprendia, mais comecei a pensar que a internet estava “certa” pela primeira vez.
De qualquer forma, não consegui criar um nó de teste com dados de produção por causa do problema do domínio, então apenas destrui o banco de dados e comecei do zero.
Novas instâncias do Mastodon requerem uma conta de administrador.
Para configurar uma nova instância você deve criar uma conta de administrador, caso contrário não haverá como acessar o sistema. Não haveria dados para federar.
Criei uma nova conta de administrador [email protected]
e comecei a colocar o sistema online.
Como a maioria de nossas configurações de produção já estava carregada no novo servidor, a maioria dos recursos do novo Mastodon “simplesmente funcionou”. Os e-mails estavam sendo enviados e o nginx estava respondendo ao tráfego. Sidekiq foi equilibrado, etc.
Hachyderm de fora
Eu queria ver como era ser um estranho para o hachyderm. Quanto de nossos dados eram “exclusivos” para o hachyderm? Quanto da minha experiência com o mastodonte foi isolada em nossa instância?
Minha conclusão foi “não tudo, mas muito”. Mastodon tem uma relação fascinante com “seguidores” e não me permitia mais ver quem os haquidermianos seguiam. Isso é importante, principalmente para um sistema que aprende e cria conteúdo baseado em seguidores.
Por exemplo, não consegui mais ver a lista de pessoas que minha parceira Quintessence segue em hachyderm.wtf.
Hashtags
Minha próxima observação foi que as hashtags são gerenciadas no nível da instância. Minhas páginas de notícias, comunidade e para você estavam todas vazias. Como não havia outras pessoas na minha instância, não havia “conteúdo da comunidade”.
Acostumei-me a ter uma grande quantidade de notícias técnicas, blogs, postagens e artigos compartilhados no hachyderm. Estes foram todos embora agora.
Linha do tempo inicial
Minha linha do tempo era uma cidade fantasma. Eu não estava seguindo ninguém e não havia mais ninguém no meu servidor. Basicamente, era como se o fediverso nem existisse.
Migrando minha conta
Uma das questões que ficaram pendentes em minha mente foi como o Mastodon gerencia os seguidores? E a migração de contas?
Gerenciar o conceito de seguidores de vários sistemas é uma questão interessante da ciência da computação em geral. Eu usei o problema “The Twitter Follower” na codificação de entrevistas como uma forma de falar sobre alguns dos fundamentos de tabelas de hash distribuídas e gráficos direcionais e não direcionais.
Decidindo Migrar
Coincidentemente, decidi tirar alguns dias de folga do gerenciamento da Hachyderm e do meu trabalho diário no GitHub para assistir a um show de Sigur Rós na Islândia. Eu sabia que ficaria “offline” por cerca de 5 dias.
Uma das perguntas que estava em minha mente é como os seguidores são armazenados no banco de dados e quanto controle cada instância federada tem sobre uma instância estrangeira? Tudo o que sei sobre sistemas distribuídos me diz que sistemas interdependentes com coreografias soltas entre eles são um pé no saco e quase sempre uma má ideia. E quando os nós no sistema têm proprietários diferentes? Isso parece uma receita para o desastre.
Tomei uma decisão precipitada de experimentar o recurso de migração do Mastodon para hachyderm.wtf na esperança de saber quanto controle uma instância tem sobre outra. Meu servidor acabou de dizer a todos os outros servidores para atualizar seus registros? Como é que isso funciona? Achei que poderíamos testar com dados de produção e, por acaso, tinha uma conta para prototipar durante minhas férias.

Negação remota de serviço
Então segui a documentação e cliquei no botão para migrar minha conta. O que pode acontecer de pior?
Passei alguns momentos investigando minha nova conta e configurei minha conta antiga para apontar para a nova. O conceito de manter as duas instâncias “de acordo” entre si vai ser um tema comum na federação.
Algumas horas após iniciar o processo notei que meus seguidores começaram a “migrar” para a nova instância. É importante entender que hachyderm.wtf
estava rodando em um servidor muito pequeno com 2 núcleos, basicamente um raspberry pi onde hachyderm.io
está rodando em um hardware de servidor corporativo distribuído em vários nós em um rack com mais de 132 núcleos no total.
Pude assistir ao hachyderm.io
início de um move_worker
processo que é definido em Ruby aqui e reescreverá seguidores na instância local.

Eu quase imediatamente notei um problema em hachyderm.wtf
. O serviço não respondeu. Depois de alguns minutos, consegui abrir um painel de trabalho e observei que minha linha do tempo estava limitando a própria taxa.


Eu redimensionei hachyderm.wtf
e dei mais computação e o serviço respondeu novamente.
Assistindo Seguidores Seguir
Quando as coisas se acalmaram, notei que retive apenas cerca de 10% dos meus seguidores? Algo estava errado?
Examinei os logs hachyderm.wtf
e rapidamente descobri que algo estava claramente acontecendo em “lotes” e os lotes estavam agrupados por servidor.
Em outras palavras, pude assistir hachyderm.wtf
ser atingido por vários milhares de solicitações de mastodon.social
e mastodon.sdf.org
outras instâncias em um único momento. Claramente, os servidores remotos precisavam realizar algum tipo de negociação hachyderm.wtf
para migrar os seguidores.
Essa foi uma descoberta interessante e explica como consegui fazer DDoS sozinho durante a migração.
O vetor específico que pode causar a queda de um servidor é um usuário ter sua linha do tempo aberta em um navegador com o novo recurso websocket 4.0.2 carregado. Durante a migração, os seguidores são preenchidos em tempo real, o que faz com que outra parte do painel consulte o /accounts
terminal mais rapidamente do que pode acompanhar. Entrei em contato com a equipe de segurança do Mastodon sobre a possibilidade de abrir um CVE para isso.
Mas o que estava acontecendo estava causando tanta sobrecarga entre hachyderm.wtf
os servidores remotos que tentavam migrar seguidores.
Relacionamento com seguidor de mastodonte
Portanto, um recurso muito interessante da federação no Mastodon é como ele gerencia e autentica o relacionamento seguidor/seguidor.
Encontrei o código FollowRequest que mostra o ponto de partida para o trabalho que estava ficando hachyderm.wtf
offline. O Mastodon usa chaves de criptografia públicas para autenticar várias solicitações e recursos do sistema. O Mastodon é baseado no ActivityPub, que usa assinaturas HTTP para autenticação entre as duas instâncias. É assim que uma instância tem certeza de que outra instância é de fato a pessoa que diz ser.
Quando você migra contas, todos os dados principais precisam ser reconstruídos, pois a confiança entre os sistemas é quebrada. O recurso que era o DDoSing hachyderm.wtf
eram meus milhares de seguidores tendo que negociar e autenticar novamente com cada um de seus servidores host, respectivamente.
Há coisas boas e coisas ruins sobre este modelo. No que diz respeito à federação, essa foi a decisão arquitetural certa a ser tomada em relação à autenticação. Estou animado para ver se há outras maneiras de migrar dados sem problemas no futuro!
Outras consequências não intencionais
Em suma, o experimento foi um sucesso e revelou muito sobre o poder que tenho como administrador do Mastodon, bem como o poder que outros administradores têm sobre meus sistemas. Ver a confiança mútua entre os sistemas acontecer com as assinaturas HTTP é muito legal!
hachyderm.io
A migração hachyderm.wtf
foi um sucesso. Sei que continuaremos a alavancar hachyderm.wtf
como nossa instância de laboratório para que possamos trabalhar no RustyPub , nossa implementação Rust do ActivityPub que pretendemos desenvolver para entender como os relés funcionam.
Confiança da comunidade
Fui repreendido bastante duramente por meu parceiro Quintessence por levantar e deixar hachyderm.io inesperadamente. Acho que ela levantou um bom ponto de que outros veriam a mudança como algo desconhecido e especulariam o pior. Acontece que ela - como sempre - estava certa.
Por mais que eu espere que o fediverso seja menos construído em torno de reputação e imagem, acredito que nem todos entendem os sistemas como eu e veriam algo como uma mudança de domínio como um risco e não como um experimento.
Fator Limitante: Tempo
Acho que outra consequência inesperada é que meus seguidores agora estão à disposição de qualquer proprietário de instância mastodonte que originalmente seguiu minha conta, no sentido de que seus trabalhos para renegociar as assinaturas HTTP podem ser muito atrasados.
Acho que ninguém jamais perderá seguidores durante uma migração, a menos que o servidor remoto que o seguiu tenha sido permanentemente destruído.
No entanto, acho que pode levar dias, semanas ou até mais para outras instâncias renegociarem no back-end. Um acompanhamento único é rápido e fácil, pois a maior parte da negociação pode ser feita no navegador, no entanto, trabalhar em lote no back-end coloca muita fé de que outras instâncias têm o sidekiq configurado corretamente e não há latência em suas filas .
Voltar para casa em Hachyderm.io
Alguns minutos atrás, iniciei uma migração de volta hachyderm.wtf
para minha instância inicial hachyderm.io
. Suspeito que levará alguns dias até que a maioria dos meus seguidores renegocie novamente.
Voltar para hachyderm.io
me fez perceber por que as coisas têm estado tão quietas para mim recentemente.
Percebi que todas as minhas notificações que estavam explodindo meu telefone ficaram silenciosas de repente.
Entendendo seus dados
Portanto, os dados que fazem de você “você” no Mastodon residem principalmente em sua instância. Majoritariamente.

No caso de instâncias em movimento, notei que todas as minhas notificações pararam repentinamente. Passei algum tempo entendendo que a migração significa que minha conta está congelada após uma migração, o que significa que as notificações enviadas para a conta antiga pós-migração são meio que perdidas para sempre.
À medida que começo a postar mais na nova conta, suspeito que meu fluxo de notificações continuará à medida que novas notificações forem criadas para meu novo conteúdo. No entanto, as respostas antigas, curtidas etc. desapareceram.
Assim que limpamos hachyderm.wtf
, fico muito curioso para entender o que acontece com as mensagens em outros servidores? É possível que essas postagens persistam mesmo depois que o servidor original se foi para sempre?
Obrigado por ler
Eu sei que isso foi muito! Isso é principalmente um fluxo de consciência e minhas anotações de campo enquanto estou me preparando para meu show hoje à noite.
Siga-me no Mastodon [email protected]
para saber mais!