打造 SPACE:為長期執行的代理提供安全高效的執行環境
SPACE 是 Perplexity 的安全、高效沙箱平台,為長期執行的代理式工作流程以及快速、隔離的程式碼執行提供動力。
隨著代理式工作流程變得越來越長且具備更高的自主性,AI 代理運作的環境與驅動它們的模型同樣重要。代理需要執行實際工作,例如執行程式碼、編輯檔案系統以及執行耗時數小時或數天的多步驟任務。使用者希望代理能夠存取執行這些任務所需的工具和檔案,但同時也需要確保即使代理受到損害,他們的系統仍能保持安全。沙箱讓這一切成為可能:這是一個隔離的環境,代理可以在其中自由運作,同時主機、其他租戶和敏感憑證都能受到保護。
傳統的容器式沙箱方法並非為這些任務而設計。它們通常假設工作是短暫且無狀態的,並將核心視為單一故障點。相比之下,代理工作階段是長期存在且有狀態的:代理會累積數小時的上下文、運作中的檔案系統以及正在執行的程序,這些無法簡單地丟棄並從頭開始重新建構。此外,內部的運作負載在預設情況下應被視為不受信任,這需要更強大的安全措施。長期執行的代理工作階段需要一種能夠隔離敵對客體、保留其狀態且仍能大規模運作的基礎結構。
沙箱工程的主要挑戰來自於安全性、功能性和效率之間經常出現的衝突。例如:
授予更廣泛的存取權限讓代理能完成更多任務,但卻將系統的更多部分暴露給您不信任的工作負載。
在沙箱之間共用更多內容可以加快建立速度,但會擴大攻擊面。
更頻繁地拍攝快照可改善復原能力並支援如復原(rollback)等功能,但需要耗費時間和儲存空間。
代理式沙箱(例如執行程式碼所需的沙箱,使用 代理技能,或在 Computer 查詢中執行 搜尋即程式碼 (Search as Code) 管線)需要同時具備這三者。過去幾個月,我們致力於建構驅動我們產品的下一代代理基礎架構。今天,我們推出 SPACE(代理式程式碼執行沙箱平台):一個專為代理式工作流程建構的沙箱平台,具有安全、可靠且可大規模高效運作的特性。上個月,我們開始推出 SPACE 作為驅動 Perplexity Computer 的沙箱層。在過去一週中,它已安全地支援了數百萬次沙箱建立和數千萬次重新連線,啟動速度比我們之前的解決方案快 3-5 倍。
本文介紹 SPACE 背後的架構與設計決策。截至今日,100% 的 Computer 工作階段現在都在 SPACE 上執行。我們很高興能將此平台部署到更多介面上,為我們的使用者和開發人員提供一流的代理式執行環境。
架構
從高層級來看,該系統分為三層。
控制平面是系統的大腦,負責決定應存在什麼以及存在何處。它由 API 閘道和叢集級狀態管理模組組成。
節點本地服務是執行控制平面計畫所需的本地機制。它們負責沙箱生命週期、儲存、網路以及其後的權限操作。
沙箱本身就是隔離的執行環境。它被實作為一個與 space 精靈 (daemon) 配對的虛擬機器:這是一個在客體內部執行的背景程序,負責為工作負載代理檔案系統、程序和網路存取。

