大多數性能問題並不會以失敗的形式提前告知自己。
它們以一種猶豫的方式出現。
這就是我今天在測試 Newton 主網 Beta 時注意到的地方。
一個請求在完成之前重試了一次。沒有錯誤。沒有警告信息。只是有一段暫停,長到讓我懷疑自己是不是誤打誤撞落在了一個繁忙的節點上。
我最初的解釋很明顯:是容量。
網絡變得繁忙。節點承受的負載不均。每天都會發生重試。我差點在沒有再多想的情況下就把它放過去了。
但我看得越久,這個解釋就越不可信。
上傳按預期順利完成。
存儲已確認數據。
註冊按計劃出現。
然後幾乎不知不覺地,在任務可供執行之前,一切都變慢了。
沒有任何東西壞掉。
看起來沒有任何不健康的跡象。
節奏就這樣變了。
這種區別很關鍵,因爲牛頓主網 Beta 並不僅僅是爲了立即結算而設計。策略驗證位於接收與執行之間,這意味着可見的延遲不一定是失敗的症狀。有時網絡正在做用戶其實看不見的更多工作。
那個領悟讓我想起了白天早些時候發生的一件完全無關的事。
我入場交易是因爲訂單確認幾乎瞬間就出現了。幾秒鐘後我發現可用流動性遠沒有我想象的那麼深。
訂單已確認。
執行質量又是另一回事。
兩套完全不同的系統。
一條相同的經驗教訓。
確認帶來信心。
執行揭示了現實。
從這個視角看透牛頓的過程,這個序列感覺更不像一次單獨的交易,更像是一串相互獨立的檢查點:
上傳 → 存儲 → 註冊 → 傳播 → 策略驗證 → 簽名證明 → 執行 → 重複使用
分開來看,每個階段都顯得很健康。
等待發生在這些過渡階段裏。
這部分是我覺得有意思的。
我們花很多時間去衡量吞吐量、硬件和帶寬,因爲這些指標很容易被直觀地呈現出來。對於同步、驗證窗口、模型狀態以及隊列時序等方面,關注就少得多——這些看不見的機制決定了分佈式系統實際運行得有多順暢。
當不同的操作者以略不同的時間表處理工作負載時,每個組件都可能運行正常,但整體體驗仍然會顯得不一致。
沒有警報。
沒有失敗的交易。
只是多了幾秒鐘,卻悄悄改變了系統給人的整體感受。
這些就是那種很少出現在儀表盤上的瓶頸,但只要有人和網絡交互久一點,就會立刻明白。
我仍然不確信這些短暫的停頓在日常使用中確實重要。
也許他們並沒有。
真正的考驗在後面。
一場成功的活動之後、一場重大的產品發佈之後,或者當成千上萬的代理、用戶和自動化金庫開始同時提交任務時,突然出現的大規模採用浪潮之後,會發生什麼?
那些看不見的停頓會一直隱藏在表面之下嗎?
還是說,它們會變成最終每個人都會注意到的瓶頸?
這就是我最密切關注的問題。
