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