「Solana 資料延遲或不完整?」接收端基礎設施該檢查什麼

訂閱了高速 Solana Shreds 串流,卻只收到零星封包。收到的 Shreds 可以正確解析,但缺少太多片段,無法擷取交易。同一台伺服器上的 gRPC 卻能正常運作,讓您不知道接下來該查哪裡。
在檢查傳送端的同時,也應檢查應用程式伺服器及其所在的資料中心。即使 ERPC 很快就轉發了 Shreds,路徑上的 UDP 限制,或接收伺服器的處理瓶頸,也可能讓您的應用程式無法受益於這樣的速度。
選擇 Shreds 串流時,需要考量完整路徑:封包如何抵達,以及如何轉化為可用的資料。網路品質、距離與資料中心的維運政策,也是 Geyser Yellowstone gRPC、一般 RPC 與 API 流量,以及交易提交共同依賴的效能條件。

傳送端紀錄與接收後可用的資料,反映的是不同的事實
在最近的一次 ERPC 支援諮詢中,傳送端的短時間量測記錄了約 3,400–3,900 packets/sec。接收端則回報約 13 packets/sec,且未完成任何 slot 重建。
這些數值來自不同的量測時段,且尚未確認量測方法是否具有可比性。因此,它們無法用來判定送達成功率或丟包率。僅憑傳送端紀錄並不能證明資料已抵達;截至本文撰寫時,最終原因仍未確定。
每秒幾千個封包本身,也不足以認定這對一般用途伺服器屬於異常高的負載。需要確認的是實際路徑上發生什麼事、適用哪些限制、流量如何在短時間內集中、接收如何處理,以及每個計數器實際量測什麼。
同在法蘭克福,網路路徑也可能不同
您的串流來源與應用程式伺服器可能都位於法蘭克福,卻仍分屬不同的資料中心。在這種配置下,流量可能會離開其中一座設施,經過外部網路,再進入另一座設施。區域標籤相同,並不代表位於同一座設施、使用相同的網路業者或經過相同的一組中間設備。
當 ERPC 串流或 RPC 服務與 ERPC VPS 或 Bare Metal 主機部署在同一個站點時,服務伺服器與應用程式伺服器會位於鄰近的機櫃中,兩者之間的通訊在內部網路完成。這正是 ERPC「零距離通訊」的概念:除了選擇同一座城市,還要一併設計實體部署位置與通往接收應用程式的路徑。

避免 ERPC 服務與應用程式伺服器之間繞行外部網路,可以縮短路徑,並降低這一段通訊受外部網路壅塞與路由變動影響的程度。較短的路徑,搭配接收與處理所需的資源,是發揮高速串流優勢的基礎。請分別在封包抵達與應用程式處理兩個階段驗證結果。
網路條件影響各種通訊
在 Shreds 中,片段缺失讓問題變得明顯,但同一基礎架構的品質,也會更廣泛地影響資料接收、API 請求與交易提交。協定不同,應用程式看到的症狀與值得量測的環節也會不同。
| 通訊類型 | 網路影響出現在哪裡 | 在應用程式中檢查什麼 |
|---|---|---|
| Shreds / UDP | 封包遺失與延遲,以及重建所需片段的抵達情況 | 有效 Shreds,以及資料能夠完成重建所需的時間 |
| Geyser Yellowstone gRPC | TCP 重傳等待、串流積壓與延遲 | 接收並處理同一筆更新所需的時間 |
| RPC、API 與服務間流量 | 請求與回應的往返,以及壅塞期間的等待 | 回應時間及其變動 |
| 交易提交 | 請求送達接收節點的路徑 | 從發出提交請求到節點回應的時間 |
鄰近部署與合適的維運政策能支援上述各類流量。接收節點的回應時間,應與交易被納入區塊並在鏈上最終確認所需的時間分開量測。
僅看 Gbps,無法掌握 PPS 與突發流量的全貌
頻寬描述單位時間內可傳輸的資料量。PPS 則描述每秒處理的封包數量。連線即使還有剩餘頻寬,也可能觸及封包速率上限,或受到針對 UDP 的限制。雲端供應商本身的文件,也將頻寬與 PPS 配額視為不同的限制條件。[1]
Shreds 不一定以均勻的速率抵達。突發流量可能造成平均值無法顯示的佇列壓力。若封包累積的速度超過網路設備或接收端的處理速度,超出佇列容量的封包就可能遭到丟棄。[2]
請向主機服務供應商確認持續接收 UDP、短時間突發流量、PPS 限制,以及 DDoS 防護所套用的規則。目的是建立可安全接納必要流量的條件,而不是不加區分地停用防護。
gRPC 正常運作,不代表 UDP 接收也正常
以 TCP 為基礎的 gRPC,與透過 UDP 傳送的原始 Shreds,使用不同的傳輸機制。TCP 提供重傳與排序機制,而 gRPC 串流具有考量接收端處理能力的流量控制機制。UDP 本身不會重傳遺失的封包,也不會要求傳送端等待接收應用程式趕上進度。[3]
因此,伺服器上的 gRPC 可以正常運作,並不能證明 UDP 路徑或接收端也運作正常。必須分別檢查各協定專屬的篩選規則、連接埠、傳送路徑與接收端實作。gRPC 處理延遲也可能表現為等待時間增加或連線中斷。
gRPC 的 transactions/sec 與 UDP 的 packets/sec,在不同處理階段量測的是不同單位。不能直接比較兩者來計算送達量或遺失率。
從封包抵達,到資料可用
採用標準 UDP 通訊端接收時,抵達的封包會先經過網路介面卡(NIC)、核心與通訊端接收緩衝區,再送到應用程式。如果處理速度跟不上,封包即使已抵達主機,仍可能遭到丟棄。Linux 介面接收計數器包含之後階段遭到丟棄的封包,因此僅憑接收計數增加,並不能證明封包已交付應用程式。[4]
即使整體 CPU 使用率偏低,個別接收佇列或 CPU 核心仍可能十分忙碌。請檢查 NIC 佇列、中斷配置與單核心效能。在應用程式中,應視情況將接收與後續工作分開,避免在接收迴圈中進行耗費大量資源的解析或過量的日誌輸出。較大的接收緩衝區可以吸收暫時的突發流量,但無法解決持續處理能力不足的問題。[5]
Shreds 是區塊資料的片段。前向錯誤更正(FEC)能利用同一組中的 data shreds 與 coding shreds 復原遺失的資料,但重建仍需要足夠的片段。增加重複封包的數量,不能取代缺少的片段。[6]
依實作方式而定,接收端可以在整個 slot 完成之前,利用現有片段重建 entries。[9] 除了封包總數,也要量測不重複的有效 Shreds、重建出的資料,以及應用程式辨識所需事件所花的時間。
在相同時間區間內,逐一量測各個階段
請對齊兩端的目的地、連接埠與量測時間區間。分別記錄下列階段,有助於縮小下一步調查範圍。
| 量測位置 | 記錄內容 | 可以判定什麼 |
|---|---|---|
| 傳送端 | 針對目標目的地的紀錄與計數器定義 | 觀察到了哪個傳送階段 |
| 接收主機入口 | 目標 UDP 流量的封包擷取、NIC 統計與擷取時的丟包 | 該觀測點可見的流量有多少 |
| 作業系統與通訊端 | UDP 錯誤、接收緩衝區丟包與佇列變化 | 主機內部的接收是否出現積壓 |
| Shreds 重建 | 不重複的有效 Shreds、成功重建情況、遺失資料與錯誤 | 能否由封包取得所需資料 |
| 應用程式 | 處理積壓,以及偵測同一事件的時間戳記 | 封包抵達的速度是否反映在應用程式中 |
若封包擷取結果只顯示少量封包,請先檢查擷取的篩選條件、觀察的介面、擷取時的遺失,以及 NIC 丟包。有些作業系統計數器涵蓋整台主機或整個網路命名空間;請確認其範圍,並將其與目標應用程式的量測結果對照。[4][5]
找出受到限制的階段後,再調整設定。單純增大緩衝區或環形佇列,可能會轉移瓶頸,或增加等待時間。ERPC 目前的接收端設定與檢查方式,記載於以下文件:
選擇伺服器時,也要選擇維運政策
Solana Foundation 說明了對高效能驗證節點而言,能夠控制 NIC、實體核心、驅動程式與網路的重要性。不應將完整驗證節點的需求全盤套用到每一個 Shreds 接收端。接收應用程式需要的是適合自身串流與處理工作負載的配置。[7]
降低成本或耗電量,是合理的維運目標。HFT 與即時應用程式同時也需要 CPU 迅速回應、持續的處理能力,以及較短的網路等待時間。從省電狀態喚醒,可能涉及延遲方面的取捨。[8]
除了 CPU 型號與核心數,還要檢查資源如何共用、如何處理持續負載、UDP 流量的適用條件,以及實際的網路路徑。
ERPC 一併考量串流與接收環境
ERPC 從鄰近 Solana 基礎架構的資料中心選址、網路路徑、硬體與維運設定著手,除了 Shreds 與 gRPC,也提供 VPS 與 Bare Metal。您可以依處理工作負載選擇 VPS,並在需要獨占實體資源時,將 Bare Metal 納入比較。
瞭解我們所提供環境的配置與運作方式,也有助於技術問題排查。我們可以對照傳送端紀錄與接收端量測,找出網路、作業系統或應用程式的具體檢查項目。在本文提到的諮詢案例中,我們檢查了傳送端量測結果,並請接收端補充量測。
一併評估串流、接收端部署位置與應用程式實作,有助於釐清從您所選服務到所需資料之間,還缺少哪些條件。
透過按小時計費,與目前環境進行比較
如果您對接收環境仍有疑問,可以透過按小時計費使用 ERPC VPS 或 Bare Metal 伺服器,以相同的串流與應用程式進行比較。請在控制台確認所需區域的目前價格、可用資源與訂購條件。
從可用的配置開始,記錄接收數量、重建出的資料、處理積壓,以及偵測相同事件的時間戳記。跨主機比較時間戳記時,也請檢查時鐘同步的精確度。在不同時段重複測試,比較路徑中哪些位置的結果不同,再依據這些量測結果,選擇適合應用程式的伺服器與資料中心。
- VPS: https://erpc.global/zh-tw/vps/
- Bare Metal: https://erpc.global/zh-tw/baremetal/
- 控制台: https://dashboard.erpc.global/zh-tw/
相關文章
- Solana Stream SDK v4.0.0: https://erpc.global/zh-tw/news/2026/11/07/erpc-solana-stream-sdk-v4-20261107/
- [9] Shreds UDP Forwarding Premium: https://erpc.global/zh-tw/news/2026/11/03/erpc-shreds-udp-forwarding-premium-20261103/
- Validators DAO 官方 Discord: https://discord.gg/C7ZQSrCkYR
技術參考資料
- [1] AWS EC2 頻寬與 PPS 配額: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html
- [2] IETF UDP 使用指南,突發流量: https://www.rfc-editor.org/rfc/rfc8085.html#section-3.1.6
- [3] Linux UDP: https://man7.org/linux/man-pages/man7/udp.7.html
- [3] Linux TCP: https://man7.org/linux/man-pages/man7/tcp.7.html
- [3] gRPC 流量控制: https://grpc.io/docs/guides/flow-control/
- [4] Linux 介面統計資料: https://docs.kernel.org/networking/statistics.html
- [4] libpcap 封包擷取行為與丟包: https://github.com/the-tcpdump-group/libpcap/blob/master/doc/README.linux
- [5] Linux 網路堆疊的擴充: https://docs.kernel.org/networking/scaling.html
- [5] Linux 通訊端接收緩衝區: https://man7.org/linux/man-pages/man7/socket.7.html
- [5] Red Hat UDP 丟包調查: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/network_troubleshooting_and_performance_tuning/tuning-udp-connections
- [6] Anza Turbine 區塊傳播: https://docs.anza.xyz/consensus/turbine-block-propagation/
- [7] Solana Foundation,高效能驗證節點硬體: https://solana.com/news/high-performance-solana-validators-run-on-bare-metal-hardware
- [8] Linux CPU 閒置時間管理: https://docs.kernel.org/admin-guide/pm/cpuidle.html









