背景:
乳齿象是一个联合系统,实现了类似Twitter的社交网络。
它的工作原理是将用户的状态推送给他的关注者,该状态出现在四个地方:
- 用户的时间线
- 粉丝的时间表
- 用户实例的本地时间线
- 其他实例的公共时间线,获取状态
最后一点是有趣的:如果至少一个用户关注发布状态的用户,则该实例会看到该状态,因此该用户的实例会将该状态推送到其他实例。
这种发布订阅系统发布状态运行良好,关注者通常在发布后几秒内收到该状态,有时在某些输出队列清空后收到。
我现在的问题是关于推送状态的删除消息。问题是,此消息必须到达原始状态到达的所有实例,并且从系统的工作方式来看,我怀疑它是否能保证删除消息始终到达所有系统。
以下问题是关于我能想到的可能失败的情况。
删除 mastodon 上的嘟文实际上是如何进行的,或者它是否可靠地进行?
我知道,理论上删除 toot 会向其他实例发送删除消息,因此它们会将其删除。让我们将忽略请求的恶意网站放在一边,这样仍然会存在一些问题。
实例是如何选择的?当我发布 toot 时,实例 X 中只有一个关注者,而他在我删除它之前取消了关注我,他的实例还会收到删除消息吗?
或者更技术性地说:toot 是否存储了发布时发送的实例列表,这样 mastodon 就知道以后将删除消息发送到哪里了?
那提升呢?当 X 的用户提升了我的 toot(可能只是追随者)时,我能否确定我知道所有通过提升获得 toot 的实例,或者实例 X 会将我的删除消息转发给这些实例?
当我删除我的 toot 时,如果实例 X 停机一周,会发生什么情况?删除消息在实例上排队多长时间?实例 X 可能被放弃,所以我的实例不能等待超过一定的等待时间。
在我看来,删除是徒劳的(或者在不久的将来,当有更多的实例和它们之间更复杂的网络时),因为所以删除消息可能会丢失或未发送到正确实例,这种可能性有很多。
那么,(可靠的)删除在 mastodon 上是如何工作的,它是否真的那么脆弱,或者是否有预防措施来确保它即使在这些可能复杂的情况下也能工作?
答案1
toot 是否存储了在发布时发送到的实例列表,这样 mastodon 就知道稍后将删除消息发送到哪里?
不是。Mastodon 是 #ActivityPub 协议的众多实现之一。从当前协议、服务器到服务器部分、[子部分删除][1] :
7.4 删除活动
接收此信息的副作用是(假设对象由发送参与者/服务器拥有)接收删除活动的服务器应该删除具有相同 ID 的对象的表示,并且可以用 Tombstone 对象替换该表示。
(请注意,在活动从原始服务器传输到远程服务器之后,ActivityPub 协议中没有任何内容可以强制远程删除对象表示)。
至于 Mastodon 自己的实现,[一位主要开发人员对自动删除问题的评论] [2] 的讨论表明,toots 本身不会或不能存储这些信息,并且这是在每台服务器上完成的用户帐号基础。
我认为可以肯定地说,根据这个[问题帖子][3](关于帐户删除,其中包含来自主要开发人员之一 ClearlyClaire 的一些相关信息。)
那
如果服务器了解某个帐户(例如因为某人已宣布其帖子),但未收到删除,他们将保留该数据的副本,并且即使原始用户已决定删除其帐户,也不会删除那些公开发布的帖子。
此外,从 [此回复][4] 和 [此回复][5] 中我可以清楚地看出,这取决于 ActivityPub 协议解释的每个实现。例如,Mastodon 的处理方式可能与 Hubzilla 或 Firefish 不同。
对我来说,删除似乎是徒劳的(或者在不久的将来,当有更多的实例和它们之间更复杂的网络时),因为删除消息可能会丢失或未发送到正确的实例,这种可能性太大了。
那么,(可靠的)删除在 mastodon 上是如何工作的,它是否真的那么脆弱,或者是否有预防措施来确保它即使在这些可能复杂的情况下也能工作?
脆弱?肯定是!徒劳无功?不太确定。我认为这是开发人员尽最大努力的情况,但我不会说它完全徒劳无功。实际上(作为 Mastodon 和 Firefish 服务器的管理员)删除确实在 99% 的时间内有效,但在 Fediverse 级别无法保证。
从这些讨论中我[1]:https://www.w3.org/TR/activitypub/#delete-activity-outbox [2]:https://github.com/mastodon/mastodon/pull/16529#issuecomment-895874212 [3]:https://github.com/mastodon/mastodon/issues/23175 [4]:https://github.com/mastodon/mastodon/issues/23175#issuecomment-1405220695 [5]:https://github.com/mastodon/mastodon/issues/23175#issuecomment-1406053832