[レポート] DAT321 : DynamoDBの内側: 我々はどのようにスケーラブルなデータベースを構築しているのか #reinvent

AWS re:Invent 2018 DAT321 -- Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Databaseのセッションレポートです。
2018.11.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS re:Invent 2018 DAT321 -- Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Databaseのセッションレポートです。

以下、公式の概要です。

Come to this session to learn how Amazon DynamoDB was built as the hyper-scale database for internet-scale applications. In January 2012, Amazon launched DynamoDB, a cloud-based NoSQL database service designed from the ground up to support extreme scale, with the security, availability, performance, and manageability needed to run mission-critical workloads. This session discloses for the first time the underpinnings of DynamoDB, and how we run a fully managed nonrelational database used by more than 100,000 customers. We cover the underlying technical aspects of how an application works with DynamoDB for authentication, metadata, storage nodes, streams, backup, and global replication.

スピーカーは Senior Principal Engineer の Jaso Sorenson さんでした。

動画

スライド

レポート

DynamoDBの各種機能について、その内側の仕組みを紹介しつつ解説するという内容でした。なお、スピーカーのJasoさんは冗談が好きなようで、定期的に冗談を挟んで会場をわかせていました。

アジェンダ

  • GetItem / PutItem
  • Auto Scaling
  • Backup Restore
  • Streams
  • Global Tables

GetItem / PutItem

  • GetItemの仕組み。IAMによる認証を行った上でデータを返す
  • PutItemの仕組み。Storage Nodeに3重化して書き込む。コンセンサスアルゴリズムにはPaxosを利用している
  • テーブルのデータはKeyをHash値に変換し、複数のパーティションに分散配置する
  • Get Itemは3重化されているStorage Nodeのどれかにアクセスするため古いデータを取得する場合がある
  • Storage Nodeの中ではデータをB-tree形式で管理している。またReplicaiton Logも存在する
  • システムの管理は自動化されておりStorage Node障害時は自動復旧する
  • Secondary Indexは基本のテーブルとは別にSecondary Index用のテーブルを作成する

Auto Scaling

  • テーブルはReadとWriteのキャパシティを指定できる
  • キャパシティとコストはトレードオフ
  • そしてキャパシティはパーティション毎に割り当てられる
  • キャパシティはToken Bucket Algorithmになっており、直近5分のトークンが存在する。そのため、一時的なリクエストのバーストにも対応できる
  • パーティションのデータに偏りが発生する場合があるとトータルのキャパシティは足りていてもスロットリングする場合がある
  • PID Controllerのようにキャパシティの調整を自動化できるのがAuto Scaling

Backup Restore

  • バックアップはPoint-in-Time RecoveryとOn-Demand Backupの二種類ある
  • バックアップはS3に保存されている
  • Point-in-Time Recoveryでリストアする場合それぞれのパーティション直近のデータとパーティションが利用される
  • On-Demand Backupの場合は差分のログをS3に書き込むだけ

Streams

  • DynamoDB Streamsの紹介
  • DynamoDB StreamsはKinesisを利用しておりKinesis Client Libraryを利用できる

Global Tables

  • 複数リージョンへのレプリケーションも可能
  • 実際のアーキテクチャ
  • AWS側でレプリケーション管理のための属性を追加する
  • コンフリクトは最後に書き込んだものを勝ちとしている

QA

興味があったので、セッション後のスピーカーへのQAを聞きました。20人以上が取り囲んでひっきりなしに質問していて、30分経過しても終わらなかったので完全にQAが終わる前に帰りました。英語力の関係である程度しか聞き取れませんでしたが、Global Tableに関する質問が多かった印象です。BCPという単語もよく聞こえました。他にはPaxos遅くない?とかSSD以外の選択肢を用意できないか?という質問もありました。後は、やはり自分自身が担当するシステムの課題について質問していて、Jasoさんが「顧客にNoと言いたくない」と言って、詳細についてメールするよう伝えるやり取りが何度かあったのが印象的でした。

最後に

DynamoDBの内側を紹介しながら各種機能を解説するセッションでとてもおもしろかったです。中身がわかっている方が挙動も予測できますし、こういうセッションはもっと聞きたいと思いました。