# Dynamo
Dynamo は [[Amazon]] が内部サービス向けに開発した高可用分散キーバリューストアである。[[@2007__SOSP__Dynamo - Amazon's Highly Available Key-value Store]](SOSP 2007)で設計と実装が公開された。
## 概要
Dynamo は `get(key)` と `put(key, context, object)` のみを公開するシンプルなインタフェースを持ち、「常に書き込み可能」(always writeable)を設計原則とする。可用性を最優先し、[[結果整合性]]を採用することで、ネットワーク分断やノード障害の最中でも書き込みを拒否しない。
主要技術:
- [[一貫性ハッシュ法]]と仮想ノードによるパーティショニング
- ベクタクロックによるバージョン管理
- スロッピークォーラム(sloppy quorum)とヒンテッドハンドオフによる一時障害処理
- マークル木(Merkle trees)によるレプリカ同期
- ゴシッププロトコルによるメンバーシップ管理
パラメータ `(N, R, W)` により、サービスオーナーが整合性・可用性・耐久性のトレードオフを個別に制御できる。標準構成は `(3, 2, 2)` である。
## 本番実績
Amazon のショッピングカート、セッション管理、ベストセラーリスト、商品カタログなどの本番サービスで運用された。成功応答率 99.9995%、データ損失イベントゼロの実績を報告している。後の Apache Cassandra、Amazon DynamoDB、Riak などの分散データストアに多大な影響を与えた。
## 関連
- ソース: [[@2007__SOSP__Dynamo - Amazon's Highly Available Key-value Store]]
- エンティティ: [[Amazon]] / [[Werner Vogels]] / [[Giuseppe DeCandia]]
- 概念: [[結果整合性]] / [[一貫性ハッシュ法]] / [[インターネットスケールサービス設計]]