![]()
![]()
![]()
nats-server v2.12.3 版本已于 2025 年 12 月 17 日正式發布。本次版本在保持與 2.11.x 系列兼容的前提下,對底層依賴、JetStream、Raft 共識機制、WebSocket 以及 MQTT 功能進行了大量優化和問題修復,是一次以穩定性、性能和健壯性為核心的維護型升級。以下內容基于官方更新日志,對 v2.12.3 的改動進行詳細說明。
一、版本與基礎環境更新
1. Go 版本
本次發布將構建所使用的 Go 版本升級至 1.25.5,為整體性能與運行時穩定性提供了更加堅實的基礎。2. 依賴庫升級
多個關鍵依賴完成升級,包括:
? go-tpm 升級至 v0.9.7
? nkeys 升級至 v0.4.12
? golang.org/x/crypto 分別升級至 v0.45.0 和 v0.46.0
? golang.org/x/sys 升級至 v0.39.0
? klauspost/compress 升級至 v1.18.2
? antithesis-sdk-go 升級至 v0.5.0 的默認 no-op 版本
這些依賴更新主要集中在安全性、壓縮性能以及系統調用兼容性方面。
二、新增功能
1. WebSocket 配置增強
在 WebSocket 配置塊中新增了專用的心跳參數 ping_internal。該配置允許針對 WebSocket 連接單獨設置 Ping 發送間隔,有助于更精確地控制連接保活策略,適合高并發或弱網絡環境下使用。
1. 更快的源序列掃描
在設置帶有 subject 過濾條件的 source 時,服務器對最后一條源消息序列的掃描速度顯著提升,減少了流初始化和恢復過程中的等待時間。2. Meta Layer 啟動行為優化
在服務器啟動時,Meta Layer 現在會對恢復操作進行分階段處理并進行去重,而不再出現先快速應用再撤銷沖突分配的情況,從而降低啟動階段的不穩定風險。3. Interest-based Stream 性能提升
當 interest-based stream 存在較大興趣空洞時,消費者興趣檢查邏輯得到了顯著優化,大幅提高性能。
1. 保留消息跨賬號支持增強
當保留消息來源于不同賬號并且帶有 subject 轉換時,現在可以正常工作,解決了此前在復雜賬號結構下的使用限制。
1. WebSocket 解壓緩沖限制
修復了 WebSocket 連接在進行解壓時未正確限制緩沖區大小的問題,有效避免潛在的內存風險。
這是本次版本中修復內容最為集中的部分,主要集中在一致性、數據安全和集群穩定性上:
1. 修復因網關連接中 ACK 回復 subject 變換無效而觸發的協議錯誤問題。
2. Meta Layer 僅在達到法定人數后才會響應 peer remove 請求。
3. 非終結型全通配符的非法 subject 過濾器不再產生異常匹配結果。
4. 修復集群模式下創建 Stream 時可能產生的數據競爭問題。
5. Raft 不再允許并發執行多個成員變更操作。
6. 修復在處理缺失節點或分配信息的快照時可能觸發的 panic。
7. 在整塊消息被 purge 時,subject 跟蹤信息和定時消息能夠正確更新。
8. Raft 在計算法定人數時不再統計已被移除節點的響應。
9. 修復 AsyncFlush 在進程暫停后可能導致 filestore 丟失寫入的問題。
10. Filestore 在更新統計信息前會優先處理磁盤上的消息移除,提高錯誤處理可靠性。
11. Raft 法定人數計數邏輯重構,僅在 Leader 仍屬于成員時才隱式計入確認。
12. 在處理 peer remove 時立即寫入 peer 狀態,避免重啟后被移除節點意外重新出現。
13. DiscardNewPerSubject 保留策略現在由 Leader 在提議階段統一執行,減少副本間狀態不一致的可能。
14. Raft 不再允許移除僅剩的最后一個節點。
15. 修復 Stream 健康檢查中的數據競爭問題。
16. 在 compact 或 purge 幾乎為空的 Stream 到序列 2 時,能夠正確寫入 tombstone 用于序列恢復。
17. 修復在同時使用 skip sequence 與 compact 時可能導致塊偏移錯誤并引發數據損壞的問題。
18. 當 compact 回收空間超過一半時,采用原子寫入以避免進程被終止時丟失消息。
19. Filestore 查詢在遇到緩存錯誤時會正確使緩存失效。
20. 改進消息塊加載過程中的錯誤處理邏輯。
21. 新增 Raft 成員操作不再導致多數派被分裂。
22. Filestore compaction 不再出現 idx 緩存缺失錯誤,并能正確調整消息塊的高低序列及刪除映射。
23. 修復在 peer remove 與領導權轉移期間,因心跳導致已移除節點被重新接納的問題。
24. 修復在 Stream 快照期間可能發生的潛在數據不同步問題。
1. MQTT 客戶端的最大 payload 大小現在能夠被正確限制。
2. 修復重新加載配置時,在無權限訪問保留消息的情況下可能觸發的 panic。
3. 修復在跨非 JetStream 啟用服務器時,JetStream API 請求的賬號映射問題。
4. QoS0 消息在跨賬號 import/export 并帶有 subject 映射時能夠正確處理。
5. 修復服務器重啟后因最后序列檢查導致加載保留消息失敗的問題。
6. 修復集群環境下可能導致保留消息損壞的缺陷。
7. 對 $MQTT. subscriptions 的權限處理進行了優化,默認隱式允許,僅 deny ACL 仍可進行限制。
8. 修復服務器重啟后 QoS2 消息無法恢復獲取的問題。
代碼地址:github.com/nats-io/nats-server
nats v2.12.3 是一次以穩定性、性能和一致性為核心目標的重要更新。JetStream 在存儲安全、恢復流程和高并發場景下的表現得到顯著增強;Raft 在成員變更和法定人數計算方面更加嚴謹;MQTT 功能在集群和跨賬號場景下的可靠性進一步提升。對于正在使用 2.11.x 或 2.12.x 早期版本的用戶,該版本非常值得在充分驗證后進行升級。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.