BlueSky工作原理解析
BlueSky是一个去中心化社交平台。我对BlueSky充满热情的一个原因是其工作方式。因此,在这篇文章中,我将阐述我所理解的BlueSky设计及其背后的原则。我不是BlueSky团队的成员,所以这些都是我个人的观点。
让我们开始吧。
BlueSky存在的意义是什么?
BlueSky官网目前是这样表述的:
社交媒体对于被少数几家公司控制来说太重要了。我们正在为社交互联网构建一个开放的基础设施,以便我们共同塑造其未来。
这就是宏观愿景。
那么,这是一个很好的理念,但具体意味着什么呢?目前,BlueSky是一个类似于Twitter和Mastodon的微博应用。这如何与宏观愿景相契合呢?虽然BlueSky确实是一个微博应用,但这并不是全部故事:BlueSky是一个初步应用,用以证明认证传输协议(Authenticated Transfer Protocol,简称AT、ATP或"atproto")的可行性。BlueSky是“建筑物”,而atproto则是“社交互联网的开放基础”。
需要注意的一点是:BlueSky也是一家公司。有些人对公司宣称“嘿,我们正在构建一些大到不能被公司控制的东西!”持怀疑态度。我认为这是一个健康的出发点,但对我来说答案在于atproto。
这两者之间的相互作用很重要,但我们将首先探索atproto,然后讨论BlueSky如何在其之上构建。
这是一种加密货币吗?
首先要澄清的是:如果你听到“哦,这是一个叫做‘某协议’的分布式网络”,你可能会在脑中想到“这是加密货币?”的警报。
别担心,这不是加密货币。它确实使用了一些起源于加密货币领域的技术,但这并不是区块链、DAO、NFT或其他任何东西。只是一些密码学和默克尔树之类的技术。
atproto的宏观愿景是什么?
AT协议概述是这样说的:
认证传输协议,又名atproto,是一个用于大规模分布式社交应用的联邦协议。
让我们分解一下:
一个联邦协议
atproto是联邦的。这意味着系统的各个部分可以由多个人运行,并且它们之间相互通信。选择联邦是atproto实现“不能被一个组织控制”承诺的重要部分。还有其他部分,但这是解决这一问题的重要方面。
适用于大规模
如果你想扩展,你必须考虑扩展性。atproto做出了几个有趣的选择,以便将运行系统的负载更多地分配给能够处理负载的参与者,而不是那些不能处理的参与者。这样,运行在atproto之上的应用可以扩展到大型用户群,而不会出现问题。
至少这是希望。就在本周早些时候,BlueSky达到了五百万用户,并且比Twitter早期更稳定。这并不像许多社交应用那样大,但也不是小数目。我们将看到这在实践中如何运作。
分布式社交应用
atproto是为了连接他人而设计的,所以它专注于社交应用。它目前是100%公开的,没有私人消息或类似的东西。这样做的原因是,在联邦系统中实现私密性非常棘手,他们宁愿做对而不是匆忙推出带有严重警告的东西。最好现在只使用这些东西来处理你希望公开的事情。
这些应用是“分布式”的,因为运行它们涉及到直接在网络上运行。没有“BlueSky服务器”,只有运行atproto的服务器将消息相互分发,包括BlueSky消息和任何其他人创建的其他应用的消息。
那么,这个高级别的概念具体意味着什么呢?
在atproto中,用户创建记录,并通过加密签名来证明作者身份。记录有一个称为词汇表(Lexicon)的模式。
这些存储在仓库中。仓库作为服务运行,暴露HTTP和WebSockets。然后它们可以相互通信并联合记录。这些通常被称为PDS,即“个人数据服务器”。用户要么运行自己的PDS,要么使用其他人托管的PDS。
应用可以通过查看网络中存储的各种记录,并对它们进行操作来构建。这些服务都称为应用视图(App Views),因为它们展示了存储在网络中的信息的特定视图。通过词汇表系统创建这个视图:构建一个应用意味着你定义一个词汇表,构建你想要处理的数据结构,然后查看使用你的词汇表的记录,忽略其他的。
然而,如果这就是全部内容,那么会有相当严重的扩展问题。例如,如果每次我在BlueSky上发布新更新,我都必须将我的帖子发送到我每个追随者的仓库,那将是极其低效的,并且使得运行一个受欢迎的仓库变得非常昂贵。为了解决这个问题,有了一种额外的服务类型,称为中继(relay),它汇总网络中的信息,并以消防软管的形式向其他人暴露。所以实际上,应用视图不是查看仓库,而是查看中继。当我发帖时,我的仓库不会单独通知我的追随者的仓库。我的仓库会通知一个中继,我的追随者会使用一个应用视图,该视图过滤中继的输出,只显示他们关注的人的帖子。这确实意味着中继通常是巨大的并且运行成本高昂,然而你可以想象运行一个较小的中继,它只传播来自较小用户子集的帖子。它们不必显示网络上的所有内容,尽管更大的中继当然会这样做。
以下是ASCII艺术表示:
┌─────┐ ┌──────────┐
│ PDS ├───────┐ │ App View │
└─────┘ │ └──────────┘
┌▼────────┐ ▲
┌─