Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【JAWS-UG朝会】今更ながら Amazon DynamoDB の論文を真面目に読んでみた
Search
MasakiKato5
June 20, 2023
Technology
6
1.5k
【JAWS-UG朝会】今更ながら Amazon DynamoDB の論文を真面目に読んでみた
2023/06/20のJAWS-UG朝会にて発表した資料。DynamoDBの英語論文を読んで面白かったところを発表
MasakiKato5
June 20, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
組み込みLinuxの時系列
puhitaku
3
970
ZOZOTOWNのホーム画面をパーソナライズすることの難しさと裏話を語る
f6wbl6
1
440
FOSS4G 2024 Japan コアデイ 一般発表25 PythonでPLATEAUのデータを手軽に扱ってみる
ra0kley
1
130
コンテナのトラブルシューティング目線から AWS SAW についてしゃべってみる
kazzpapa3
1
120
End of Barrel Files: New Modularization Techniques with Sheriff
rainerhahnekamp
0
270
TinyGoを使ったVSCode拡張機能実装
askua
2
200
Shift-from-React-to-Vue
calm1205
4
1.7k
Railsで4GBのデカ動画ファイルのアップロードと配信、どう実現する?
asflash8
1
150
20241108_CS_LLMMT
shigashiyama
0
220
プロポーザルのつくり方 〜個人技編〜 / How to come up with proposals
ohbarye
4
300
Autify Company Deck
autifyhq
1
39k
マイベストのデータ基盤の現在と未来 / mybest-data-infra-asis-tobe
mybestinc
2
1.8k
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
Typedesign – Prime Four
hannesfritz
40
2.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
KATA
mclloyd
29
14k
A Philosophy of Restraint
colly
203
16k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
RailsConf 2023
tenderlove
29
890
Speed Design
sergeychernyshev
24
580
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.2k
Scaling GitHub
holman
458
140k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
810
Transcript
今更ながら Amazon DynamoDB の論文を 真面目に読んでみた 2023.6.20 Masaki Kato © 2022,
Amazon Web Services, Inc. or its affiliates. All rights reserved.
2 自己紹介 • 加藤雅己(かとう まさき) • 外資系ITコンサルティング会社3年目 (2021年新卒入社) • 好きなAWSサービス
• AWS初心者 • JAWS朝会初登壇です! • 普段はアプリケーションアーキテクトとして働いています AWS Lambda Amazon DynamoDB NAT gateway 休みの日はフリスビーを投げたりプログラムを書い たりな日々を過ごしています AWS Ground Station
3 今日のまとめ どんな論文を読んだの? • Amazon DynamoDB: A Scalable, Predictably Performant,
and Fully Managed NoSQL Database Service (動画) 2022年7月に公開された論文 Amazon DynamoDBのアーキテクチャとその進化の歴史を紹介 なんで読もうと思ったの? • ネットで感想記事見つけた⇒こんな論文があるんだ • サービスの中身を知っていた方がいいものを作れるのでは?と感じたので読んでみた! • 最初は日本語の解説記事を読んだだけだったが、気付いたら英語でも 読んだ感想 • 技術的な話よりは課題に対するアプローチの歴史の話で読みやすかった (途中PaxosやB treeの話がでて、そこは難しかった) • AWSエンジニアの顧客体験への強い熱意を感じた
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 4 Contents 1. Amazon DynamoDBとは? 2. 論文の構成 3. アーキテクチャ 4. プロビジョンドからオンデマンドへの旅 5. まとめ
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 5 Amazon DynamoDBとは?
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 6 A. 「AWSが提供するフルマネージドなNoSQLデータベースサービス」です
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 7 Amazon DynamoDBの特徴 NoSQLデータベースらしいシンプルなクエリ操作 • NoSQL = Not only SQLの略 • RDBは多機能⇒代わりに制約も多い 〇:厳密なデータ構造、 JOINなどの複雑なクエリ、データの強い整合性等 ✖:書き込みの負荷分散が難しい等 • RDBの持つ多彩な機能を制限する代わりに、特定のユースケースにおいてメリッ トを持つDBのことをNoSQLと呼ぶ • DynamoDBはPut/Get/Scanなどシンプルなクエリしかサポートしない代わりに パ フォーマンスがテーブルのサイズ・リクエスト量によらず一貫 「キャパシティ」という概念を用いたスループット制御 • 読み込みや書き込み等の APIコールに対し、キャパシティを消費 ⇒キャパシティが不足していればスロットルがかかる • リリース当初、キャパシティは事前にユーザーが定義する必要があった ⇒2018年にオンデマンドに設定可能に Amazon DynamoDBとは? Amazon Prime Day期間(66時 間)合計での数兆req・ピーク時 最大8920万req/秒の中でも1 桁ミリ秒のレイテンシを出し続 けたとのこと!! I/Oやコンピューティング時間ではな く、キャパシティという単位を用いる ことで裏のサーバーを意識させない 設計?
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 8 Contents 1. Amazon DynamoDBとは? 2. 論文の構成 3. アーキテクチャ 4. プロビジョンドからオンデマンドへの旅 5. まとめ
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 9 論文の構成 1. 導入 DynamoDBの特徴を紹介 2. 歴史 もともと2つのDBだったものをDynamoDBにしたんだよ、みたいな話 3. アーキテクチャ DynamoDBのアーキテクチャについて。後述 4. プロビジョンドからオンデマンドへの旅 パフォーマンスの課題をどうやって解決したのかという話。後述 5. 耐久性と完全性 データが壊れたり失われたりしないようにどうやっているか 6. 可用性 DynamoDBを止めないようにする仕組みの紹介 7. ベンチマーク DynamoDBはすごい 8. 結論 DynamoDBはすごい 今日は時間の関係 から、ここだけを紹 介 このへんもめちゃく ちゃ面白かったで す
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 10 Contents 1. Amazon DynamoDBとは? 2. 論文の構成 3. アーキテクチャ 4. プロビジョンドからオンデマンドへの旅 5. まとめ
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 11 マイクロサービスアーキテクチャ 複数のマイクロサービスを組み合わせ、 NoSQL DBサービスを実現 ストレージノードは最低 3つのAZにデータを複製 DynamoDBのアーキテクチャ Global Admission Control スループット 制御 Request Router Metadata Service リクエスト 受付・振分け テーブルに関する メタデータ管理 Authentication System 認証システム Autoadmin Service パーティション 配置の管理など AZ-a AZ-b AZ-c Storage Node SSD SSD Storage Node SSD SSD Storage Node SSD SSD 11
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 12 マルチテナントアーキテクチャ × シングルテナントエクスペリエンス 1つのテーブルを小さなパーティションに分割し、ストレージノードに分散配置。 1つのストレージノードには複数のパーティションが配置される(マルチテナントアーキテクチャ)が、同じノードに別の パーティションがいることをユーザーは意識しない(シングルテナントエクスペリエンス) DynamoDBのアーキテクチャ Partition 1-A Storage Node Partition 1-B Partition 1-C Table1 Table2 Partition 2-A Partition 2-B Partition 2-C 分割 分散して 配置 Partition 1-A Partition 1-B Partition 1-C Partition 2-A Partition 2-B Partition 2-C Storage Node Storage Node 12
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 13 Contents 1. Amazon DynamoDBとは? 2. 論文の構成 3. アーキテクチャ 4. プロビジョンドからオンデマンドへの旅 5. まとめ
Storage Node マルチテナントアーキテクチャの抱える2つの課題 1つのノードに複数のパーティションを共存させるため、パーティションに予めスループット制限をかける仕組みを採用 (WCU/RCU) プロビジョンドからオンデマンドへの旅 (1/8) Table 1 -
Partition A Table 2 - Partition X Table 1 - Partition A Table 1 - Partition B Table 1 - Partition C テーブルのスループットを パーティションに均等に割当 合計スループットがノードの限界を 超えないよう配置 Table1: 2400 WCU 800 WCU 800 WCU 800 WCU 800 WCU 900 WCU 2000 WCU (ユーザーが設定) 14
© 2022, Amazon Web Service, Inc. or its affiliates. All
rights reserved. マルチテナントアーキテクチャの抱える2つの課題 プロビジョンドからオンデマンドへの旅 (2/8) 15 Storage Node Table 1 - Partition A Table 2 - Partition X Table 1 - Partition A Table 1 - Partition B Table 1 - Partition C テーブルのスループットを パーティションに均等に割当 合計スループットがノードの限界を 超えないよう配置 Table1: 2400 WCU 800 WCU 800 WCU 800 WCU 800 WCU 900 WCU 2000 WCU 1つのノードに複数のパーティションを共存させるため、パーティションに予めスループット制限をかける仕組みを採用 (WCU/RCU) ⇒リクエストの空間的・時間的な不均一性に対応できず、スロットリング(流量制限)がかかる課題が発生 複数の解決策によりスループットを管理、調整しスロットリングを抑制⇒オンデマンドキャパシティの実現へ 課題1: 特定のキー領域へ のアクセス集中 課題2: 瞬間的なアクセ ス量の増加
Storage Node バーストによる瞬間的なリクエスト増大の吸収 普段使い切っていないキャパシティを保存⇒リクエスト増加時にバーストさせ瞬間的なリクエスト増加に対応 ストレージノードのキャパシティを超える場合には他のパーティションへ迷惑をかけるためバースト不可 プロビジョンドからオンデマンドへの旅 (3/8) Table 1 -
Partition A Table 2 - Partition X バースト可能な場合 バーストできない場合 800 WCU 1200 WCU 2000 WCU Storage Node Table 1 - Partition A Table 2 - Partition X 800 WCU 400 WCU 2000 WCU 16 ノードの限界を超えスロッ トリングがかかる ※課題として残る +700 WCU +700 WCU 例:800WCUのPartition Aに1500WCUのリクエストが来た場合
キャパシティ調整による空間的リクエスト分布の吸収 長期間特定のパーティションにアクセスが集中する場合には、均等に割り当てたキャパシティの使用量に応じた再割 り当てを実施。 プロビジョンドからオンデマンドへの旅 (4/8) 例:800WCUのPartition Aに1500WCUのリクエストが来た場合 Table 1 -
Partition A Table 1 - Partition B Table 1 - Partition C Table1: 2400 WCU 800 WCU 800 WCU Table 1 - Partition A Table 1 - Partition B Table 1 - Partition C Table1: 2400 WCU 1500 WCU 600 WCU 300 WCU 1500 WCU 割り当てを 再分配 割当量を超え瞬間的に スロットリングがかかる ※課題として残る 17 初期状態 最終状態
テーブル全域の監視による不当なスロットルの防止 パーティションのキャパシティが少ないことによる不当なスロットルを防止するため、テーブル全域の流量監視サービ ス(GAC)を作成。リクエスト時に都度キャパシティを割当ての許可をとることで不当なスロットルを防止。 プロビジョンドからオンデマンドへの旅 (5/8) 18 Global Admission Control Request
Router AZ-c Storage Node AZ-b Storage Node AZ-a Storage Node ①ストレージノードへのリク エスト前にGACへテーブル のキャパシティを確認 ②テーブルのキャパシティが 残っている場合のみ ストレージノードへアクセス ストレージノード内の流量制限は残す ⇒ハードウェアの限界を超えたリクエスト を拒否 ※GACのような攻めの仕組みと ストレージノードの流量制限のような守り の仕組みが共存するケースが多くみら れ、印象的だった
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 消費キャパシティの監視によるパーティションの適切な配置換え ストレージノード内のパーティションの消費キャパシティが閾値を超えた場合、パーティションを追い出すようリクエスト を出すことでノードのキャパシティを超えることを予防する。 プロビジョンドからオンデマンドへの旅 (6/8) Storage Node Table 3 - Partition Y 2000 WCU Storage Node Table 1 - Partition A Table 2 - Partition X 600 WCU 1200 WCU 2000 WCU 300 WCU 19 Auto Admin Service ①Partition Xを追い出すよ うリクエスト ②空きがあるノードを探し、 Partition Xを移動
リクエストが集中するパーティションの分割 特定の範囲へのアクセスが集中する場合、どうしてもスロットルがかかりやすい。こういったアクセスが集中するパー ティションを分割することでノードの流量制限を超えることを予防。 ①特定のキーへのアクセス集中②テーブル全域のスキャンはパーティション分割の効果がないため分割しない プロビジョンドからオンデマンドへの旅 (7/8) 20 Table 1 -
Partition A Table 1 - Partition B Table 1 - Partition C Table 1 - Partition A Table 1 - Partition B Table 1 - Partition C Table 1 - Partition D PartitionCにリクエストが集中 Partitionを分割しリクエストを平準化
ついにオンデマンドへ プロビジョンドからオンデマンドへの旅 (8/8) 21 これらの仕組みにより、消費した流量からオンデマンドにキャパシティを設定する仕組みが構 築された。 時間的なリクエスト分布による課題 空間的なリクエスト分布による課題 GACによるテーブル全域での キャパシティ管理
バーストキャパシティ スループットを監視し パーティションの適切な配置換え パーティション割当て キャパシティの動的な調整 パーティションの分割 オンデマンドキャパシティ プロビジョンドキャパシティ
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 22 Contents 1. Amazon DynamoDBとは? 2. 論文の構成 3. アーキテクチャ 4. プロビジョンドからオンデマンドへの旅 5. まとめ
© 2022, Amazon Web Services, Inc. or its affiliates. All
rights reserved. 感想&今日のまとめ • 技術的な話よりは課題に対するアプローチの歴史の話だった ◦ 出てきた課題に対し、迅速に対応可能な部分から改善していく 姿勢は見習いたい ◦ 攻めと守りの仕組みを作ることで安全なアプリケーションを設計できる ▪ 本日紹介しなかった可用性/耐久性についての考え方でも同じ • AWSエンジニアの顧客体験への強い熱意を感じた ◦ 論文中に「エクスペリエンス」という単語が非常に多く見られた • AWSサービスはその実装を意識させない作りになっていることが多いが、裏側まで知ること でより良いアプリケーションを設計できるのではないか 参考 • Amazon DynamoDB: A Scalable, Predictably Performant, and Fully Managed NoSQL Database Service • USENIX ATC '22 - Amazon DynamoDB: A Scalable, Predictably Performant, and Fully Managed NoSQL Database Service - YouTube • Amazon DynamoDB の論文を読んでいく - Qiita • AmazonのDynamoDB論文を眺めた | Takuya Kitazawa 23