毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
by
Sho Sasaki
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
毎日13時間もかかるバッチ処理を たった3日で60%短縮するために やったこと Sasaki Sho 2024/12/22 PHP Conference Japan 2024
Slide 2
Slide 2 text
Sasaki Sho X:@sho_ssk_ 所属:株式会社ウィルゲート 趣味:サッカー観戦
Slide 3
Slide 3 text
このLTで伝えたいこと
Slide 4
Slide 4 text
仕様変更も パフォーマンス改善に貢献できる!
Slide 5
Slide 5 text
対象のサービスについて
Slide 6
Slide 6 text
https://tact-seo.com/
Slide 7
Slide 7 text
● 検索キーワードに対して適切にページを 表示できるようにするためのツール
Slide 8
Slide 8 text
● 検索キーワードに対して適切にページを 表示できるようにするためのツール ● リリースから7年経過、技術負債や蓄積 データ量および処理の長期化が課題
Slide 9
Slide 9 text
13時間かかるバッチについて
Slide 10
Slide 10 text
対象:サイトの順位データを集計するバッチ
Slide 11
Slide 11 text
対象:サイトの順位データを集計するバッチ ● 仕様上、毎日“絶対に”完了しないといけない
Slide 12
Slide 12 text
対象:サイトの順位データを集計するバッチ ● 仕様上、毎日“絶対に”完了しないといけない ● 順位データおよびクライアント数の増加に より処理時間が長期化
Slide 13
Slide 13 text
対象:サイトの順位データを集計するバッチ ● 仕様上、毎日“絶対に”完了しないといけない ● 順位データおよびクライアント数の増加に より処理時間が長期化 ● 毎日 1億件!以上のレコードをRDSへ追加
Slide 14
Slide 14 text
このバッチの問題点 2選
Slide 15
Slide 15 text
このバッチの問題点 2選 ● 集計が完了しないと表示されない画面がある
Slide 16
Slide 16 text
このバッチの問題点 2選 ● 集計が完了しないと表示されない画面がある ● 集計中にRDSの負荷が高騰し、画面レスポン スに遅れが発生
Slide 17
Slide 17 text
このバッチの問題点 2選 ● 集計が完了しないと表示されない画面がある ● 集計中にRDSの負荷が高騰し、画面レスポン スに遅れが発生 顧客のUXに大きな悪影響
Slide 18
Slide 18 text
なんとかしよう!
Slide 19
Slide 19 text
①ロジック改修してみよう
Slide 20
Slide 20 text
①ロジック改修してみよう ● 対象コードが超レガシー
Slide 21
Slide 21 text
①ロジック改修してみよう ● 対象コードが超レガシー ● 既に数十億単位のデータが存在するテーブルの 構成変更
Slide 22
Slide 22 text
①ロジック改修してみよう ● 対象コードが超レガシー ● 既に数十億単位のデータが存在するテーブルの 構成変更 無理そう
Slide 23
Slide 23 text
②ビジネスサイドへ利用状況を確認
Slide 24
Slide 24 text
②ビジネスサイドへ利用状況を確認 ● そもそも全期間のデータ見てない
Slide 25
Slide 25 text
②ビジネスサイドへ利用状況を確認 ● そもそも全期間のデータ見てない ● 過去1年分くらい見れれば十分
Slide 26
Slide 26 text
②ビジネスサイドへ利用状況を確認 ● そもそも全期間のデータ見てない ● 過去1年分くらい見れれば十分 全期間の集計いらなくない?
Slide 27
Slide 27 text
集計期間を絞ろう!
Slide 28
Slide 28 text
やったこと
Slide 29
Slide 29 text
①表示期間を設定する画面を追加
Slide 30
Slide 30 text
①表示期間を設定する画面を追加
Slide 31
Slide 31 text
②SQLクエリへ1行追加
Slide 32
Slide 32 text
②SQLクエリへ1行追加 全期間を集計
Slide 33
Slide 33 text
②SQLクエリへ1行追加 全期間を集計 指定期間のみ集計
Slide 34
Slide 34 text
その結果
Slide 35
Slide 35 text
バッチの実行時間
Slide 36
Slide 36 text
13h → バッチの実行時間
Slide 37
Slide 37 text
13h → 5h バッチの実行時間
Slide 38
Slide 38 text
13h → 5h バッチの実行時間 60%の削減に成功! 🎉
Slide 39
Slide 39 text
圧倒的に少ない工数で対応
Slide 40
Slide 40 text
圧倒的に少ない工数で対応 40人日 →
Slide 41
Slide 41 text
40人日 → 3人日 圧倒的に少ない工数で対応
Slide 42
Slide 42 text
学んだこと
Slide 43
Slide 43 text
● 仕様変更もパフォーマンス改善に貢献でき る!
Slide 44
Slide 44 text
● 仕様変更もパフォーマンス改善に貢献でき る! ● “今”必要なデータの質と量を確認しよう
Slide 45
Slide 45 text
“柔軟に”パフォーマンス 改善していきましょう!
Slide 46
Slide 46 text
fin