0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Cassandra】Cassandraの整合性レベル(Consistency Level)とは?ALLが最強ではない理由

0
Posted at

1.はじめに

Apache Cassandraは、高い可用性とスケーラビリティを実現する分散型NoSQLデータベースです。

一方で、分散データベースならではの考え方として、「Consistency Level(整合性レベル)」という仕組みがあります。

私も最初は、

「ALLに設定しておけば、一番安全なのでは?」

と思っていました。

しかし調べてみると、整合性を高くすればするほど、レスポンスや可用性にも影響があり、必ずしもALLが最適というわけではありません

そこで本記事では、

  • Cassandraで整合性レベルが必要になる理由
  • ONE・QUORUM・ALLの違い
  • ALLを選択する際のデメリット

について、図を交えながら解説します。

2.Cassandraをおさらい

まずは、Cassandraがどのようなデータベースなのか簡単に振り返ります。

Apache Cassandraは、

  • 分散型NoSQLデータベース
  • データを複数のノードへ複製して保存
  • ノード障害が発生してもサービスを継続できる

という特徴があります。

例えば3台のノードで構成されている場合、

image.png

同じデータを複数台へ保存することで、高い可用性を実現しています。
image.png

3.なぜ整合性レベルが必要なのか

分散データベースでは、すべてのノードが常に同じ状態とは限りません。

下記のような状態の場合、更新前のデータが返ってきてしまいます。

image.png

このような状況で、

「何台のノードへの読み書きを成功とみなすか」

を決める仕組みが、

Consistency Level(整合性レベル)

です。

4. Consistency Levelの種類

代表的な整合性レベルは次の3つです。

整合性レベル 成功条件
ONE 1台成功すれば成功
QUORUM 過半数のノードが成功すれば成功
ALL すべてのノードが成功すれば成功

それぞれ特徴があります。


①ONE

ONEは、

1台のノードが応答すれば成功

となります。

メリット

  • レスポンスが速い
  • ノード障害に強い

デメリット

更新されていないノードへアクセスすると、

古いデータを取得する可能性があります。

そのため、

速度を最優先したいケースで利用されます。


②QUORUM

QUORUMは、

過半数のノードが成功すれば成功

となります。

例えば、

複製・保存する数が3つの場合、

QUORUM = 2台

になります。

メリット

  • 整合性と性能のバランスが良い
  • 1台障害でも処理を継続できる

そのため、

実際の運用では最もよく利用される整合性レベルです。


③ALL

ALLは、

すべてのノードが成功して初めて成功

となります。

一見すると、

一番安全そう

に思えます。

しかし、実際にはデメリットもあります。

5.ALLのデメリット

① 1台でも障害があると失敗する

例えば3台構成の場合、

Node A:〇
Node B:〇
Node C:×

だった場合、

Node AとNode Bにはデータが保存できています。

しかし、

ALLでは

書き込み失敗

となります。

つまり、

1台でも障害があると全体が失敗扱い

になります。


②レスポンスが遅くなる

ALLでは、

すべてのノードの応答を待つ必要があります。

例えば、

Node A:10ms

Node B:15ms

Node C:300ms

だった場合、

処理時間は

300ms

になります。

遅いノードが1台あるだけで、

全体のレスポンスが悪化してしまいます。


③ メンテナンス中でも失敗しやすい

例えば、

ノード1台を再起動しているだけでも、

ALLでは成功条件を満たせません。

そのため、

運用やメンテナンスの影響を受けやすくなります。

6.QUORUMがよく利用される理由

例えば、

複製・保存するノード数が3つの場合、

QUORUM = 2

になります。

つまり、

Node A:〇
Node B:〇
Node C:×

でも処理は成功します。

また、過半数の場合常に最新データを取得することが可能です。

書き込み(QUORUM)

Node A  ○
Node B  ○
Node C  ×

        ↓

読み取り(QUORUM)

Node A  ○
Node B  ×
Node C  ○

書き込み時と読み取り時で、Node A が共通しています。
このように必ず1台以上のノードが重なるため、最新データを取得できます。

そのため、整合性・性能・可用性のバランスが良く、実運用ではQUORUMが選択されるケースが多くあります。

7.結局どれを選択すべきか?

用途によって選択する整合性レベルは異なります。

用途 おすすめ
高速なレスポンスを優先 ONE
整合性と性能のバランスを重視 QUORUM
全ノードへの反映を保証したい ALL

重要なのは、

「ALLだから最強」

ではないということです。

整合性を高めれば、

レスポンスや可用性は低下します。

逆に、

性能を重視すると、

古いデータを取得できてしまう可能性があります。

8.まとめ

Consistency Levelは、

何台のノードへの読み書きを成功とみなすか

を決める仕組みです。

  • ONE:高速だが古いデータを取得する可能性がある
  • QUORUM:整合性・性能・可用性のバランスが良い
  • ALL:整合性は高いが、可用性やレスポンスが低下する

Cassandraでは、「とにかく整合性を高くする」のではなく、

システムの要件に合わせて整合性レベルを選択すること

が重要です。

整合性・可用性・性能のトレードオフを理解することで、Cassandraの設計思想がより理解しやすくなるのではないでしょうか。

最後まで読んでいただき、ありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?