An update on Redis Streams development

Salvatore Sanfilippo

Redis Streams 開發進度更新

我看到有不少使用者在問我 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 中支援 blocking operations 等,以及處理複寫、RDB 與 AOF 的持久化。大約再一個月左右,應該就能全部就緒。

由於 consumer groups 的關係,Streams 的 RDB 格式將會與目前「unstable」所使用的版本有很大的不同。而既然勢必要打破相容性,我們也會讓 RDB 檔案具備持久化金鑰最後存取資訊的能力,如此一來,涉及 RDB 的 Redis 重啟(或 slave 載入)就能取得所需的所有資訊,以正確的方式繼續執行金鑰的淘汰機制。目前這些資訊反而會遺失。正因為 RDB 有這些大幅度的變動,計畫也稍有調整:Streams 將不會在 Redis 4.0 中出現,而是會在 Redis 5.0 中推出,但 5.0 大約會在兩個月後以 GA 版釋出:這是可行的,因為 5.0 基本上就是 4.0 加上 streams,除了 RDB 的異動外,不會包含其他重大功能……

總結來說:我幾乎全職投入 Streams 的工作,除了撥出一點時間處理重大事項的 PRs / Issues,兩個月後只要你升級到 Redis 5.0,就能擁有已完整實作 consumer groups、可直接用於正式環境的 streams。還有不少文件工作要做,一旦進入 RC1(大約在一個月後),我會同時撰寫指令手冊以及一篇關於 streams 的詳盡介紹,讓大家在候選釋出階段有文件可供測試參考。

希望這能釐清 Streams 的最新狀況。期待很快就能與大家在 Redis 5.0 再見 :-)

原文由 Salvatore Sanfilippo 發布

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