前回のブログでは有名なCAP定理を紹介しました(まだ読んでいなければ、この定理を読み始める前にぜひお読みください)。これは、整合性、可用性、分割許容度という三つの資質のいずれかを放棄しなければならないという三つの要素を含みます。これら三つすべてが現代の分散システムの望ましい特徴であるため、どちらを手放すかは複雑な分散システムの設計者にとって最も重要かつ繊細な決断の一つとなっています。CAP定理はコンピュータサイエンスで広く知られていますが、その拡張であるPACELC定理はあまり注目されていません。今日は、長らく待たれていたPACELC定理にスポットライトを当てます。

まずはPACELCの定理が述べていることから始めましょう。PACELCの定理を「PAC」と「ELC」に分けることができます。「PAC」とは、ネットワークの「パーティション」が存在する場合、分散システムは「可用性」と「一貫性」のどちらかを選ばなければならないことを意味します。この部分はCAP定理と同等ですが、常に「分割許容」を優先し考慮することが前提とされています。「ELC」はPACELCの定理がもたらした新しいアイデアです。「E」、「L」、「C」はそれぞれ「else」「latency」「consistency」の略です。「ELC」はネットワークパーティション(「else」)がない場合、分散システムは「遅延」と「整合性」の間でトレードオフを行う必要があると述べています。
前回のブログでCAP定理をすでに扱ったので、今回は「ELC」の部分に注目しましょう。レイテンシと一貫性の定義は何ですか?
レイテンシ(または低レイテンシ)
オックスフォード言語学はレイテンシを「データ転送の命令の後にデータ転送が始まるまでの遅延」と定義しています。「L」がレイテンシを意味すると言うのは正確ではありません。なぜなら、通常、コンピューティングシステムでは遅延を最小限に抑えて操作を迅速化しようとしているからです。分散システムで求められる「L」を重視する特性にするために、私はそれを「低レイテンシ」と考えたいと思います。
一貫性
「ELC」の整合性はCAP定理と同じです。分散システムが整合的であれば、すべての読み取りリクエストは最新の書き込みまたはエラーを受け取ります。言い換えれば、整合性があれば、どのノードに読み取りリクエストを行っても、常に分散システムに書き込まれた最新のデータを受け取ります。最新のデータが現在利用できない場合はエラーが発生します。
ここで明らかな疑問は、ネットワークパーティションがないのになぜ低遅延と一貫性を持てないのかということです。この質問に簡単な例で答えます。

ノードAとノードBの2つのノードからなる分散システムがあると仮定します。ネットワークパーティションがない場合、この2つのノードはメッセージを通じて簡単に通信できます。ノードAは最新の書き込みを受信したばかりです。同時に、ノードBはその特定の書き込みを求める読み取りリクエストを受け取りました。分散システムが整合性を追求するなら、ノードBは読み取り要求に対して最新の書き込みを送信しなければなりません。したがって、ノードBはノードAから最新のデータを受け取るまで、古いデータを更新し読み取り要求に応答するのを待たなければなりません。この遅延は、分散システム内で実質的にレイテンシを増加させます。
両方の良いところを両立させることは不可能だと確信した今、どの状況でどちらを選ぶべきかという疑問が生じます。前回のブログで述べたように、データの正確性とタイムリーが極めて重要な場合は、低遅延よりも一貫性を選ぶのが目安です。常に一貫性を追求する優れた例としては、フィンテックアプリケーションや銀行ATMなどがあります。データの正確さやタイムリーさがそれほど重要でなければ、低遅延を優先すべきです。ソーシャルメディアプラットフォームやゲームは、低遅延を目指すアプリケーションの良い例です。
まとめると、このブログでPACELC定理を簡単に紹介しました。PACELC定理がCAP定理をどのように拡張し、レイテンシ(または低レイテンシ)と整合性の定義について触れました。次に、ネットワークパーティションを持たない分散システムでは、なぜ低遅延と一貫性を同時に達成できないのかを示しました。最後に、整合性を選ぶべき時と低レイテンシを選ぶべき時についてのヒントをいくつか提供しました。この記事がPACELC定理についての洞察と、それをシステム設計にどう応用するかの参考になれば幸いです。