Redis 3.2 開發計畫
原文由 Salvatore Sanfilippo 于 發布,訂閱此部落格
我剛從巴黎回來,DotScale 2015 是場非常精彩的研討會。出發前我一直在 unstable 分支上處理 Sentinel,主要工作是連線共享。簡單來說,就是讓少數幾個 Sentinel 就能擴展,去監控大量的 master。在出發前以及回來之後,我試著「敲定」一批將成為 Redis 3.2 基礎的功能。接下來幾週我會專注開發這些功能,所以想盡快把這份清單跟大家分享。
Geo hashing API:這項工作源自 Ardb,它原本是 Redis 的一個分支(https://github.com/yinqiwen/ardb),後來由 Matt Stancliff 抽取出來並加以改良,再移植回 Redis(https://matt.sh/redis-geo)。開源就是這麼酷,對吧?目前的程式碼還需要重構,因為有部分邏輯重複了有序集合(sorted set)的實作。我也不排除會對 API 做一些調整,現在還不確定,如果有需要修正的地方,我就會動手改。但重點是:這是個很棒的功能,現在 Matt 已經不再為 Redis 貢獻了,如果不處理,很有可能就會流失這些成果,所以我打算把重構、審查並合併它當作 Redis 3.2 的首要任務。我覺得這會是 Redis API 一個非常令人期待的新增功能。
Bloom filter:3.2 版會有 Bloom filter。我還不確定會像 HyperLogLog 那樣做成 String 型別的功能,還是會做成一個全新的特殊型別,但後者的可能性比較高,因為我想實現一些不單純的語意,做成新型別會比較容易。關於 Bloom filter 我有很多設計想法,但有一點我相當確定:我希望能透過 API 來控制精準度與空間的取捨,也許不是那種底層的、直接指定要使用多少位元和幾個雜湊函式的方式,而是用更高層次、更直觀的方法。另外,我也很希望這個 API 能讓 Bloom filter 具備自動去污染的能力(例如透過多個輪替的過濾器之類的做法)。我會把相關的文獻都讀過再做決定,但這個功能一定會放進 3.2。
記憶體相關的 PR:RedisLabs 有兩個改善 Redis 記憶體用量的重要 PR。這兩個都會合併進來。
記憶體檢視指令:一個用來提供記憶體資訊的指令,就像 LATENCY 指令,但對象是記憶體用量。會提示記憶體都耗在哪裡、是不是只是因為過去的記憶體用量高峰導致 RSS 偏高、提示客戶端輸出緩衝區用了多少記憶體、必要時重新調整雜湊表大小以節省記憶體等等。
Redis Cluster 的多資料中心支援。這大概只會是 Cluster slave 的一個「靜態」選項,讓它們在 master 失效時不會參與晉升。如此一來,透過 CLUSTER FAILOVER TAKEOVER 就能將少數分割區中的所有 slave 一次晉升。
List 型別的新操作:幾個 O(1) 的 list 操作,例如 LMERGE,以及一些 O(N) 的操作,但正常使用時 N 都非常小,所以絕大多數情況下其實也是 O(1),例如一次將 N 個元素從一個 list 搬到另一個 list 的操作。
AOF 安全性功能:https://github.com/antirez/redis/pull/2574
AOF 重寫可選擇使用 RDB 前導區塊,讓 AOF 的重寫以及啟動時重新載入內容的速度更快。
SPOP 的 COUNT 選項(已經實作完成,3.2 將會是第一個包含它的穩定版本)
Redis Cluster 的 redis-trib rebalance 指令,用來自動重新雜湊 key,讓各節點之間的記憶體用量更平均。
原本計畫在 3.2 做的幾項功能,因為足夠安全,已經先移植到 3.0 了。最近的一個例子就是支援 NX 與 XX 等選項的 ZADD。整體來說,Redis 3.2 還是有可能再為現有型別增加一些指令。基本上,這是一個為了讓期待 API 更豐富的人開心的版本,因為有一段時間我們都把重心放在 Redis 在維運層面的改進上。
至於時程,開發工作會在週一開始,我希望能在九月底前完成並釋出第一個 RC。一旦進入 RC,RC 到 Stable 的轉換時間就沒有固定時程,完全取決於重大 bug 被回報的時間。如果連續幾週都沒有人發現嚴重的問題,我們就會釋出穩定版。
後續我會針對上面列出的各個項目分別發文說明,例如 Geo hashing、Bloom filter 的最終實作與 API 設計等等。
在這之前,先好好享受 Redis 3.0 吧!
隨機一篇部落格
留言
登入後參與討論