【レポート】ExpediaはDynamoDBで飛行する: 高速ストリームを利用した旅行の分析 #reinvent #DAT324
コンニチハ、千葉です。
はじめに
リアルタイム旅行分析を行なっているExpedia社のセッションとなります。色々なKVSを比較検討し、現在はDynamoDBを使っています。この比較・検討していく過程が興味深い内容でした。
システムの規模です。
レポート
システムの要件
- リアルタイムでの
- 需要パターンをサプライヤへ提供
- ライブでの価格変動を消費者へ提供
- 社内向けのマーケットの可視化
- 例としてリアルタイム価格変動のサイトイメージ
データ参照について
- オンデマンドで参照するデータは、より機能的な能力が必要
- シンプルなKVSでok
- スケールを考慮すると、いくつかの制約とトレードオフがある
データ参照に必要なこと(要求事項)
- パフォーマンス
- 高速なランダムアクセス
- スケール可能なスループット
- 可用性
- データ管理
- 堅牢性
- 変更の容易さ
- スケーラブルな容量
- 利便性
- 再利用性
- シンプルかつ柔軟
- 運用上のオーバーヘッド
8つを検証
上記のパフォーマンス、データ管理、利便性を軸に、8つのプロダクを検証
1. In-Memory/In-Heap
- 高速だが、ストレージのスケールが難しい
- 起動時のストリーム処理が遅くなる
- データ更新が難しい
結論:パフォーマスは満たすが、データ管理性や利便性が足りない
2. Streaming Processor Disk(例:RocksDB)
聞き逃したのでスライドアップされたら更新します、すみません!
3. Direct Service Call
- Webサイトを運営するチームはDDOS攻撃が来たと説明
結論:データ管理、利便性はあるがキャッシュがないのでサイトが耐えられない
4. Redis/Amazon ElastiCache
- 高速で更新も簡単
- アプリケーション間でデータを共有できる
- 可用性、堅牢性はNG。データロスの可能性がある
結論:高速だが、可用性、堅牢性、ストレージの拡張、運用性が低い
5. Cassandra
- 高速、高可用性(SOPFがない)
- ストレージの拡張性とスループットがはやい
- 運用のオーバーヘッドがとても高い
結論:運用性以外はOKだが、運用性がネック
6. DB(MySQLなど)
- 運用負荷を軽減できる
- とても高い堅牢性、安価にスケール
- データを共有できる
結論:ネックになるのはスループットとランダムアクセス。それ以外はokだけど。
7. DB + Cache
- 読み込みパフォーマンス、スループットを増やせる
- データを共有できる
- ストリーミングにはマルチデータソースが必要。運用のオーバーヘッドが高くなる
結論:運用性がNG。それ以外はok。
8 DynamoDB + DAX
- 高速、高可用性、スケール性がある
- メンテナンス性が高く、アップデートも簡単
- データソースを共有できる
結論:要求事項すべてOK!
アーキテクチャ
DynamoDB + DAXのパフォーマンス
ポイント
- パフォーマンス/スケール性/可用性/堅牢性/扱いやすさのバランスを見る
- ストリーミングシステムでの再利用性
- 運用負荷が低い
- コスト効果
- アクセスするデータがシンプル
パフォーマンス、可用性に関するTips
- DAX利用でのBatchGetItem:10-20倍スピードアップ。
- DynamoDB Client(DAX非利用)時、一貫したパフォーマンスが出なかったが、keep-aliveの設定で改善した。
- bandwithを節約する:大きいオブジェクトの場合、特定フィールドのサブセットのみを取得し、bandwithを節約する
- カーディナリティパーティションキーを利用し、スループットが落ちることを避ける
- DynamoDB/DAX Clientはスレッドセーフだが、20ms以下のオーバーヘッドがある
最後に
サービス線定時には、パフォーマンスが高くても運用コストが高いとどうしてもあとあと辛い思いをします。今回のケースでは、マネージドなDynamoDBがばっちりハマった印象でした。 色々な要件があると思いますが、今回の視点である、パフォーマンス、データ管理性、利便性を軸に比較検討し総合的に判断するという考え方はとてもいいなと思いました。