分散か集中か。
コンピューティングシステムは、汎用コンピューターの開発からクライアントサーバーシステムの登場、クラウドコンピューティングの実用化と、その歴史において分散と集中を繰り返してきました。
IoTや分散クラウド、エッジコンピューティング、フォグコンピューティングなどの進展により再び分散の波が訪れつつあるといわれる2024年。
分散システムのメリット・デメリットや構築・運用の指針となる「CAP定理」などについて押さえましょう。
まずは分散システムの集中システムと比較してのメリット・デメリットについて簡単に振り返りましょう。
分散システムの主なメリットとしては、下記のようなポイントが挙げられます。
一方、分散システムの主なデメリットは以下の通り。
また、オンライン分散システムではネットワーク自体の遅延が可用性に影響する可能性があります。
分散システムにはオンラインとオフラインの2パターンあり、物理的距離が近いオフライン分散システムはほとんどの場合、分散処理により計算能力を高めることを目的に構築されます。
一方、オンライン分散システムは上記の通りネットワーク障害の影響を受ける可能性が高まる代わりに、災害などにより物理的にシステムに問題が発生した場合のBCP対策や、エッジコンピューティングの実現を可能にします。
本記事では特にオンライン分散システムの構築・運用を想定して解説を行ってまいります。
分散システムの構築にあたって念頭に置きたいのが、2000年にコンピューターサイエンティストのエリック・ブリュワー(Eric Brewer)氏が提唱した「CAP定理」です。
CAP定理(CAP Theorem)は、分散コンピューティングにおける基本的な原則の一つで、システムが一貫性(Consistency)、可用性(Availability)、および分断耐性(Partition Tolerance)の三つの特性を同時に達成できないことを示します。
それぞれの概要は、以下の通りです。
一貫性 (Consistency):システム内のノードすべてが同じデータを共有できる性質です。一貫性を持つシステムでは、データの変更がすぐにすべてのノードに反映され、ユーザーは常に最新のデータを参照できます。
可用性 (Availability)::システムが常にユーザーのリクエストに応答可能である性質です。可用性が高いシステムでは、一つのノードに障害が発生しても、ほかのノードが対応してくれるためシステム運用の連続性が保たれます。
分断耐性(Partition Tolerance):ノード間の通信に障害が発生しても、分散システムが正常に動作できるという性質です。分散システムの課題であるネットワークの障害や遅延が発生した場合にも、可用性が保たれることを意味します。
分散システムの設計にあたっては、C、A、Pのそれぞれに優先順位を与え、適切なバランスを見つけることが求められます。
ここで重要なのがこの中から二つを選ぶのではなく、三つのバランスを考えるということです。一貫性はデータが複製して配置されているという分散システムの特性に、可用性は単一障害点がないという分散システムのメリットに、分断体制はネットワークの障害のリスクという分散システムのデメリットに基づいており、CAP定理はそれらを分類した上で対策する、という視点をシステム設計者に与えてくれます。
あらゆる問題や障害を想定し備えるための指針として、CAP定理は効果を発揮するのです。
分散システムの運用にあたっては、そもそもノード間が分断されている関係上、通常分断耐性(P)は犠牲にすることができません。そのため、一貫性と可用性の間で優先順位を調節するのが基本的な分散システム構築・運用の形となります。
例えば、クラウドサービスの運用で採用されることの多いBASE特性は“Basically Available, Soft state, Eventually consistent(基本的に利用可能、柔軟な状態、結果として一貫性が保たれる)”という三つの特性で構成されており、可用性を優先してサービスの安定性を確保し、データが同期されるまでに時間的猶予を設けることを許容することで、CAPのバランスを保っています。
一方、社内の分散データベースなど一貫性が求められるシステムにおいては、より厳密なACID特性(“Atomicity, Consistency, Isolation, Durability”:原子性・一貫性・分離性・永続性)が求められるでしょう。
そのため、レスポンスの遅延など可用性の犠牲が想定されます。
このように分散システムの構築にあたって設定した優先順位が、その後の運営・管理の戦略策定にもつながることになります。
分散システムの構築・運用にあたって押さえたいメリット・デメリットや「CAP定理」、BASE特性・ACID特性などについて解説してまいりました。
分散システムの特性と対象の業務を照らし合わせた上で、優先順位付けをするのが基本の考え方です。その点について検討することが、セキュリティやコストについて考えるベースともなるでしょう。