控制平面
API 閘道是入口點。傳入的請求經過驗證與授權後,會轉換為預期狀態的記錄。
控制平面在設計上是無狀態的,所有持久性資訊都會卸載到共用資料庫中。它會追蹤叢集級的沙箱資訊,例如它們被分配到哪個節點、它們在哪裡執行,以及它們是否已備份到持久性儲存空間。它持續將預期狀態與觀察到的狀態進行比較,並驅動兩者趨於一致。操作是等冪的,因此控制平面在任何崩潰、重新啟動或部分故障後都能自動復原。
節點本地服務
節點本地服務執行準備範本、啟動沙箱、連接網路以及執行主機端執行環境服務的實際工作。每個節點執行一組小型精靈來管理放置在其上的每個沙箱,而節點是這些沙箱即時狀態的事實來源。
沙箱管理員知道哪些沙箱正在執行、暫停、掛起或停止,以及它們實際佔用的資源。它以無權限模式執行,並將所有權限工作委託給節點管理員,後者是代理底層基元的單一根程序。儲存是在本地且以持久方式處理的:當前沙箱狀態的快照會儲存在節點上,磁碟區管理員會根據需要將快照和範本移入或移出物件儲存,以實現跨節點操作。安全閘門保護沙箱可存取的範圍:憑證管理員在各服務授權下控制憑證注入,而網路閘道則執行每個沙箱的輸出策略。
沙箱
沙箱本身是一台虛擬機器 (VM),擁有自己的客體核心,在硬體隔離邊界後執行使用者的工作負載。由於每個沙箱都有自己的核心,因此受損的工作負載無法依賴共用主機核心作為單一故障點;即使它成功利用了其客體核心,該損害也僅限於沙箱的 VM 邊界內,而不會傳播到其他工作負載。
space 精靈在每個虛擬機器內部執行,作為輕量級代理,調節平台在客體內部執行的每個動作或修改。它處理檔案系統存取和程序管理。它還會回報客體就緒狀態並追蹤活動,以便平台知道沙箱何時閒置並可以暫停或回收。至關重要的是,space 精靈不會直接與客戶端交談,而是透過私有的虛擬機器內通道與主機通訊。這使所有客體互動保持在受控路徑上,並保留沙箱自身的網路,僅供工作負載的對外流量使用。
三大支柱:安全性、功能性和效率
接下來,我們深入探討 SPACE 在安全性、功能性和效率這三大支柱上必須提供的關鍵屬性。如前所述,這三者之間存在拉扯。然而,如果我們希望支援能達到現今模型能力的強大代理,我們就不能在任何一方面妥協。安全性防止不受信任、可能具敵意的工作負載損害主機、其他租戶或使用者的秘密。功能性賦予代理所需的豐富生命週期。效率使這一切在有限的記憶體、磁碟和運算資源下變得負擔得起。
安全性:保護資料與系統
沙箱平台需要強大的安全性,以確保在沙箱內執行的錯誤或惡意程式碼不會對其他地方造成有害影響。如果沒有強制執行嚴格的輸出控制並將秘密排除在沙箱之外,代理的一個錯誤步驟就可能洩漏使用者的金鑰或竊取工作成果。

SPACE 採取分層方法來確保沙箱的安全性。沙箱隔離有兩個組成部分:VM 隔離與主機 OS 程序隔離。兩者都必須被突破才能進行跨沙箱存取。與沙箱的通訊受到嚴格控制;程序只能透過專用通道進行通訊。網路閘道強制所有輸出流量經過它。space 精靈是(不受信任的)沙箱與(受信任的)平台之間唯一認可的通道。
憑證永遠不會儲存在代理可以竊取的地方。憑證儲存庫位於沙箱邊界之外,負責憑證的生命週期。它透過可插拔的保險庫後端儲存和檢索秘密,使用分層範圍解析憑證,管理諸如注入方法和過期時間等元資料,並對所有存取強制執行速率限制和稽核記錄。需要時,憑證會在網路層注入或由瀏覽器代理自動填入,而不是直接進入沙箱。
資料在靜態時受到保護。SPACE 支援 BYOK(攜帶您自己的金鑰)以保護外部儲存的資料。加密金鑰來自客戶的金鑰管理服務,絕不會進入沙箱。如果企業撤銷該金鑰,其資料將變得無法讀取。
功能性:驅動代理式工作流程
為了支援代理式工作流程,沙箱需要豐富的生命週期支援。它們必須能夠快速且大規模地建立,因為代理可能一次啟動多個沙箱,且不應等待它們開機。它們必須能夠無限期地持續存在,因為工作階段可能持續幾分鐘或幾個月。它們必須能夠乾淨地暫停,有時是為了長時間暫停,例如當任務因等待人類輸入而受阻時。它們還必須支援分支、復原和崩潰復原,這樣工作階段才能在遇到故障時進行分支、撤銷錯誤步驟或恢復,而不是從頭開始。
SPACE 支援上述所有功能。它將完整的沙箱生命週期建模為明確的狀態機,這使得建立、暫停、恢復、掛起和還原等操作成為可能。

