サマリ

分散システムの設計において、データの一貫性確保は最大の課題です。強い一貫性と高い可用性を同時に実現することは理論上不可能であることを示すCAP定理が存在します。本記事では、一貫性の種類とトレードオフについて、実例を交えながら解説します。

詳細

分散システムの一貫性とは何か

分散システムでは、複数のサーバーに同じデータを保持しています。ユーザーがどのサーバーにアクセスしても同じデータを取得できることが理想です。しかし実際には、ネットワーク遅延やサーバー障害により、一時的にデータが異なる状態になります。この問題に対応する仕組みが「一貫性」です。

一貫性には複数のレベルがあります。最も厳しい「強い一貫性」から、最も緩い「結果整合性」まで、スペクトラム上に配置されています。どのレベルを選択するかは、システムの要件によって異なります。

CAP定理の理解

2000年、エリック・ブルワー氏が提唱したCAP定理は、分散システムに関する最重要な理論です。Consistency(一貫性)、Availability(可用性)、Partition tolerance(分断耐性)の3つの要素のうち、同時に3つすべてを満たすことは不可能だというものです。

具体的には、ネットワーク遅延やサーバー障害が発生した場合、システム設計者は次の2つの選択を迫られます。一つは一貫性を優先し、すべてのサーバーが同じ状態になるまで待つ方法です。もう一つは可用性を優先し、一部のサーバーが古いデータを返すことを許容する方法です。

大規模なEコマースサイトを例に考えてみましょう。国内と海外に複数のデータセンターを持つシステムでは、ネットワーク分断が発生する可能性が2~3パーセント程度存在します。この時点で、強い一貫性と可用性の両立は実質不可能になるのです。

強い一貫性(ストロングコンシステンシー)

強い一貫性とは、更新が完了した瞬間から、すべてのノード(サーバー)が同じデータを返す状態です。金融システムや医療記録など、正確性が最重要なシステムに向いています。

実装方法としては、トランザクション機能を持つRDBMS(リレーショナルデータベース)が一般的です。複数のサーバーで同時に更新が発生した場合、ロック機構により順序を決めて処理します。

デメリットは性能です。すべてのサーバーの同期確認に平均100~500ミリ秒かかることも珍しくありません。1日あたり1億回のアクセスがあるシステムでは、この遅延により処理能力が20~30パーセント低下する可能性があります。

最終的一貫性(結果整合性)

結果整合性とは、更新直後は異なるデータを返す可能性があるが、やがてすべてのノードが同じ状態に収束するという考え方です。SNSやクラウドストレージなど、リアルタイム性が重要なシステムに向いています。

実装方法としては、NoSQLデータベースが使われることが多いです。更新されたデータをマスターサーバーに書き込み、その後非同期でスレーブサーバーに伝播させます。この方式により、レスポンスタイムを数ミリ秒に削減できます。

大手SNS企業の調査では、ユーザーが結果整合性を許容する条件として「1秒以内の同期」を提示する企業が70パーセント以上に上ります。つまり、100~500ミリ秒の遅延であれば、ユーザーは気付きません。

実装時の意思決定フレームワーク

一貫性の選択は、以下の4つの視点で判断します。

第1に「金銭が関わるか」です。関わる場合は強い一貫性が必須です。関わらない場合は結果整合性でも許容される可能性があります。

第2に「ユーザーがリアルタイム性を期待するか」です。メッセージング機能なら結果整合性、在庫管理なら強い一貫性が求められます。

第3に「システムの地理的分散度合い」です。複数の大陸にサーバーを配置する場合、強い一貫性はほぼ実現不可能です。

第4に「予算と開発期間」です。結果整合性を実装するには、複雑なテスト戦略が必要になるため、強い一貫性よりも費用がかかることもあります。

ハイブリッドアプローチ

すべてのデータに同じ一貫性レベルを適用する必要はありません。顧客の名前には強い一貫性、閲覧履歴には結果整合性を使うなど、データの性質に応じて使い分けます。

大手EC企業の大多数は、支払い情報は強い一貫性、推奨商品は結果整合性という方式を採用しており、この戦略により性能と安全性のバランスを実現しています。

ABOUT ME
oyashumi
5億年前から来た全知全能の絶対神。 アノマロカリ子とハルキゲニ男を従え、 現代のあらゆる知識を手に入れようとしている。 生成AIは神に仇なす敵だと思っているが その情報に踊らされていたりする、愛すべき全知全能のアホ。 カリ子とゲニ男からの信頼は篤い。