Redis消息發布訂閱的穩定性驗證結論


背景

2019年的某個時候, 筆者負責解決公司系統內的基於Redis pubsub + Websocket消息推送的功能穩定性

過程

NO Detail
1. 初始情況: 筆者發現手寫的Jedis客戶端容易出現 斷連, 每個小時至少發生一次, 時間不定. 沒有進行多少次改參數的嘗試.(因為已經打算尋找中間件解決方案).
2. 第一次改進: 后來考察了Spring Data Redis組件, 非常容易集成, 配置服務器地址 端口 密碼, 數據庫即可, 簡單就是美, 不需要研究那些超時參數 testOnBorrow, 這些中間件的編寫者都實踐好的. 結果就是穩定運行了一年多. 再也沒人說收不到消息推送.
3. 第二次改進: 2020年6月份(當前寫文時間), 因為業務的關系, 又來處理消息推送相關邏輯, 這時不能是原來的水平, 於是抽空看了一下 Spring Data Redis 現在版本很新, 內置有Lettuce驅動, 於是實驗了一下 Lettuce, 寫一個小SpringBoot應用 放一個晚上. 經過初步的觀察, Lettuce的性能更強, 更加關注連接的穩定性, ConnectionWatchdog會自動重連(Jedis Connection Factory的重連是Spring Data Redis提供的, 重連頻率為1小時 也有重連delay可以修改), 而且非常迅速, 因此, 遂打算將Jedis驅動換成 Lettuce驅動. 經過嘗試 相同的Redis實例, Lettuce的重連頻率時15分鍾, 這個由什么決定暫不清楚

結論

這個問題不大不小, 對於消息推送的穩定性因素 有很多:

  1. 服務端自動斷開, 可能設置了最大會話長度等等, 例如 1小時.
  2. 客戶端網絡環境問題
  3. 根本不是參數問題

沒必要深究

解決方案

  1. Spring Data Redis 足夠滿足需求
  2. 或許可以選擇Lettuce作為 Spring Data Redis的底層驅動
  3. 對這個穩定性要求更高的 可以用 Kafka/Rabbit MQ等 其他專門做發布訂閱的消息隊列中間件.
  4. 甚至可以不用websocket, 直接接口 poll.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM