今天是募資公告日。為了面向更廣泛的讀者,這篇文章採取正式且安全的公告方式,這是理所當然的。當規模擴大時,寫作必須變得不帶個人色彩。但我想寫一些個人化的內容,說明我為何要做這件事。打造 exe.dev 的目標是什麼?
我已經是另一家表現良好的新創公司的共同創辦人,販售著我從設計與建造時就非常喜愛的產品。
那麼,為什麼我還要忍受創業的種種痛苦,再次投入創業?有些創辦人對我投以難以置信和震驚的眼神,覺得我怎麼會再跳進火坑。(更糟的是,經驗告訴我,未來還有更多痛苦等著我。)這真的是個難以回答的問題,因為我試圖尋找一個「宏大」的理由,一個原則或社會需求,一個超越挑戰本身的動機。但我相信真相其實很簡單,對某些人來說,這同樣難以置信。
在某些科技圈子裡,這樣的說法很少見。(「在這裡,我們詛咒電腦!」)我理解,電腦確實令人沮喪。但我喜歡電腦,我一直都喜歡。讓電腦做事真的很有趣。雖然過程痛苦,但結果值得。小型微控制器很有趣,桌面電腦很有趣,手機很有趣,伺服器也很有趣,無論是在你家地下室的機架上,還是在世界另一端的資料中心。我喜歡它們全部。
所以當我承認:我不喜歡今天的雲端,這對我來說並非小事。
我想喜歡它。電腦很棒,無論是直接安裝在 PC 上的 BSD,還是 Linux 虛擬機。我能享受 Windows、BeOS、Novell NetWare,甚至以前安裝過 OS/2 Warp,玩得很開心。Linux 今天特別強大,潛力無窮。雲端不過是 Linux 虛擬機,更好的是,它們是由 API 驅動的 Linux 虛擬機。我應該是在天堂。
但我嘗試的每個雲端產品都不對勁。有些比其他好,但我總是被雲端供應商的選擇限制,讓我難以讓電腦做我想做的事。
這些問題超越了使用者體驗或糟糕的 API 設計。今天雲端的一些基本組件形狀錯誤。虛擬機的形狀錯誤,因為它們綁定於 CPU/記憶體資源。我想買一些 CPU、記憶體和磁碟,然後在上面運行虛擬機。Linux 虛擬機是另一台 Linux 的 cgroup 中運行的進程,我應該能在我擁有的電腦上運行任意多的虛擬機。今天的雲端唯一簡單做到這點的方法,是自己動手隔離,使用 gVisor 或單一雲端虛擬機上的嵌套虛擬化,承擔嵌套的效能損失,然後還得管理至少一個反向代理到我的虛擬機。這一切都是因為雲端抽象形狀錯誤。
雲端試圖用「PaaS」系統解決這問題。這些抽象本質上比電腦功能弱,且專屬於特定供應商。你得為每個計算供應商學習新的軟體編寫方式,結果在專案進行一半時發現,某些在普通電腦上很簡單的事,因為平台系統深藏的某些模糊限制,幾乎不可能做到。一次又一次,我說「這次是對的」,卻被半吊子、半實作或半思考的抽象背叛。謝謝,不用了。
以磁碟為例。雲端供應商希望你使用遠端區塊設備(或更有限且緩慢的像 S3)。當遠端區塊設備被引入時,它們是合理的,因為電腦使用硬碟。遠端不會影響連續讀寫效能,只要緩衝實作良好。硬碟的隨機尋址約需 10 毫秒,1 毫秒的以太網連線往返時間是合理代價。這對硬碟來說是好產品,也讓雲端供應商更容易管理,因為它移除標準實例類型的一個維度。
但後來我們都換成 SSD。尋址時間從 10 毫秒降到 20 微秒。即使遠端區塊系統的網路 RTT 有所優化,SSD 的 IOPS 開銷從硬碟的 10% 飆升到超過 10 倍。配置 EC2 虛擬機達到 20 萬 IOPS 很費工,且每月要付 1 萬美元。我的 MacBook 有 50 萬 IOPS。為什麼我們要用慢速磁碟拖累雲端基礎設施?
最後是網路。超大規模雲端供應商有很棒的網路,但收費極高,且與其他供應商合作困難。雲端供應商的出口流量價格是普通資料中心架設伺服器的 10 倍。中等流量時,差距更大。當然,如果你每月花費數百萬美元,價格會好很多,但我大多數專案只想花幾十美元。技術本身沒問題,但這是限制你建造可負擔系統的關鍵。
最後,雲端的 API 令人痛苦。這也是 Kubernetes 等專案出現的原因,試圖減輕工程師使用雲端的痛苦。但 Kubernetes 虛擬機很難用,因為雲端讓你自己處理所有事,還得承受嵌套虛擬化的效能損失。磁碟難用,因為 Google 設計 Kubernetes 時,遠端區塊設備還不實用。即使你找到跨雲端的共通模式,也會很慢。網路難用,因為如果簡單,你就能從鄰近的開放資料中心私有連結,省下一大筆雲端費用。有人可能會說 Kubernetes 是騙局,是為了避免真正產品開發而製造的假工作,但事實更糟:它是試圖解決不可能問題的產品——讓雲端可攜且可用。這做不到。
你無法透過在上層建立新抽象來解決雲端抽象的根本問題。讓 Kubernetes 變好本質上是不可能的,這只是給豬塗口紅的工程。
我們已經在這些糟糕的雲端上摸索了 15 年。我們將就,就像對待軟體堆疊中所有不愉快的部分一樣,忍受著,盡量減少接觸次數。
但現在,是時候改變了。
因為有了代理(agents)。事實上,我和我的共同創辦人 Josh 開始嘗試,是因為我們想用大型語言模型(LLM)來編程。結果發現,LLM 需要的是更好的傳統抽象。代理讓寫程式變得更容易,意味著軟體數量將大幅增加。經濟學家稱這為傑文斯悖論(Jevons paradox)。我們每個人都會寫更多程式,無論是為了娛樂還是工作。我們需要私有空間來執行它們,方便與朋友和同事分享,且開銷最小。
隨著軟體數量增加,雲端從令人厭煩變成更大的痛苦。我們需要更多計算資源,也需要更容易管理。代理在某種程度上有幫助。如果你信任它們使用你的憑證,它們能很好地操作 AWS API(雖然偶爾會刪除你的生產資料庫)。但代理和我們一樣,受限於抽象的根本限制。你需要比應該更多的代幣,結果也比應該差。代理花在思考如何扭曲傳統雲端以運作的上下文視窗,就是沒用來解決你問題的上下文視窗。
所以我們要改變它。今天我們在 exe.dev 推出的服務解決了虛擬機資源隔離問題:你不再是配置單一虛擬機,而是購買 CPU 和記憶體,然後運行你想要的虛擬機。我們處理了 TLS 代理和認證代理,因為我不想讓新虛擬機直接暴露在網路上。你的磁碟是本地 NVMe,區塊會非同步地在機器間複製。我們在全球設有區域,因為你想讓機器靠近你。你的機器位於 Anycast 網路後方,為全球用戶提供低延遲入口(也讓我們能很快推出令人興奮的新功能)。
這裡還有很多要建設的東西,從靜態 IP 到如何讓你存取自動歷史磁碟快照的使用者體驗挑戰,這些都會陸續完成。同時,我們回到起點,在資料中心架設電腦,思考軟體堆疊的每一層,探索所有網路連接的可能性。
所以,我正在打造一個雲端,一個我自己真正想用的雲端。我希望它對你也有用。