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
710
急激な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.3k
実際にリビルドを完遂してみて
tmiura0203
0
660
Spring Bootという強すぎるフレームワークについて
tmiura0203
0
810
Other Decks in Technology
See All in Technology
“自分”を大切に、フラットに。キャリアチェンジしてからの一年 三ヶ月で見えたもの。
maimyyym
0
300
HCP TerraformとAzure:イオンスマートテクノロジーのインフラ革新 / HCP Terraform and Azure AEON Smart Technology's Infrastructure Innovation
aeonpeople
3
990
Agentic AI時代のプロダクトマネジメントことはじめ〜仮説検証編〜
masakazu178
3
400
AWSエンジニアに捧ぐLangChainの歩き方
tsukuboshi
0
220
サーバーレスで楽しよう!お気軽に始められる3つのポイント / Have fun with Serverless!
_kensh
2
230
Server Side Swift 実践レポート: 2024年に案件で採用して見えた課題と可能性
yusuga
1
420
ObservabilityCON on the Road Tokyoの見どころ
hamadakoji
0
210
Skip Skip Run Run Run ♫
temoki
0
360
panicを深ぼってみる
kworkdev
PRO
2
150
Postman Vaultを使った秘密情報の安全な管理
nagix
3
140
Japan AWS Jr. Championsがお届けするre:Invent2024のハイライト ~ラスベガスで見てきた景色~
fukuchiiinu
0
1.1k
第27回クラウド女子会 ~re:Invent 振り返りLT会~ 宣言型ポリシー、使ってみたらこうだった!
itkr2305
0
290
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
6
220
Statistics for Hackers
jakevdp
797
220k
BBQ
matthewcrist
85
9.4k
4 Signs Your Business is Dying
shpigford
182
22k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
A Tale of Four Properties
chriscoyier
157
23k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
KATA
mclloyd
29
14k
How STYLIGHT went responsive
nonsquared
96
5.3k
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周りが結構シビアなので、「あったほうがいい」くらいの ものは削る必要がある場合も 書き込み負荷に強いサービスも種類があるので、最適なものを選ぶ