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