結果整合性

結果整合性（）とは、分散コンピューティングにおいて高可用性を実現するために用いられる整合性モデル（一貫性モデル）であり、あるデータ項目に新たな更新が行われなかった場合、最終的に（結果的に）その項目へのすべてのアクセスが最後に更新された値を返すことを非公式に保証するものである。結果整合性は楽観的レプリケーションとも呼ばれ、分散システムに広く導入されており、その起源は初期のモバイルコンピューティングプロジェクトにある。結果一貫性を達成したシステムは、しばしば「収束した」または「レプリカ収束を達成した」と言われる。結果一貫性は弱い保証であり、線形性のようなより強いモデルのほとんどは、最終的に一貫性を持つことは自明だが、単に結果一貫性を持つシステムは、通常、これらのより強い制約を満たさない。
結果一貫性のあるサービスは、伝統的なACID（Atomicity, Consistency, Isolation, Durability）保証とは対照的に、BASE（Basically Available, Soft state, Eventual consistency）セマンティクスを提供するものとして分類されることが多い。化学ではBASEはACIDの反対語であり、頭文字を覚えるのに役立つ。同資料によると、BASEの各用語の大まかな定義は以下の通りである。
結果一貫性は、分散ソフトウェアアプリケーションの複雑さを増大させると批判されることがある。これは結果一貫性が純粋にライブネス保証（読み込んだデータが最終的に同じ値を返す）であり、安全性を保証していないことが一因である。結果一貫性を持つシステムは、収束する前に任意の値を返す可能性がある。
結果整合性はACID特性と同様にデータベースにおける一貫性モデルであるBASE特性における最も重要な考え方の一つである。結果整合性（Eventual Consistency）は、既存のRDBMSにおける悲観的ロックのような、厳密な一貫性を要求する考え方とは全く相反する考え方である。例えば、インターネットのDNS、NTPプロトコル、GPSなどのように、即座にデータが反映されることを前提としていないが、問題なく成立している事例は数多く存在する。
このように、結果整合性（Eventual Consistency）は、結果的に一貫性が保たれればよいという考え方に基づいている。NoSQLに代表されるデータストアでは、この考え方を取り入れることで、容易にスケールアウトを実現できるようにしている。結果整合性（Eventual Consistency）の実現には、P2Pのアーキテクチャーを導入した、様々な分散相互排他アルゴリズムが採用されている。
コンフリクト(不一致)の解決.
レプリカを確実に収束させるためには、システムは分散したデータの複数のコピー間の差異を調整する必要がある。これには2つの部分がある。
リコンシリエーションに最も適したアプローチは、アプリケーションによって異なる。一般的には「最後に書いた者が勝つ」という方式や、ユーザーが指定したコンフリクトハンドラーを起動する方法がある。更新の並行性を検出するために、タイムスタンプやベクタークロックがよく使われる。「最後に書いた者が勝つ」が受け入れられない状況では「最初に書いた者が勝つ」を使うことがある。
同時（並行）書き込みのリコンシリエーションは、次の読み取りの前に行われなければならず、次のような異なるタイミングでスケジューリングすることができる。
強い結果一貫性.
結果整合性が単なるライブネス保証（更新はいずれ観測される）であるのに対し、強い結果整合性（SEC）は、同じ（順序付けられていない）更新セットを受け取った2つのノードが同じ状態になるという安全保証を追加する。さらにシステムが単調であれば、アプリケーションがロールバックすることはない。SECを確保するための一般的なアプローチとして、コンフリクトフリーの複製されたデータ型がある。