Serverless Meetup Japan Virtual #5 にオンラインで参加したので、その参加レポート・メモです。

Twitter のハッシュタグは #serverlessjp です。

#2、#3 の様子はこちら。

タイムテーブル

Timeline Title Speaker
20:45-21:00 Social
21:00-21:05 Opening Talk
21:05-21:10 Forkwellさん告知!! 重本湧気さん
21:10-21:30 DynamoDB のインデックス再編事例 丹羽一智さん (Game Server Services)
21:30-21:40 Meetup Zoom参加メンバー
21:40-22:00 楽しいことにフォーカスしたい!上手なクラウドの使い方 中丸良さん (Google)
22:00-22:30 Meetup Zoom参加メンバー
22:30- Closing

セッションレポート

DynamoDB のインデックス再編事例

  • SEGA -> Nintendo -> 起業
    • GS2 というゲームに特化したサービス
  • DynamoDB のテーブル構成のベストプラクティス
  • 動機
    • インデックスの設計に失敗
    • LSI (Local Secondaly Index) はテーブル作成時にしか設定できない
    • マルチテナント x マイクロサービスで、それぞれの組み合わせでテーブルを作成
      • 結果としてテーブル数が 2,000 を超える
  • 新しいテーブルを準備
    • 流れは RDBMS のシャーディングと同じ
  • 新しいテーブルへの同期
    • 方法としては 2 通り
      • DynamoDB Stream
        • 作成・更新・削除イベントから Lambda を実行
      • トランザクションを使用
        • 今回はこちらを採用
        • テーブル数が 2,000 もあり、Stream の制限があるのではないか?と思ったから
  • インデックス問題を回避するために
    • 先にインデックスを作る
    • 属性名に __lsi_ をつけて先に作ってしまう
    • 使いたくなったら値を入れていく
    • 1 テーブルでいろんなエンティティを扱いやすくなった
  • バックアップ
    • テナントごとにポイントインタイムリカバリ
  • Cloud Firestore とほぼ同じ触り心地になった

Q&A

  • Q. 副作用は?デメリットは?
    • A. 人間が見にくくなる。関連する属性を消すのが大変。
  • Q. GSI でやらない理由は?
    • A. コストの問題と、整合性の問題。GSI だと結果整合性、 LSI だと強整合性。
  • Q. マイクロサービスの観点からすると元々のほうが正しいのでは?
    • A. ゲームの用途だと特定のマイクロサービスだけロールバックするということはない。
  • Q. シングルテーブル設計が好きだが、設計に時間がかかる。新しい開発だとそのあたりの難しさは?
    • A. 新しいデータのとり方をしたくなったときにできない。
      • Q. 設計に掛けた時間は?
        • A. 2 週間くらい
          • Q. コストは削減できた?
            • A. あまり削減できた印象はない。ただし、オンデマンド/プロビジョニングの管理はしやすくなった。
  • Q. DB アクセス用のリポジトリ自動生成について。
    • A. DDL をもとに、そのテーブルにアクセスするためのクラスができあがる。
  • Q. 本体のプログラム変更にかかった時間は?
    • A. インターフェースは同じなので、 DB アクセス部分の入れ替えのみで対応できた。
  • Q. 基本的にインデックスをもとにデータを引っ張ってくる?
    • A. そう。JOIN したいような場合は複数クエリを投げるスタンス。
  • Q. パフォーマンスは?
    • A. シングルテーブルになったとは言え、はやくなったわけではない。
  • Q. 苦手なクエリは?日付の範囲など。同じキーが並ぶ場合など。
    • A. コンポジットキーが苦手。LSI に値を連結させたものを保持する。
      範囲検索はレンジキーを使うが、他の条件 (他のキー、他の範囲) と組み合わさると難しくなる。
      同じキーが並ぶ場合については、キーが分散するようなキー設計をしている。

楽しいことにフォーカスしたい!上手なクラウドの使い方

(※ 大人の事情によりメモもローカルにとどめておきます…)

まとめ

Serverless Meetup Japan Virtual #5 の参加メモでした。

今回は Amazon DynamoDB の話と、 Google Cloud の話でした。 DynamoDB については、シングルテーブルでの (キー) 設計はすごく複雑で大変そうだなという印象を受けました。 DynamoDB については無理せずテーブルを分けていくという考えしかなかったので、シングルテーブルでの運用については調べてみようと思いました。

zoom 枠の方々には AWS、Azure、GCP な人がそれぞれいらっしゃったので、各クラウドをまたいだ話を聞くことができたのもすごく勉強になりました。

次回以降も楽しみです。今回も開催ありがとうございました。


以上、よっしー (michimani) でした。

Share to ...

0

Follow on Feedly


comments powered by Disqus