見出し画像

RedisRaftとRaftについて

これはSupership株式会社の 「データソリューションスタジオ 開発2グループ」における社内勉強会の発表資料を外部公開向けに再編したものになります.

アジェンダ

・RedisRaftとは
・RedisClusterと比較したときに
 ・なにがすごいのか
 ・なにが犠牲になるのか
・Redis Clusterとのレイテンシーの比較実験
・Raft Consensus Algorithmとは
 ・どこでつかわれているのか?
 ・どのように動くのか
・おわりに
・参考文献

RedisRaftとは

2020年6月23日にRedisの開発元であるRedisLabsがRaft Consensus Algorithmを用いて(RedisClusterのように)分散処理を可能とするRedisモジュールが公開されました。

今回はこのRedisRaftについてどのような特徴を持つかを踏まえて有効そうなワークロードについて考えていきます。

以下にDockerComposeで検証可能なリポジトリを作成したので、Cloneして、シェルを叩くだけで検証可能です。

Redis Clusterと比較したときになにがすごいのか

CAP定理でCとPを満たす
・Strong Consistency(強一貫性)
 ・書いた値が必ず読める一貫性レベル
 ・Redis Clusterは結果整合性

・Partition-tolerance(分断耐性)
 ・分散システムの一部でメッセージが失われたり、一部のノードに障害が発生しても、分散システムは引き続き動作する

Redis Clusterと比較したときになにが犠牲になるのか
すべてのクライアントからの問い合わせはリーダーを経由する
レイテンシーが犠牲になる
 ・RedisClusterはKeyから担当ノードが求めることが可能
  ・従って、(Proxyやリダイレクトせず)担当ノードへ直接問い合わせが可能
 ・更新処理で過半数の合意が取れるまで時間がかかる
スケーラビリティが犠牲になる
 ・すべてをリーダーを経由するため,クラスタ構成よりスケールしにくい
 ・ちなみに Google Spanner のクローンOSSは MultiRaftという複数のRaftコンセンサスグループを用いてスケールさせている

レイテンシーの比較実験

memtier_benchmarkを用いたベンチマークの実験を行います。


物理サーバー上でRedisRaftとRedisClusterが要求する最小ノード数で応答速度と単位時間あたりのスループットを検証します。

これにより前述のレイテンシーの仮説について検証します。

実験結果 

RedisRaft
実行コマンド:  memtier_benchmark -p 5001 -n 1000 -c 10

4         Threads
10        Connections per thread
1000      Requests per client


ALL STATS
=========================================================================
Type         Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
-------------------------------------------------------------------------
Sets           19.05          ---          ---    746.59400         1.47
Gets          190.34         0.00       190.34    134.20700         7.42
Waits           0.00          ---          ---      0.00000          ---
Totals        209.39         0.00       190.34    189.93400         8.88

Redis Cluster

4         Threads
10        Connections per thread
1000      Requests per client


ALL STATS
===================================================================================================
Type         Ops/sec     Hits/sec   Misses/sec    MOVED/sec      ASK/sec      Latency       KB/sec
---------------------------------------------------------------------------------------------------
Sets        13772.33          ---          ---         0.00         0.00      1.65700      1061.38
Gets       137571.98    131495.51      6076.47         0.00         0.00      1.59600      9726.17
Waits           0.00          ---          ---          ---          ---      0.00000          ---
Totals     151344.32    131495.51      6076.47         0.00         0.00      1.60200     10787.55

ベンチマーク環境

サーバー(物理サーバ)

CPU: Xeon E5-2620 2.0GHz * 2 Total 48 Core
MEM: DDR3-ECC 48GB

OS: 
PRETTY_NAME="Ubuntu 18.04.5 LTS"
VERSION_ID="18.04"
RedisCluster
・マスター3台
・セカンダリー3台

以下のdocker-composeを用いて構築


RedisRaft
・3ノード

以下のdocker-composeを用いて構築

Raft Consensus Algorithmとは

・分散合意アルゴリズムの一つ
・先行研究の Paxos を理解しやすく具体的な内容にしたもの
 ・Paxos はGoogle Cloud Spanner で使われているもの

どこでつかわれているのか?

・etcd(Kubernetes)
・YugaByteDB
・CockroachDB
・TiKV
・TiDB
・RethinkDB

どのように動くのか

この項目は発表資料作成の時間が足りずまとめることができませんでした。
参考文献からあたっていただくようお願いします。

おわりに

仮説の通り、RedisRaftではレイテンシーが犠牲になる代わりに一貫性を維持しているため、従来のRedisを使うユースケースとは違うところで有用そうです。

書き込みは全ノードを待つ都合上、非常にレイテンシーが悪化するため、不整合が許容できなく、頻繁な更新が発生しないマスターデータなどに有用そうです。

また余談ですが、KafkaにおいてもRaftを採用することでZookeeperレスに進むようですので、今後Raft Consensus Algorithmは様々な分散システムの内部で使用さていくことでしょう。


参考文献

論文
In Search of an Understandable Consensus Algorithm
Consistency Tradeoffs in Modern Distributed Database System Design: CAP is Only Part of the Story

Web
The Raft Consensus Algorithm
分散合意アルゴリズム Raft を理解する
今度こそ絶対あなたに理解させるPaxos

この記事が気に入ったらサポートをしてみませんか?