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
急激なDB書き込みが行われるサービスをリビルドした話
Search
takayuki.miura
February 20, 2023
Technology
0
650
急激なDB書き込みが行われるサービスをリビルドした話
takayuki.miura
February 20, 2023
Tweet
Share
More Decks by takayuki.miura
See All by takayuki.miura
TerraformをやめてCDKでReStartしたあと、 CDKをやめてCDK for TerraformでReStartした話
tmiura0203
0
1.1k
実際にリビルドを完遂してみて
tmiura0203
0
600
Spring Bootという強すぎるフレームワークについて
tmiura0203
0
720
Other Decks in Technology
See All in Technology
エンジニア採用を起点に取り組む組織の改善活動と課題、中長期のタスク管理/ #HRmethod
nishiuma
4
3.3k
AWS版GitHub?Amazon CodeCatalystの全体像をまとめてみた
oshanqq
1
3.2k
Oracle Database 23ai 新機能 #3 Oracle Globally Distributed Database(GDD)
oracle4engineer
PRO
1
160
ことばをそろえる / Bridging the Terminology Gap
amaotone
5
1k
20240906_JAWS_Yamanashi_#1_leap_beyond_the_AWS_all_certifications
tsumita
1
100
Binary Authorizationと友達になろう / Let's be friends with Binary Authorization
iselegant
2
130
LLMに日本語テキストを学習させる意義
ksaito
13
3.4k
LLM を現場で評価する
asei
4
680
日経電子版から始まった内製開発の現在地と向き合っている課題/inhouse
nishiuma
0
230
New Relicで実践する外形監視
aeonpeople
1
120
20240828_EM_Fest
kzkmaeda
4
360
AWSを始めた頃に陥りがちなポイントをまとめてみた
oshanqq
1
1.7k
Featured
See All Featured
Designing with Data
zakiwarfel
98
5k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Code Review Best Practice
trishagee
62
16k
YesSQL, Process and Tooling at Scale
rocio
167
14k
[RailsConf 2023] Rails as a piece of cake
palkan
44
4.6k
Become a Pro
speakerdeck
PRO
22
4.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
45
4.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
41
6.4k
BBQ
matthewcrist
83
9.1k
Creatively Recalculating Your Daily Design Routine
revolveconf
215
12k
Designing for Performance
lara
604
68k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Transcript
急激なDB書き込みが行われる サービスをリビルドした話 エキサイト株式会社 三浦 大幸 01
アジェンダ 自己紹介 ことの始まり DB書き込みでの負荷問題とその解決 今後の展望 まとめ 02
エキサイト株式会社 所属 バックエンド 技術スタック @miura0203 SNS 01 02 03 自己紹介
自己紹介 03 三浦 大幸 フロントエンド インフラ iOSアプリ
ことの始まり 04
サマーインターン前のある日 ことの始まり 05 インターンなにやる? WebPushのリビルドとかどうですか? いいね! (そういえばWebPushのリビルドして なかったな…)
サマーインターン前のある日 ことの始まり インターンなにやる? WebPushのリビルドとかどうですか? いいね! (そういえばWebPushのリビルドして なかったな…) 闇の開発の始まり 06
問題点 ユーザ情報が少なすぎて、WebPushの機能をフルに使えない WebPushを送信できるタイミングが決め打ちされている cron + ShellScript + PHPで無理やりデーモンを作っており、管理が難しい 配信開始から終了まで数時間掛かる DBからデータを取得
~ WebPush通知送信までの流れが複雑 通知送信後、DBに急激な書き込み負荷が掛かる などなど… ことの始まり 07
問題点 ことの始まり ユーザ情報が少なすぎて、WebPushの機能をフルに使えない WebPushを送信できるタイミングが決め打ちされている cron + ShellScript + PHPで無理やりデーモンを作っており、管理が難しい 配信開始から終了まで数時間掛かる
DBからデータを取得 ~ WebPush通知送信までの流れが複雑 通知送信後、DBに急激な書き込み負荷が掛かる などなど… 省略 08
DB書き込みでの負荷問題とその解決 09
DB書き込みでの負荷問題とその解決 10 DB書き込みでの負荷問題とその解決 通知の送信状況記録時 通知の受信状況記録時のDB書き込み負荷 のDB書き込み負荷
DB書き込みでの負荷問題とその解決 11 通知の受信状況記録時のDB書き込み負荷 DB書き込みでの負荷問題とその解決
問題点 ユーザ情報が少なすぎて、WebPushの機能をフルに使えない WebPushを送信できるタイミングが決め打ちされている cron + ShellScript + PHPで無理やりデーモンを作っており、管理が難しい 配信開始から終了まで数時間掛かる DBからデータを取得
~ WebPush通知送信までの流れが複雑 通知送信後、DBに急激な書き込み負荷が掛かる などなど… 12 DB書き込みでの負荷問題とその解決
問題点 ユーザ情報が少なすぎて、WebPushの機能をフルに使えない WebPushを送信できるタイミングが決め打ちされている cron + ShellScript + PHPで無理やりデーモンを作っており、管理が難しい 配信開始から終了まで数時間掛かる DBからデータを取得
~ WebPush通知送信までの流れが複雑 通知送信後、DBに急激な書き込み負荷が掛かる などなど… 13 DB書き込みでの負荷問題とその解決
問題点 14 ブラウザから受信通知を受け、並列で受信状況記録を行う 受信状況記録(並列) DB書き込みでの負荷問題とその解決 Push通知送信(並列) 受信通知(各ブラウザから)
問題点 15 並列での受信状況記録が急激すぎて、DBへの書き込みが高負荷に 受信状況記録(並列) DB書き込みでの負荷問題とその解決 Push通知送信(並列) 受信通知(各ブラウザから)
問題点 16 並列での受信状況記録が急激すぎて、DBへの書き込みが高負荷に 受信状況記録(並列) 必須 DB書き込みでの負荷問題とその解決 Push通知送信(並列) 受信通知(各ブラウザから)
解決策 17 この機能は必須だったので、別のサービスを噛ませることに 受信通知(各ブラウザから) DB書き込みでの負荷問題とその解決 Push通知送信(並列)
18 Amazon Timestream DB書き込みでの負荷問題とその解決
Amazon Timestreamとは? DB書き込みでの負荷問題とその解決 19 解決策 > Amazon Timestream は、高速かつスケーラブルなサーバーレス時系列データベースサービスです。1 日あたり
数兆件規模のイベントを最大 1,000 倍の速度でより簡単に保存および分析できます。Amazon Timestream は、容 量とパフォーマンスを調整するために自動的にスケールアップまたはスケールダウンするので、基盤インフラスト ラクチャの管理が不要です。 要は、書き込みにとても強い https://aws.amazon.com/jp/timestream/
解決策 20 Timestreamで直接の書き込みを受け、DBへは一定時間ごとに一括入力 受信状況記録(並列) 一括取得 一括入力 一括リクエスト 受信通知 (各ブラウザから) DB書き込みでの負荷問題とその解決
DB書き込みでの負荷問題とその解決 21 通知の送信状況記録時のDB書き込み負荷 DB書き込みでの負荷問題とその解決
問題点 22 数十万人 最終確認で、数十万人相当にWebPushを送ってみた DB書き込みでの負荷問題とその解決
問題点 DB書き込みでの負荷問題とその解決 数十万人 最終確認で、数十万人相当にWebPushを送ってみた 問題発生 23
問題点 24 DBのCPU使用率 送信開始 100 75 50 25 0 問題発生
(グラフはイメージです) DB書き込みでの負荷問題とその解決
問題点 25 既存処理はこうなっているが、リビルドに際し新しく機能を追加した DB書き込みでの負荷問題とその解決 受信通知(各ブラウザから) Push通知送信(並列)
問題点 26 Push通知送信時に、送信状況を記録する機能を追加 DB書き込みでの負荷問題とその解決 送信状況記録(並列) Push通知送信(並列) 受信通知(各ブラウザから)
問題点 27 並列での送信状況記録が急激すぎて、DBへの書き込みが高負荷に Push通知送信(並列) 受信通知(各ブラウザから) DB書き込みでの負荷問題とその解決 送信状況記録(並列)
解決策 28 Push通知送信(並列) 受信通知(各ブラウザから) DB書き込みでの負荷問題とその解決 「ユーザへの通知の送信状況記録」は、Push通知において必須要件ではないので削除 あったほうが便利ではあったが、負荷と天秤にかけた
解決 以上の仕組みで、現在は元気に動いている 29 DB書き込みでの負荷問題とその解決
今後の展望 30
Amazon Timestream Amazon SQS Timestreamは最適? 仕様・コスト・開発のしやすさなどから、SQSのほうが最適な可能性がある 今後の展望 31 検証し、必要に応じて変更
どこまでデータをとっておく? DBの負荷は減ったが、放っておくとデータ量自体は今後も増えていってしまう 今後の展望 32 適切なタイミングで、データを集計・削除する仕組みを入れてもいいかも?
まとめ 33
DBへの急激な書き込み負荷を抑えるには 本当に必要なデータなのか、改めて考える まとめ 34 直にDBに書き込むのではなく、Timestreamなど書き込み負荷に強い サービスを経由する データ書き込みが多いサービスはDB周りが結構シビアなので、「あったほうがいい」くらいの ものは削る必要がある場合も 書き込み負荷に強いサービスも種類があるので、最適なものを選ぶ