An update on Redis Streams development

Salvatore Sanfilippo

Redis Streams 開發進度更新

原文由 Salvatore Sanfilippo 發布,訂閱此部落格

最近看到不少使用者在問 Streams 的近況如何,什麼時候能用於正式環境,以及整體的時程與規劃。這篇文章就來稍微說明一下接下來的安排。

首先,目前 Streams 是我最優先的工作:我想盡快完成這項我認為對 Redis 社群非常有用的功能,然後馬上投入 Redis Cluster 的改進計畫。其實 Cluster 相關的工作已經開始了,我的同事 Fabio Nicotra 正在把 Cluster 管理工具 redis-trib 移植到大家熟悉的老牌 redis-cli 裡。這一步需要把程式碼從 Ruby 轉寫成 C。同時,幾週前我已經完成了 Streams 核心的撰寫,並刪除了「streams」功能分支,將所有內容合併到「unstable」分支了。

之後我又反覆檢視了好幾次 consumer groups 的規格。幾週前我終於對結果感到滿意,於是開始實作這份規格:https://gist.github.com/antirez/68e67f3251d10f026861be2d0fe0d2f4。請注意,指令名稱變動不小……現在的 API 比較像是這樣:https://gist.github.com/antirez/4e7049ce4fce4aa61bf0cfbc3672e64d

目前進度大約到一半,在寫完最初的 500 行程式碼後,我今天已經可以看到客戶端透過 XREADGROUP 指令在讀取舊訊息時,只會看到屬於自己的歷史紀錄。這是實作過程中的一個里程碑。另外 XACK 現在也可以用了。基本上,支援 streams consumer groups 的所有資料結構都已經能運作,但我還需要完成所有指令的實作、支援 XREADGROUP 的阻塞操作等功能,並處理 replication、RDB 與 AOF 的持久化。大約再一個月左右應該就能全部完成。

因為 consumer groups 的關係,Streams 的 RDB 格式將會比目前「unstable」所使用的有很大的變動。而既然勢必要打破相容性,我們也會順便讓 RDB 檔案能夠持久化 key 最後存取時間的資訊,這樣透過 RDB 進行的 Redis 重啟(或是 slave 載入)就能取得所需的全部資訊,以繼續正確地執行 key 的淘汰。現在這些資訊反而會遺失。由於這次 RDB 的大幅更動,計畫也稍微調整了:Streams 將不會出現在 Redis 4.0,而是會在 Redis 5.0 推出,不過 5.0 大約兩個月後就會以 GA 版本釋出:這是可行的,因為 5.0 基本上就是 4.0 加上 streams,除了 RDB 的變動外,不會包含其他重大功能……

所以 TLDR:我現在幾乎是全職在處理 Streams,除了撥一點時間處理比較關鍵的 PR / Issue 之外;兩個月後如果你升級到 Redis 5.0,就能用上可直接上正式環境、已完整實作 consumer groups 的 streams。文件方面也還有不少工作要做,一旦進入 RC1(大約一個月後),我就會撰寫指令手冊以及一篇詳盡的 streams 介紹,讓大家在候選發行版測試階段有文件可以參考。

希望這樣有把 Streams 的現況說清楚。期待很快就能帶著 Redis 5.0 再見! :-)

本文章由 muse-spark-1.2-contributor 進行翻譯

留言