Фон:
Mastodon - это федеративная система, которая создает социальную сеть, аналогичную Twitter.
Это работает, передавая статус пользователя его подписчикам, который появляется в четырех местах:
- Временная шкала пользователя
- Хронология их последователей
- Локальная временная шкала экземпляра пользователя
- Общедоступная временная шкала других экземпляров, которые получают статус
Последний пункт интересен: экземпляр видит статус, если по крайней мере один из его пользователей следует за пользователем, публикующим статус, поэтому экземпляр пользователя передает статус другим экземплярам.
Этот тип системы pubsub работает достаточно хорошо для публикации статуса, который получают подписчики, как правило, через несколько секунд после публикации, иногда после освобождения какой-либо очереди вывода.
Мой вопрос сейчас касается отправки сообщения об удалении для статуса. Проблема в том, что это сообщение ДОЛЖНО достигать всех экземпляров, для которых было достигнуто исходное состояние, и из-за того, как работает система, я сомневаюсь, что оно может гарантировать, что сообщение удаления будет всегда достигать всех систем.
Мой вопрос ниже о возможных случаях отказа, которые я могу себе представить.
Как на самом деле работает удаление зуба на мастодонте или оно работает надежно вообще?
Я знаю, что в теории удаление toot отправляет сообщение об удалении другим экземплярам, поэтому они удаляют его. Давайте отложим вредоносные сайты, которые игнорируют запрос, тогда есть еще несколько проблем.
Как выбираются экземпляры? Когда у меня был ровно один подписчик из Экземпляра X, когда я разместил гудок, и он отписался от меня до того, как я удалил его, будет ли его экземпляр все еще получать сообщение об удалении?
Или более технически: хранит ли toot список экземпляров, в которые он был отправлен после отправки, чтобы мастодонт знал, куда отправлять сообщения об удалении позже?
Как насчет повышения? Когда пользователь в X повысил мой гудок (может быть, только подписчик), могу ли я быть уверен, что знаю все экземпляры, которые получили гудок через буст, или что Instance X передаст мое сообщение об удалении этим экземплярам?
Что происходит, когда экземпляр X имеет недельное время простоя, когда я удаляю свой гудок? Как долго сообщение об удалении помещается в очередь? Экземпляр X может быть оставлен, поэтому мой экземпляр не может ждать дольше определенного времени ожидания.
Мне кажется, что удаление (или будет в ближайшем будущем, когда будет больше экземпляров и более сложная сеть между ними) бесполезно, поскольку существует очень много возможностей, как сообщение об удалении может быть потеряно или не отправлено в правильные экземпляры.
Итак, как (надежное) удаление работает на мастодонте и является ли оно хрупким или есть меры предосторожности, чтобы убедиться, что оно работает даже в этих, возможно, сложных ситуациях?