Redis 3.2の計画
パリから戻ってきました。DotScale 2015はとても興味深いカンファレンスでした。出発前は、unstableブランチでSentinelに取り組んでいました。主な内容は接続の共有です。簡単に言えば、少数のSentinelで多数のマスターを監視できるようにし、スケールさせる機能です。出発前、そして戻ってきた今、Redis 3.2の基礎となる機能群を「確定」させようとしてきました。これから数週間はこれらの機能の開発に集中する予定なので、できるだけ早く皆さんにリストを共有しておく価値があると思いました。
ジオハッシュAPI:この作業は、もともとRedisのフォークだったArdb(https://github.com/yinqiwen/ardb)から始まり、その後Matt Stancliff(https://matt.sh/redis-geo)によって取り出され、改良されてRedisに移植されたものです。オープンソースってすごいでしょう?現在はソート済みセットの実装の一部を重複して持っているため、コードのリファクタリングが必要です。APIについてもいくつか変更する可能性があります。まだはっきりとは決めていませんが、直すべきところがあれば直します。要するに、これは素晴らしい機能です。MattがもうRedisに貢献していない今、この成果が失われる大きなリスクがあります。そこで、Redis 3.2向けの最初の作業として、リファクタリングし、レビューし、マージすることにしました。Redis APIへの追加として、とてもエキサイティングなものだと思います。
ブルームフィルター:3.2にはブルームフィルターを導入します。HyperLogLogのようにString型の機能として実装するかどうかはまだ決めていませんが、新しい特殊な型にする可能性のほうが高いでしょう。新しい型のほうが、複雑な意味論を提供しやすいからです。ブルームフィルターについては多くの設計案がありますが、精度と使用領域のトレードオフをAPIから制御できるようにしたいと考えています。ビット数や使用するハッシュ関数の数を指定するような低レベルな方法ではなく、もう少し高レベルな方法になるかもしれません。もう一つ、このAPIにぜひ加えたいのは、ブルームフィルターが自動的に汚染を除去する機能です(複数のフィルターをローテーションさせるなどの方法になるでしょう)。利用可能な文献をすべて読み、どうするかを決めますが、この機能は3.2に入ります。
メモリ関連のPR:RedisLabsから、Redisのメモリ使用量を改善する重要なPRが2件あります。どちらもマージします。
メモリの調査コマンド:メモリについての情報を提供するコマンドです。LATENCYコマンドのメモリ使用量版のようなものです。メモリがどこで消費されているか、過去のピーク時のメモリ使用量が原因でRSSだけが高くなっているのか、クライアントの出力バッファーがどれだけメモリを使っているのかについてヒントを提供します。必要に応じて、メモリを節約するためにハッシュテーブルのサイズを変更する機能なども含みます。
Redis Clusterのマルチデータセンター対応の一部:おそらく、Clusterのレプリカを「静的」に設定するオプションになるでしょう。これにより、マスターに障害が発生した際の昇格には参加しなくなります。この方法なら、CLUSTER FAILOVER TAKEOVERを使って少数側のパーティションにあるすべてのレプリカを昇格させることが可能になります。
新しいList型の操作:LMERGEのようなO(1)のリスト操作をいくつか追加します。また、通常はNが非常に小さいため、ほとんどの場合O(1)の操作として使われる、あるリストから別のリストへN個の要素を移動するようなO(N)の操作も追加します。
AOFの安全性機能:https://github.com/antirez/redis/pull/2574
AOFの書き換えで、オプションとしてRDBプリアンブルを使えるようにします。これにより、AOFの書き換えと、起動時にコンテンツを再読み込みする処理が高速になります。
SPOP COUNTオプション(すでに実装済みです。3.2がこれを含む最初の安定版になります)
Redis Clusterのredis-trib rebalanceコマンド。ノード間のメモリ使用量がより均等になるよう、キーを自動的に再ハッシュします。
もともと3.2向けに計画していたもののうち、安全に導入できるものはいくつか3.0に移しました。最近の例では、NXやXXなどのオプションに対応したZADDがあります。一般的には、既存の型に関するコマンドがさらにいくつかRedis 3.2に追加される可能性があります。基本的には、しばらくの間Redisの運用面により重点を置いてきたので、API側にもっと多くを求めていた人たちを喜ばせるためのバージョンです。
リリース時期についてですが、作業は月曜日に始めます。最初のRCを9月末までにリリースできればと思っています。RCになった後のRCから安定版への移行時期は、あらかじめ決まっていません。重大なバグが報告されるまでの期間によって決まります。数週間にわたって誰も新たな深刻な問題に気づかなければ、安定版へ移行します。
今後、上に挙げた項目について個別に新しいブログ記事を書きます。ジオハッシュ機能や、ブルームフィルターの最終的な実装とAPIの説明などについてです。
それまでは、Redis 3.0を楽しんでください!
記事をランダムに読む