Experimentación con la federación y la migración de cuentas
Hola amigos. Ha sido un mes salvaje. Nuestro pequeño servidor de redes sociales se ha convertido en una infraestructura de producción y sigue creciendo.
El éxodo masivo de la comunidad tecnológica de Twitter es extremadamente real. En mi opinión, estos números validan la hipótesis de que Silicon Valley ha perdido la fe en la capacidad de Musk para liderar Twitter. Siento que nos estamos acercando a un renacimiento corporativo y de las redes sociales.
Descripción general del crecimiento y los números de Hachyderm
Desde una perspectiva de adopción, nuestro crecimiento no es razonablemente "saludable" si pudiera llamarlo así:
3 de noviembre: 720 Usuarios
13 de noviembre: 6.000 Usuarios
23 de noviembre: 25.000 Usuarios
Hemos pasado de un solo nodo a una infraestructura redundante distribuida globalmente en menos de 30 días. Nuestro pequeño almacén de datos postgres de 400 mb ahora tiene 177 Gb de datos. Estamos proyectando más de 30 Tb de almacenamiento en los próximos 6 meses solo para nuestra entrega de contenido.
Probablemente el resultado más fascinante de ver crecer nuestro servicio ha sido el tráfico. ¡Sí! ¡El tráfico!

Hoy hemos maximizado por completo nuestra tubería pública principal, que está acelerando a 200 Mbps. Nuestro ISP principal ha tenido que cambiar la forma en que administra nuestra cuenta y ahora nos considera una cuenta corporativa grande en lugar de una cuenta corporativa pequeña. Debido a este cambio, ahora tenemos acceso a muchas funciones y servicios nuevos que estamos entretenidos explorando para hospedar a Hachyderm.
Hemos manejado hasta 1 TB de datos a través de la canalización en nuestro día de mayor actividad (21 de noviembre).
Pensando en Federación
El otro día, nuestro equipo de operadores y yo desconectamos el servicio por un tiempo de inactividad programado. Estábamos volando un poco a ciegas con nuestra actualización, y definitivamente no fue mi mejor trabajo. Transmitimos la actualización en vivo en mi canal de contracción. El video archivado está disponible para verlo .
Mi maravilloso socio, Quintessence, me miró después de la actualización y me preguntó si teníamos un entorno de ensayo en línea. Lo cual, era una pregunta perfectamente válida que tenía una muy mala respuesta.
No. No teníamos un entorno de ensayo en línea. Para ser honesto, ni siquiera estoy seguro de cómo se vería un entorno de ensayo aparte de bifurcar los datos y crear una pequeña instancia de hachyderm. El problema es que Mastodon, al igual que wordpress y otras aplicaciones, es consciente de su dominio. Crear una instancia de "puesta en escena" requeriría algo de reflexión.
Cuanto más reflexionaba sobre el problema, más revelaba que los sistemas descentralizados y los sistemas federados tienen algunos problemas nuevos para los que nuestra industria no tiene buenos patrones. Mastodon está construido con la creencia de que personas de todo el mundo interactuarán con él, así como con el hecho de que habrá otras instancias en línea con las que federarse.
¿Cómo construimos un entorno de prueba de modo que podamos probar la federación o la segregación de dominios? Ahora que lo pienso. ¿Cómo funciona la federación de todos modos? ¿Qué impacto tiene el haquidermo en otras instancias del fediverso? ¿Qué impacto tienen otras instancias en mis sistemas?
Creando hachyderm.wtf
Naturalmente, mi mente comenzó a reflexionar sobre las implicaciones de seguridad y las preocupaciones sobre los cuellos de botella de tener grandes sistemas federados y distribuidos globalmente en línea. Decidí seguir la dopamina y comprar un nuevo dominio.
Compré hachyderm.wtf
y dupliqué uno de nuestros hachyderm.io
nodos. Unos minutos más tarde, el nuevo dominio apuntó a una copia del antiguo nodo. Ahora era el momento de comenzar la ingeniería inversa de las suposiciones que hace Mastodon y aprender sobre la federación.

Mastodon se romperá si intentas "cambiar" el dominio.
Un solo nodo de Mastodon es consciente de sí mismo, lo que, en general, en los sistemas distribuidos es un gran "no, no". Aprendimos esto en Kubernetes. Por lo general, las grandes infraestructuras no deberían tener conocimiento de su propio nombre de dominio, de modo que se pueda replicar y mover fácilmente.
Sin embargo, Mastodon está diseñado "para Internet" y no "para nuestras redes corporativas", por lo que el nombre de dominio es en realidad el límite discreto de los sistemas en el modelo. Cuanto más aprendía, más comencé a pensar que Internet se sentía "bien" por primera vez.
De todos modos, no pude crear un nodo de prueba con datos de producción debido al problema del dominio, así que simplemente eliminé la base de datos y comencé de nuevo.
Las nuevas instancias de Mastodon requieren una cuenta de administrador.
Para configurar una nueva instancia, debe crear una cuenta de administrador; de lo contrario, no habrá forma de acceder al sistema. No habría datos con los que federarse.
Creé una nueva cuenta de administrador [email protected]
y comencé a poner el sistema en línea.
Debido a que la mayoría de nuestras configuraciones de producción ya estaban cargadas en el nuevo servidor, la mayoría de las funciones del nuevo Mastodon "simplemente funcionaron". Se enviaban correos electrónicos y nginx respondía al tráfico. Sidekiq estaba equilibrado, etc.
Haquidermo desde el exterior
Quería ver cómo era ser un extraño para la haquidermia. ¿Cuántos de nuestros datos eran "exclusivos" para el haquidermo? ¿Cuánto de mi experiencia con el mastodonte se aisló a nuestra instancia?
Mi conclusión fue “no todo, pero mucho”. Mastodon tiene una relación fascinante con los "seguidores" y ya no me permitía ver a quién siguen los haquidérmicos. Este es un gran problema, especialmente para un sistema que aprende y crea contenido basado en seguidores.
Por ejemplo, ya no podía ver la lista de personas a las que sigue de mi compañera Quintessence desde hachyderm.wtf.
Etiquetas
Mi siguiente observación fue que los hashtags se administran a nivel de instancia. Mis páginas de noticias, comunidad y para ti estaban vacías. Debido a que no había otras personas en mi instancia, no había "contenido comunitario".
Me acostumbré a tener una gran cantidad de noticias técnicas, blogs, publicaciones y artículos compartidos en hachyderm. Todos estos se habían ido ahora.
Cronología de inicio
La línea de tiempo de mi casa era un pueblo fantasma. No estaba siguiendo a nadie y no había nadie más en mi servidor. Básicamente era como si el fediverso ni siquiera existiera.
Migrar mi cuenta
Una de las preguntas que quedó pendiente en mi mente fue ¿cómo gestiona Mastodon los seguidores? ¿Qué pasa con la migración de cuentas?
Administrar el concepto de seguidores de múltiples sistemas es una pregunta interesante de informática en general. He usado el problema "El seguidor de Twitter" en la codificación de entrevistas como una forma de hablar sobre algunos de los conceptos básicos de las tablas hash distribuidas y los gráficos direccionales y no direccionales.
Decidir Migrar
Coincidentemente, decidí tomarme unos días libres de la gestión de Hachyderm y de mi trabajo diario en GitHub para disfrutar de un concierto de Sigur Rós en Islandia. Sabía que estaría "fuera de línea" durante unos 5 días.
Una de las preguntas que tenía en mente es cómo se almacenan los seguidores en la base de datos y cuánto control tiene cada instancia federada sobre una instancia externa. Todo lo que sé sobre los sistemas distribuidos me dice que los sistemas interdependientes con una coreografía suelta entre ellos son un dolor de cabeza y casi siempre una mala idea. ¿Qué ocurre cuando los nodos del sistema tienen diferentes propietarios? Esto parece una receta para el desastre.
Tomé una decisión de juicio rápido para probar la función de migración de Mastodon a hachyderm.wtf con la esperanza de saber cuánto control tiene una instancia sobre otra. ¿Mi servidor acaba de decirle a todos los demás servidores que actualicen sus registros? ¿Como funciona esto? Pensé que también podríamos probar con datos de producción, y resultó que tenía una cuenta para crear prototipos durante mis vacaciones.

