
お店の在庫管理を想像してください。強整合性は、レジで商品が売れたら、すぐに在庫数が減るように、常に最新の情報が全員に見える状態。最終整合性は、レジの更新が少し遅れても、最終的には正しい在庫数になるように、時間が経てば全体が一致する状態です。エンジニア面接では、システムの「正確さ」をどう保つか?が問われます。
面接官:整合性(強整合性・最終整合性)について説明してください。
私:整合性とは、分散システムにおいて、データの一貫性と正確さを保証する性質のことです。言い換えると、複数のデータソース(データベースなど)が存在する場合に、全てのデータが常に矛盾なく一致している状態、あるいは最終的に一致するように保証することを指します。
以前のプロジェクトで、eコマースサイトの在庫管理システムを設計した際、強整合性と最終整合性のどちらを採用するかで議論になりました。当初は、顧客が商品を注文するたびに、データベースを即座に更新する強整合性を検討しました。これは、在庫切れを防ぐ上で非常に重要だと考えたからです。
しかし、商品の注文が集中する時間帯には、データベースへのアクセスが集中し、システムの応答速度が低下するという問題が発生する可能性がありました。そこで、最終的には、システムの応答速度を優先し、最終整合性を採用しました。
具体的には、顧客が注文した際に、データベースへの書き込みを非同期的に行うように変更しました。これにより、注文処理の速度が向上し、顧客体験を損なうことなく、在庫情報を最終的には正確に保つことができました。
現役エンジニアによる深掘り解説
強整合性 (Strong Consistency)
メリット
常に最新の正確なデータにアクセスできるため、データの不整合による問題が発生しにくい。
トランザクション処理が容易になる。
デメリット
システムのパフォーマンスが低下しやすい。特に分散システムでは、全てのノードでデータの同期が必要になるため、レイテンシが大きくなる可能性がある。
可用性が低下する。一部のノードがダウンした場合、システム全体が停止する可能性がある。
最終整合性 (Eventual Consistency)
メリット
システムのパフォーマンスが高い。データの書き込み処理が非同期的に行われるため、ユーザーの応答時間が短縮される。
可用性が高い。一部のノードがダウンしても、システム全体が停止することはない。
スケールしやすい。
デメリット
一時的に古いデータが表示される可能性がある。データの不整合が発生する可能性がある。
複雑なシステム設計が必要になる場合がある。競合状態の管理やデータの衝突解決などを考慮する必要がある。
一貫性が必要な処理には向かない。
⚠️ 面接突破のワンポイント
- 面接官は「なぜその整合性モデルを選んだのか?」という理由を知りたがっています。トレードオフを理解し、状況に合わせて最適な選択ができるかをアピールしましょう。
- 具体的なシステム構成(例えば、キャッシュ戦略や非同期処理の実装)について説明できるように準備しておきましょう。