快照是大多數這些功能底層的機制。排程器會定期運作並擷取兩種類型的快照:磁碟快照(檔案系統的時間點副本)和完整快照(整個已暫停虛擬機器的檢查點)。磁碟快照會被頻繁擷取,而完整檢查點則較不頻繁。所有內容都保留在節點上,保留期限隨層級遞減。這些快照可用於工作階段內的復原;例如,磁碟快照可用於將檔案系統回滾以撤銷破壞性命令,而完整檢查點則讓崩潰的沙箱從最近的執行點恢復,而不是從冷磁碟啟動。
當沙箱被掛起時,VM 會被暫停,系統會拍攝完整快照,並將完整快照中的成品上傳到物件儲存。資料庫資料列會追蹤該快照,只有在每個成品都就緒後才能還原,因此部分上傳的快照永遠不會恢復為損毀狀態。還原是掛起的反向操作。因為快照存在物件儲存中而不是原始節點上,任何節點都可以將沙箱恢復。排程器會選擇一個節點,該節點會下載成品,在範本之上重新應用檔案系統增量,並從其擷取的狀態恢復虛擬機器。
效率:最佳化時間與空間
僅僅在真空中實現上述功能是不夠的;它們還必須在嚴格的資源限制下實現。節點上的記憶體和磁碟是有限的,使用者希望代理能盡快運作,因此生命週期操作必須在時間和空間上都具有成本效益。我們無法負擔在每次建立、暫停或分支沙箱時複製整個機器映像的費用。
一個關鍵的設計選擇使這成為可能:檔案系統。SPACE 使用 btrfs 作為沙箱儲存的節點本地檔案系統。Btrfs(B-tree 檔案系統)結合了寫入時複製 (copy-on-write) 檔案系統與整合式邏輯磁碟區管理。這有幾個優點:
Reflink 複製速度很快,因為您共用了底層擴充範圍 (extents),因此只需要複製元資料。
快照是原子且快速的,因為您只需建立一個新的根目錄。
所需的儲存空間極小,因為您只需儲存變更過的內容。
結果是,沙箱可以快速建立和還原。我們並非每次都從頭開始建立沙箱,而是保持一個已在磁碟上具體化常用範本的熱 Pod 儲備池,並透過將請求綁定到與其範本相符的 Pod 來滿足請求。為該沙箱提供其自己的可寫入根檔案系統,即是進行寫入時複製的複製,而非完整複製。當沒有合適的熱 Pod 時,我們會按需具體化範本;我們會將對相同映像的併發請求合併為單一下載,因此突發的相同請求不會變成突發的相同工作量。
結果是一個既強大、輕量級又極其快速的沙箱執行環境。當我們推出 SPACE 時,我們在相同的生產流量上與我們之前的沙箱提供者並行執行。在發布週期間,SPACE 在整個分佈過程中建立沙箱的速度快了三到五倍。具體而言,中位數建立延遲從 185 毫秒下降到 60 毫秒(提升了 3.1 倍),第 90 百分位延遲從 447 毫秒下降到 89 毫秒(提升了 5.0 倍)。我們在其他效能和資源使用指標上也觀察到了數量級的提升。

它還使執行滾動磁碟快照變得容易,因為它們快速、節省空間且不需要暫停沙箱。此外,高效的增量儲存減少了儲存這些快照所需的空間。
結論
在設計複雜系統時,人們很容易傾向於選擇單一目標進行孤立優化。但前沿代理的開發人員要求在安全性、功能性和效率方面達到同等水準。透過 SPACE,我們旨在在所有三個支柱上實現 Pareto 改進。
每個獨立的設計選擇都能同時服務於多個目標,這使得這種微妙的平衡成為可能。每個沙箱的 VM 為每個工作負載提供其自己的核心,透過強大的隔離強化安全性,同時也提供了快照所依賴的乾淨檢查點邊界。Btrfs 實現了快照、分支和其他對代理執行環境至關重要的操作的高效實作。space 精靈將所有客體互動保持在受控的主機端路徑上,在封鎖客體與主機邊界的同時,保留了代理的操作自由。中央網路閘道調解輸出和憑證注入,而不會將秘密暴露給客體。
這些設計決策的結果是一個能夠大規模實現現實世界代理編排的平台。SPACE 提供了基板,長期的、有狀態的代理可以在此基板上安全地處理任意複雜或持續時間的工作,而不會犧牲效能或安全性。
今天,SPACE 已經驅動了數百萬次 Perplexity Computer 工作階段。我們打算將 SPACE 作為一個統一層,用於在任何環境中佈建和控制沙箱:從 Linux microVM 到 Windows 客體,再到使用者自己的本地機器。我們正努力將 SPACE 推向這些新環境,以便開發人員能夠交付在使用者工作的任何地方都能運作的 AI 產品。
如果您渴望塑造驅動未來前沿代理的運算層,我們邀請您 加入我們的團隊。