
去中心化社交網絡 Bluesky 是如何運作的?
TechFlow Selected深潮精選

去中心化社交網絡 Bluesky 是如何運作的?
理解了 atproto,我們就可以理解 Bluesky。
編譯:Kurt Pan
我對 BlueSky 充滿熱情的原因之一就是它的工作方式。因此在這篇文章中,我將闡述其中的一些設計以及我所理解的這些設計背後的原則。我不是 BlueSky 團隊的成員,所以這些只是我的看法。
我們開始。
BlueSky 為什麼存在?
以下是 BlueSky 網站目前的說法:
社交媒體太重要了,以至於不能由少數公司所控制。我們正在為社交互聯網建立一個開放的基礎,以便我們都能塑造它的未來。
這是一個大方向。
好吧這是個好主意,但這意味著什麼?目前,BlueSky 是一個微型博客應用,類似於 Twitter 和 Mastodon。這要怎麼融入大方向呢?嗯,雖然 BlueSky 確實是一個類微博應用,但這並不是故事的全部:BlueSky 是首個用於證明認證傳輸協議(簡稱為 AT、ATP 或「atproto」)可行性的應用。 BlueSky 是「建築」,而 atproto 則是「社交互聯網的開放基礎」。
需要注意的重要一點是:BlueSky 也是一家公司。有些人會帶著懷疑的態度看著一家公司說「嘿,我們正在建造一些太大從而無法被公司控制的東西!」。我認為這是一個健康的起點,但對我來說答案正是 atproto。
這兩個東西之間的相互作用很重要,我們將先從探索 atproto 開始,然後來討論 BlueSky 是如何構建在它之上的。
這是密碼貨幣嗎?
我們必須擺脫的第一件事是:如果你聽到「噢,這是一個名為‘某協議’的分佈式網絡」,你可能會有「這是一種密碼貨幣嗎?」警鐘在你的腦海中響起。
別擔心,它不是密碼貨幣。它確實使用了一些起源於密碼貨幣領域的技術,但這不是區塊鏈、DAO、NFT 或任何其他那種東西。只是一些密碼學和默克爾樹之類的東西。
atproto 概覽
AT 協議概述這麼說到:
認證傳輸協議,又名 atproto,是用於大規模分佈式社交應用的聯邦協議。
我們分解一下:
聯邦協議
atproto 是聯邦式的。這意味著系統的各個部分可以由多個人運行,並且他們可以相互通信。
選擇聯邦式是 atproto 兌現「不能由一個組織控制」這一承諾的重要組成部分。還有其他部分,但這是解決這個問題的一個重要方面。
用於大規模
如果你想擴大規模,就必須在設計時考慮到規模化。 atproto 做出了一些有趣的選擇,以便將運行系統的負載更多地分配給能夠處理負載的參與者,而更少地分配給那些不能處理負載的參與者。這樣,在 atproto 之上運行的應用就可以毫無問題地擴展到大型用戶群。
至少,希望如此。本週早些時候,BlueSky 用戶達到了 500 萬,並且運行比 Twitter 早期穩定得多。這沒有許多社交應用那麼大,但也不是什麼都不是了。實踐中運行如何,我們拭目以待。
分佈式社交應用
atproto 是為了與他人連接,所以它專注於社交應用。目前它也是 100% 公開的,沒有私信或類似的消息。其原因是,在聯邦系統中實現私有的東西非常棘手,他們寧願先把它做好,也不願發佈帶有嚴重警告問題的東西。目前最好只將它用於你想要公開的事情。
這些應用是「分佈式」的,因為運行它們就是直接在網絡上運行它們。並沒有「BlueSky 服務器」,只有運行 atproto 的服務器在相互分發消息,包括 BlueSky 消息以及來自人們創建的其他應用的任何其他消息。
這是一個概覽,但這具體意味著什麼呢?
在 atproto 中,用戶創建經過密碼學簽名的記錄以證明作者身份。記錄擁有稱為詞典(Lexicon)的圖式。
記錄存儲在存儲庫中。存儲庫作為服務運行,暴露給 HTTP 和 WebSocket。然後它們可以互相交談並聯合化記錄。這些通常稱為 PDS,即「個人數據服務器」。用戶要麼運行自己的 PDS,要麼使用其他人為其託管的 PDS。
可以通過查看網絡中存儲的各種記錄並使用它們來構建應用。這些服務都稱為應用視圖,因為它們公開了網絡中存儲信息的特定視圖。這個視圖是通過詞典系統創建的:構建應用意味著你定義一個詞典,結構化要處理的數據,然後查看使用你的詞典的記錄,忽略其他的。
如果這就是全部的話,將會出現非常嚴重的擴展問題。例如,如果每次我在 BlueSky 上發佈新更新時,我必須將我的帖子發送到我的每一個關注者的存儲庫,那將是非常低效的,並且使得運行一個流行的存儲庫的運行成本非常昂貴。為了解決這個問題,有一種額外的服務,稱為中繼,它聚合網絡中的信息,並將其快速大量地傳輸給其他中繼。因此在實踐中,應用視圖不會查看存儲庫,而是會查看中繼。當我發帖時,我的存儲庫不會單獨通知我的關注者的存儲庫。我的存儲庫將通知中繼,我的關注者將使用應用視圖來過濾中繼的輸出,以僅顯示他們所關注的人的帖子。這確實意味著中繼通常很大並且運行成本昂貴,但是你可以想象運行一個較小的中繼,它也只傳播來自較小用戶子集的帖子。他們不必展示網絡上的所有內容,當然規模更大的中繼會這麼做。
這是 ASCII 形式的圖示:

這是理解 atproto 核心真正需要知道的一切:人們創建數據,數據在網絡中共享,應用可以與數據交互。
但是,其他服務類型正在被引入,並且將來可能會推出更多。但在我們討論那些之前,我們必須去解釋一些意識形態承諾,以理解事物為何會形成現在的樣子。
什麼是「言論與到達」?
鑑於 atproto 是特意為了實現社交應用而創建的,因此它不僅需要考慮連接人們,還需要考慮斷連人們。審核是任何社交應用的核心組成部分:「無審核」仍然是一種審核策略。 BlueSky 在處理此類問題時承認,不同的人對審核會有不同的偏好,以及大規模審核是困難的。
因此,該協議採用「言論與到達」的方式進行審核。到目前為止我們描述的內容屬於「言論」層。它純粹關心在網絡上覆制的你的內容,而不關心該內容的語義是什麼。審核工具屬於「到達」層:你接受所有言論,但要提供一種方法來限制你不喜歡自己看到的內容的到達。
有時,人們說 BlueSky「完全言論自由」或「不做審核」。這是不準確的。審核工具已被編碼到協議本身中,以便它可以與網絡上的所有內容一起使用,甚至是非 BlueSky 應用。此外,它使你能夠選擇自己的審核者,這樣你就不會受到其他人選擇審核或缺乏審核的影響。但我有點超前了:讓我們來談談訂閱流生成器和貼標機。
什麼是訂閱流生成器?
大多數社交應用都有內容「訂閱流」的概念。這在 atproto 中被分解為自己的服務類型,稱為訂閱流生成器。訂閱流的一個典型例子是「計算機,按時間倒序顯示我關注的人的帖子」。最近,算法訂閱流在社交網絡中變得流行起來,以至於一些非技術用戶將它們稱為「算法」。
訂閱流生成器獲取由中繼產生的大量數據,然後向你顯示一個內容列表,會根據訂閱流生成器所需的任何指標進行過濾和排序。然後你可以向其他用戶共享這些訂閱流。
作為一個實際的例子,我最喜歡的訂閱源之一是 Quiet Posters。這個源顯示不經常發帖的人的帖子。這使得跟上那些被我的主要訂閱流淹沒的人變得更加容易。有像 the ‘Gram 這樣的源,只顯示附有圖片的帖子。或者 My Bangers,顯示你最受歡迎的帖子。
對我來說,這是 BlueSky 相對於其他微博工具的殺手級功能之一:完全的用戶選擇。如果我想製作自己的算法,我可以去做。我可以輕鬆地與他人分享它們。如果你使用 BlueSky,則可以訪問任何這些源並關注它們。
訂閱流是 atproto 最近添加的內容,因此,雖然確實已經有了,但功能可能還不完善,並且將來可能會發生一些變化。我們拭目以待。從我的角度來看,它們工作得挺好了,但我還沒有關注較低級別的技術細節。
什麼是貼標機?
貼標機是一種將標籤應用於內容或帳戶的服務。作為用戶,你可以訂閱特定的貼標機,然後根據帖子上的標籤改變你的體驗。
貼標機可以通過任何它喜歡的方法來做到這一點:通過在帖子上運行某種算法來自動進行,通過讓一些人點贊或點踩來手動進行,運行標籤服務的人想要的任意方法。
標籤服務的一個例子是黑名單:在你不想看到其內容的人所撰寫的帖子上添加標籤。另一個例子是工作不宜過濾器,它可能會對帖子中的圖片運行某種算法,並在認為它們包含工作不宜內容時對其進行標記。
標籤已經有了,但我不相信你現在可以運行自己的貼標機。 BlueSky 運行了自己的,但據我所知還沒有外部版本。但一旦他們這樣做了,你可以想象社區運行自己的服務,添加他們想要的任何類型的標籤。
atproto 中審核如何運作?
將所有這些放在一起,我們就可以看到審核的工作原理:訂閱源可以選擇根據標籤轉換訂閱流,或者應用視圖可以根據詢問貼標機來獲取訂閱流並應用轉換。這些可以根據喜好混合和匹配。
這意味著你不僅可以在應用間選擇審核體驗,還可以在應用內部選擇審核體驗。想要工作適宜源,但又允許在另一箇中包含工作不宜內容?你可以做到。想要製作一個人員黑名單並與全世界分享嗎?你可以做到。
由於這些審核工具在網絡級別而不是應用級別工作,因此它們實際上比其他系統走得更遠。如果有人在 atproto 上構建一個 Instagram 克隆,那麼也可以使用你的屏蔽列表貼標機,因為你的屏蔽列表貼標機是在協議級別工作的。在一個地方屏蔽某人,如果你願意,就可以在每個地方屏蔽他們。也許你在不同的應用中訂閱了不同的審核決策。這 100% 取決於你。
該模型與其他聯邦系統顯著不同,因為你在一個「實例」上實際上沒有一個「帳戶」,像 Mastodon 中那樣。因此,很多人會問「當我的實例被去聯邦化時會發生什麼」之類的問題,這些問題並不完全像所說的那樣有意義。你可以通過基於某些標準屏蔽一組用戶來實現相同的目標,也許你不喜歡某個 PDS,並且想要忽略來自某個 PDS 的帖子,但這是你的選擇,且只是你的選擇,不是由你帳戶所在的某個「服務器所有者」所決定的。
那麼,如果你沒有一臺家庭服務器,身份要如何運作?
身份和帳戶可移植性如何運作?
關於身份如何運作有太多細節,所以我將重點關注我認為重要的部分。我還將重點討論有爭議的部分,因為這很重要。
其核心是,用戶擁有一個身份號碼,稱為「去中心化標識符」或 DID。我的 DID 如下所示: did:plc:3danwc67lo7obz2fmdg6jxcr 。歡迎關注!哈哈,當然這不是你大多數時候會看到的界面。身份還涉及一個句柄,即一個域名。不出所料,我的句柄是 steveklabnik.com 。你會看到我在 BlueSky 上的帖子來自 @steveklabnik.com 。該系統也適用於沒有域名的人;如果你註冊 BlueSky,你將能夠選擇一個名稱,然後你的句柄是 @username.bsky.social 。我開始以 @steveklabnik.bsky.social 身份發帖,然後轉到了 @steveklabnik.com 。但由於 DID 很穩定,所以我的關注者沒有受到干擾。他們只是在用戶界面中看到了句柄更新。
你可以使用域名作為句柄,方法是獲取 PDS 為你生成的 DID,然後在你用於該域名的 DNS 中添加 TXT 記錄。如果你不是那種使用甚至不知道 DNS 是什麼的人,我很羨慕你,但你也可以使用 BlueSky 與 NameCheap 的合作伙伴關係來註冊域名並將其配置為用作句柄,而無需任何技術知識。然後,你可以使用你的域名作為句柄登錄應用,一切正常。
這也是 BlueSky 提供真正的「帳戶可移植性」的方式,部分原因是,實際上並不存在帳戶的概念。使用給定 DID 的人用密碼學對他們創建的內容進行簽名,然後該內容會在網絡上覆制。 「你的帳戶」無法真正被封禁,因為這意味著有人強行阻止你使用他們甚至無法訪問的密鑰。如果你的 PDS 出現故障,而你想要遷移到新的 PDS,則有一種方法可以從網絡本身回填 PDS 的內容,並通知網絡你的 PDS 已移動。這是真正的、有意義的帳戶可移植性,與當今運行的任何類似服務截然不同。
但是。
細節決定成敗,我認為這是對 BlueSky 和 atproto 更有意義的批評之一。
你會看到,創建 DID 的「方法」有多種。 BlueSky 支持兩種方法: did:web ,基於域名。這種方法有一些缺點,我個人還沒有完全理解所以無法描述,我相信我將來會寫一些關於 DID 的深入內容。
因此,由於那些弱點,BlueSky 實現了自己的 DID 方法,稱為 did:plc 。 plc 代表「佔位符」,因為即使他們計劃無限期地支持它,它也有其弱點。這個弱點在於它需要詢問 BlueSky 運行的服務才能解析正確的信息。例如,這是我的查詢。這意味著 BlueSky 可以通過比用其他歸功於網絡設計不可能的更嚴重的方式去封禁你,有些人認為這是一個非常嚴重的問題。
那麼,這個缺陷是致命的嗎?我不這麼認為。第一個原因是,如果你真的不想參與它,你可以使用 did:web 。是的,由於其他原因這並不很好;畢竟這就是創建 did:plc 的原因。但你確實可以解決這個問題。
另一點是,在我個人看來,BlueSky 團隊已經表現出了足夠的理解和對在這裡的控制感到不適,並且它的設計方式是,如果其他更好的系統開發出來,你可以轉向它們。他們還表示,未來將 did:plc 的治理轉移到某種共識模型是可能的。是有選擇的。此外,其他人也可以運行 did:plc 服務並使用該服務(如果他們願意的話)。
我個人認為這是務實地管理事務的例證,其他人則認為這是一個邪惡的陰謀。你必須自己判斷。
BlueSky 是如何構建在 atproto 之上的?
現在我們理解了 atproto,我們就可以理解 BlueSky 了。 BlueSky 是一個構建在 atproto 網絡之上的應用。他們運行一個應用視圖,以及一個使用該應用視圖工作的 Web 應用。他們還為通過 Web 應用註冊的用戶運行一個 PDS,以及與這些 PDS 通信的中繼。
他們發佈了兩個詞典,一個為 com.atproto.* ,另一個為 app.bsky.* 。前者是網絡上任何應用都需要的低級操作,而後者是 BlueSky 特有的操作。
但 BlueSky 的一個特別好的事情是,他們的產品目標是沒有人應該知道這些書呆子的東西才能夠使用 BlueSky。沒有實例意味著不存在「我需要選擇一個實例來創建帳戶」這種流程,而可移植性意味著如果我的主機出現故障,我可以遷移走,而我的關注者對此卻一無所知。
其他人如何在 atproto 之上構建應用?
你可以通過創建一個詞典來創建一個 atproto 應用。然後你需要運行一個應用視圖來處理涉及你的詞典的網絡數據,你的應用將讓人們可以將數據寫入他們使用你的詞典的 PDS。
我自己也在考慮這樣去做。我們拭目以待。
結語
好啦,技術方面,這就是 atproto 和 BlueSky 的工作原理的概述啦。我覺得這個設計非常巧妙。此外,我認為把 atproto 和 BlueSky 分開關注非常有意義,因為網絡擁有「殺手級應用」正給出了使用它的理由。這也是一種測試形式,確保 atproto 足夠好,以能夠去構建真正的應用。
我相信我將來會對這一切有更多的話要說。
歡迎加入深潮 TechFlow 官方社群
Telegram 訂閱群:https://t.me/TechFlowDaily
Twitter 官方帳號:https://x.com/TechFlowPost
Twitter 英文帳號:https://x.com/BlockFlow_News