Denegación de servicio remota
Así que seguí la documentación e hice clic en el botón para migrar mi cuenta. Qué es lo peor que puede pasar?
Pasé unos momentos investigando mi nueva cuenta y configuré mi cuenta anterior para apuntar a la nueva. El concepto de mantener ambas instancias en “acuerdo” entre sí será un tema común en la federación.
A las pocas horas de iniciar el proceso noté que mis seguidores comenzaron a “migrar” a la nueva instancia. Es importante comprender que hachyderm.wtf
se estaba ejecutando en un servidor muy pequeño con 2 núcleos, básicamente una raspberry pi donde hachyderm.io
se ejecuta en hardware de servicio empresarial distribuido en varios nodos en un bastidor con más de 132 núcleos en total.
Pude ver hachyderm.io
el inicio de un move_worker
proceso que se define en Ruby aquí y reescribiré a los seguidores en la instancia local.

Casi de inmediato noté un problema en hachyderm.wtf
. El servicio no respondía. Después de unos minutos, pude abrir un tablero que funcionaba y observé que mi línea de tiempo se limitaba a sí misma.


Cambié el tamaño hachyderm.wtf
y le di más cómputo y el servicio volvió a responder.
Ver seguidores seguir
A medida que las cosas se calmaron, noté que solo había retenido alrededor del 10% de mis seguidores. ¿Pasó algo?
Revisé los registros hachyderm.wtf
y rápidamente descubrí que algo estaba sucediendo claramente en "lotes" y que los lotes estaban agrupados por servidor.
En otras palabras, pude ver hachyderm.wtf
recibir varios miles de solicitudes de mastodon.social
y mastodon.sdf.org
otras instancias en un solo momento. Claramente, los servidores remotos necesitaban realizar algún tipo de negociación hachyderm.wtf
para migrar a los seguidores.
Este fue un descubrimiento interesante y explica cómo pude hacer DDoS yo mismo durante la migración.
El vector específico que puede hacer que un servidor se desactive es un usuario que tiene su línea de tiempo abierta en un navegador con la nueva función websocket 4.0.2 cargada. Durante la migración, los seguidores se completan en tiempo real, lo que hace que otra parte del tablero consulte el /accounts
punto final más rápido de lo que puede seguir. Me comuniqué con el equipo de seguridad de Mastodon sobre la posibilidad de abrir un CVE para esto.
Pero, ¿qué estaba sucediendo que estaba causando tanta sobrecarga entre hachyderm.wtf
los servidores remotos que intentaban migrar seguidores?
Relación de seguidor de mastodonte
Entonces, una característica muy emocionante de la federación dentro de Mastodon es cómo administra y autentica la relación seguidor/seguimiento.
Encontré el código de FollowRequest que muestra el punto de partida del trabajo que se estaba hachyderm.wtf
desconectando. Mastodon utiliza claves criptográficas públicas para autenticar varias solicitudes y funciones del sistema. Mastodon se basa en ActivityPub, que utiliza firmas HTTP para autenticarse entre las dos instancias. Así es como una instancia está segura de que otra instancia es de hecho la persona que dice ser.
Cuando migra cuentas, todos los datos clave deben reconstruirse, ya que se rompe la confianza entre los sistemas. La característica que fue DDoSing hachyderm.wtf
fue que mis miles de seguidores tuvieron que negociar y volver a autenticarse con cada uno de sus servidores host, respectivamente.
Hay cosas buenas y cosas malas de este modelo. En lo que respecta a la federación, esta fue la decisión arquitectónica correcta a tomar con respecto a la autenticación. ¡Estoy emocionado de ver si hay otras formas de migrar datos sin problemas en el futuro!
Otras consecuencias no deseadas
En general, el experimento fue un éxito y reveló mucho sobre el poder que tengo como administrador de Mastodon, así como el poder que otros administradores tienen sobre mis sistemas. ¡Ver la confianza mutua entre los sistemas con las firmas HTTP es genial!
La migración de ida hachyderm.io
y vuelta hachyderm.wtf
fue un éxito. Sé que continuaremos aprovechando hachyderm.wtf
como nuestra instancia de laboratorio para poder trabajar en RustyPub , nuestra implementación de Rust de ActivityPub que pretendemos desarrollar para comprender cómo funcionan los relés.
Confianza de la comunidad
Mi socio Quintessence me regañó bastante por dejar hachyderm.io inesperadamente. Creo que planteó un buen punto de que otros verían el cambio como algo desconocido y especularían lo peor. Al final resultó que ella, como siempre, tenía razón.
Por mucho que espero que el fediverso se base menos en la reputación y la imagen, creo que no todos entienden los sistemas como yo y verían algo como un cambio de dominio como un riesgo y no como un experimento.
Factor limitante: tiempo
Creo que otra consecuencia inesperada es que mis seguidores ahora están a disposición del propietario de la instancia de mastodonte que haya seguido originalmente mi cuenta en el sentido de que sus trabajos para renegociar las firmas HTTP pueden retrasarse mucho.
No creo que nadie pierda seguidores durante una migración a menos que el servidor remoto que lo siguió haya sido destruido permanentemente.
Sin embargo, creo que otras instancias pueden tardar días, semanas o incluso más en renegociar en el back-end. Un seguimiento único es rápido y fácil, ya que la mayor parte de la negociación se puede realizar en el navegador; sin embargo, trabajar en lotes en el back-end pone mucha fe en que otras instancias tienen sidekiq configurado correctamente y no hay latencia en sus colas . .
Volver a casa en Hachyderm.io
Hace unos minutos inicié una migración de regreso desde hachyderm.wtf
mi instancia de inicio hachyderm.io
. Sospecho que pasarán unos días antes de que la mayoría de mis seguidores hayan renegociado nuevamente.
Regresar a hachyderm.io
me hizo darme cuenta de por qué las cosas han estado tan tranquilas para mí últimamente.
Me di cuenta de que todas mis notificaciones que habían estado explotando mi teléfono de repente se habían silenciado.
Comprender sus datos
Entonces, los datos que lo hacen "usted" en Mastodon viven principalmente en su instancia. Principalmente.

En el caso de instancias en movimiento, noté que todas mis notificaciones se detuvieron repentinamente. Pasé un tiempo comprendiendo que la migración significa que mi cuenta se congela después de una migración, lo que significa que las notificaciones que se envían a la cuenta anterior después de la migración se pierden para siempre.
A medida que empiezo a publicar más en la nueva cuenta, sospecho que mi flujo de notificaciones continuará a medida que se creen nuevas notificaciones para mi nuevo contenido. Sin embargo, las antiguas respuestas, me gusta, etc. ya no están.
Tan pronto como borramos, hachyderm.wtf
tengo mucha curiosidad por saber qué sucede con los mensajes en otros servidores. ¿Es posible que estas publicaciones persistan incluso después de que su servidor original se haya ido para siempre?
Gracias por leer
¡Sé que esto fue mucho! Esto es principalmente una corriente de conciencia y mis notas de campo mientras me preparo para mi concierto de esta noche.
¡Sígueme en Mastodon [email protected]
para más!