コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

ざっくり知る「結果整合性(Eventual Consistency)」

「このブログはほぼ毎日更新しているという体裁だが、実際はリアルタイムに更新できていない、ある意味毎日更新という結果整合性だけが伴っている。」という話なんだけど、結果整合性ってなんだっけ、というのまっさらな話からざっくり理解するためのメモ

言葉の意味

分散データベースの文脈で使われることが多く、データの更新の一貫性を即時担保するものではなく、更新後に一定時間経過していれば正しく更新データを取得できるという整合性の考え方

英語を直訳すると『最終的な一貫性』となり、和訳では『結果整合性』という訳が当てられ、2つの意味を統合すると直感的にわかりすい。

解説

言葉としては分散システムで使われる事が多い。分散システムでは同一のデータを複数のコンピュータやシステムに分散して配置し、データそのものも複製して配置する。単一のシステムであればDBも単一なので問題ないが、分散化することによりDBも複製して配置することになるため2つに複製した場合、2つの複製を同期とる必要がある。イメージとしては下記。

f:id:shinkufencer:20181231103058p:plain
分散DBにおける値がズレるイメージ図

この同期を取るタイミングが様々なパターンがあるが、即時ではなく、時間経過があって何かしらの状態で結果として同じ状態になる状態のことを「結果整合性が取れる」と呼ぶ。結果整合性のとり方はいろいろあるが、3分毎に複数のDBを同期するなども結果整合性を取るという意味では1つのアプローチと言えるはず。

もっと詳しく知りたい人は参考リンクの内容を参照のこと。

参考リンク

Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems

Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems