大容量データをDynamoDBで扱う際のMomento導入検討
by
k1nakayama
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 大容量データをDynamoDBで扱う際 のMomento導入検討 Keiichi Nakayama Vice General Manager Cloud Partner Group CHARA-WEB Co., Ltd.
Slide 2
Slide 2 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 自己紹介 • 中山 桂一 ( @k1nakayama ) • 株式会社キャラウェブ クラウドパートナーグループ 副部長 • クラウドインテグレーション事業をリード • AWS Community Builders (Serverless) • AWS x Serverless / GitLab / DevSecOps
Slide 3
Slide 3 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 本日のテーマ
Slide 4
Slide 4 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証内容
Slide 5
Slide 5 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. サンプルデータ
Slide 6
Slide 6 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証1-1:DynamoDBから常にScanし、一部を返却 472.16ms $0.00009134467
Slide 7
Slide 7 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証1-2:Momentoにキャッシュがあったら取り出し 564.06ms $0.0000923 32.38ms $0.00000068
Slide 8
Slide 8 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証1:まとめ Ø 毎回スキャンをするより、キャッシュがあったらLambdaの実行時間で15分の1、コ ストは134分の1に削減できる Ø キャッシュを作成する際は、毎回スキャンをするより、100msほど長く掛かるが、 コストはほぼ同じ Ø 実質10行前後のコード追加で大幅なパフォーマンス改善ができる!
Slide 9
Slide 9 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2:1MB以上のデータを対象とする Momentoはデフォルトで1MB/アイテムが上限となるため、1MB以上のデータをキャッシュさ せたい場合は、データを圧縮して出し入れする必要がある
Slide 10
Slide 10 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2-1:1MB以上のデータをScanして返却する 1,606,475 1658.31ms $0.00010123502
Slide 11
Slide 11 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2-2:キャッシュがあったら取り出し(データ圧縮) 1,606,475 2344.75ms $0.000107 237.99ms $0.000002293
Slide 12
Slide 12 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2-3:Momentoの代わりにS3使用(圧縮せず) 1,606,475 1927.87ms $0.000104 219.49ms $0.00000206
Slide 13
Slide 13 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証2:まとめ Ø 圧縮・解答の処理に100ms弱かかる Ø S3に保存する場合と比べて、ほぼ同等レベルの速度・コストで処理可能 Ø Momentoのスループット制約等を考慮し、キャッシュする容量やI/Oの頻度を照ら し合わせて検討する。容量が大きい場合は、Momentoが向かない可能性もある Ø いずれにしても、何らかのキャッシュ先を作って保存するべき
Slide 14
Slide 14 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証3-1:1レコードをGetItemして返却 23.93ms $0.0000005425
Slide 15
Slide 15 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証3-2:キャッシュがあったら取り出し(GetItem) 30.87ms $0.000000601 16.78ms $0.00000034183
Slide 16
Slide 16 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 検証3:まとめ Ø 一番DynamoDBのパフォーマンスが出そうなGetItemでも、キャッシュがあったら Lambdaの実行時間で30%、コストは37%削減できる Ø キャッシュを作成する際は、毎回スキャンをするより、7msほど長く掛かるが、コス トはほぼ同じ Ø キャッシュを作成する場合を含めて、Lambdaの実行時間より、API Gateway等と のインテグレーションやAWSリソースまでの通信によるレイテンシーが大きいため、 時間はキャッシュをしてもしなくても誤差の範囲だが、間違いなくコストは削減でき るので、Momentoを併用する価値は大きい 検証3と似た検証をして、同じような結果を報告している公式ブログ https://jp.gomomento.com/blog/oops-momento-ate-60-percent-of-my-lambda- latencies
Slide 17
Slide 17 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. DynamoDB + Momentoの活用(ここまでのまとめ) Ø 検証結果からDynamoDBを利用する際に、Momentoを組み合わせることは、相 性が非常によい Ø 特にGetItemや100KB程度の結果となるクエリ結果のキャッシュは、UX、コスト共 にメリットが得られる DynamoDBを使う際は、Momentoとセットで使っていくと、みんなハッピー!! ほんとに? キャッシュされているアイテムが更新されたらどうするの!?
Slide 18
Slide 18 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. アイテムの更新アーキテクチャ (PutItem / GetItem)
Slide 19
Slide 19 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. アイテムの更新アーキテクチャ (Query / PutItem)
Slide 20
Slide 20 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. こんなことが出来たら良さそうアーキテクチャ
Slide 21
Slide 21 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. 他にも欲しい機能 Ø RedisのKEYS そもそもKeyの存在チェックをするAPIはあるが、Keyの一覧を返すAPIは存在しな いため、キャッシュを能動的にクリアしたい場合などにオペレーションがしにくい KeysのAPIがあり、パターン一致した一覧を取得できる場合、簡易的なクエリを キャッシュアイテムに対して行うことも出来るため、ユースケースが広がりそう Ø DynamoDBのプロキシ的な機能 今回のQuery結果のアイテムを含め、DynamoDBのキャッシュを透過的に扱える ようになったら、もはやMomentoを使わない理由がなくなってくる Ø 検索機能(ロードマップにあった?) ElasticsearchやAlgoliaのような検索エンジン的なものをサーバーレスで!
Slide 22
Slide 22 text
© 2022, CHARA-WEB Co.,Ltd. All rights reserved. Momentoを使う上でのTips Ø SDKは言語毎にサポートされているAPIが異なる https://docs.momentohq.com/ja/develop/api-reference/language-support Ø ドキュメントはたまに細かな点で間違っていたり、どこにも記載されていないものも ある GitHubのSDKのリポジトリは、それなりにしっかりとテストコードが書かれている ので、テストコードを参考に実装してみると解決が早い ドキュメントの間違いを見つけたら、ドキュメントのリポジトリでPR出していこう Ø わからないことや、期待したいことなどは、積極的に発信していくとよい Discord上や場合によってはTwitter上などで、Momentoについて発信していくと、 驚異的なスピードで解決できるので、悩む前に聞くが一番!
Slide 23
Slide 23 text
Accelerate your business with the cloud.