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
BASEの資金調達サービスを New Relicで楽に パフォーマンス改善できた話
Search
glassmonenkey
December 15, 2021
Programming
0
1.6k
BASEの資金調達サービスを New Relicで楽に パフォーマンス改善できた話
NRUG (New Relic User Group) vol1でLTをしました。
https://nrug.connpass.com/event/230940/
glassmonenkey
December 15, 2021
Tweet
Share
More Decks by glassmonenkey
See All by glassmonenkey
アジャイルテストの4象限で考える プロダクト開発の品質への向き合い方
nagano
1
2.1k
パッケージ管理ツール Ryeへの旅路
nagano
1
560
PHPerにとってのWebAssemblyの可能性
nagano
1
1.4k
PHPをブラウザで動かす技術
nagano
0
2.5k
PHPとWebAssembly
nagano
19
5.8k
アジャイルで始める データ分析基盤構築
nagano
1
3.4k
Goで始めるTDD
nagano
1
2.9k
Python製の姓名分割 ライブラリをGoに移植した話
nagano
0
1.5k
PHPとGraphQL
nagano
3
6k
Other Decks in Programming
See All in Programming
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
300
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
850
Bytecode Manipulation 으로 생산성 높이기
bigstark
2
380
GitHub Copilot and GitHub Codespaces Hands-on
ymd65536
1
120
Java on Azure で LangGraph!
kohei3110
0
170
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
230
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
880
FormFlow - Build Stunning Multistep Forms
yceruto
1
190
CursorはMCPを使った方が良いぞ
taigakono
1
170
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
46
30k
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
1
370
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
160
Featured
See All Featured
Become a Pro
speakerdeck
PRO
28
5.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Building Applications with DynamoDB
mza
95
6.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Code Review Best Practice
trishagee
68
18k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Building an army of robots
kneath
306
45k
Visualization
eitanlees
146
16k
How to train your dragon (web standard)
notwaldorf
93
6.1k
How STYLIGHT went responsive
nonsquared
100
5.6k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Transcript
© 2012-2021 BASE, Inc. 1 BASE株式会社 永野峻輔 (@glassmonekey) BASEの資金調達サービスを New
Relicで楽に パフォーマンス改善できた話
© 2012-2021 BASE, Inc. 2 @glassmonekey #NRUG BASEは160万ショップ
© 2012-2021 BASE, Inc. 3 @glassmonekey #NRUG 資金調達サービス
© 2012-2021 BASE, Inc. 4 © 2012-2021 BASE, Inc. 4
資金調達APIの パフォーマンス改善できた話
© 2012-2021 BASE, Inc. 5 @glassmonekey #NRUG 自己紹介 所属 BASE
BANK株式会社 Software Developer Go, PHP, Pythonあたりをよく書いています 趣味 Flutterアプリ開発 hasura.ioやsupabaseがマイブーム SNS Twitter: @glassmonekey Github: https://github.com/glassmonkey 永野 峻輔 (ながの しゅんすけ) 今年のアドベントカレンダー
© 2012-2021 BASE, Inc. 6 @glassmonekey #NRUG 今日話すこと 実はこれを実現するために一番苦労した話です https://devblog.thebase.in/entry/looker-debut
© 2012-2021 BASE, Inc. 7 @glassmonekey #NRUG YELL BANKの構成図 (一部簡略化)
提供金額 算出 API BASE加盟店さま BASE BANKチームで管理 機械学習 API 資金提供API
© 2012-2021 BASE, Inc. 8 @glassmonekey #NRUG ショップカルテとは? ショップごとの情報を 日毎で把握できる
ダッシュボード
© 2012-2021 BASE, Inc. 9 @glassmonekey #NRUG 提供金額の算出結果の情報が DBにない
© 2012-2021 BASE, Inc. 10 1 2 3 @glassmonekey #NRUG
APIは過去のデータを再現できるように Python製のAPIからログデータを作る ログデータをデータ基盤の形式に加工 提供金額記録システム
© 2012-2021 BASE, Inc. 11 @glassmonekey #NRUG 記録システム構成図 提供金額 記録バッチ
機械学習 API 記録バケット 提供金額 算出 API
© 2012-2021 BASE, Inc. 12 © 2012-2021 BASE, Inc. 12
APIからログデータをつくる
© 2012-2021 BASE, Inc. 13 @glassmonekey #NRUG 過去全件記録に90日の概算🙀 効率よくデータを記録したい
© 2012-2021 BASE, Inc. 14 @glassmonekey #NRUG 大量のAPIリクエスト
© 2012-2021 BASE, Inc. 15 @glassmonekey #NRUG _人人人人人人_ > 突然の死 <  ̄Y^Y^Y^Y^Y ̄
© 2012-2021 BASE, Inc. 16 @glassmonekey #NRUG 突然の死 提供金額 記録バッチ
機械学習API 提供金額 算出 API • CPU/メモリーともに50%ぐらい • 後続のLambdaには余裕があった (1/4の稼働率)
© 2012-2021 BASE, Inc. 17 @glassmonekey #NRUG 仮説 • 処理が並列に捌けてない?
• どこかに処理のボトルネックがある?
© 2012-2021 BASE, Inc. 18 © 2012-2021 BASE, Inc. 18
処理が何らかの要因で並列に捌けてない?
© 2012-2021 BASE, Inc. 19 @glassmonekey #NRUG 根拠 機械学習 システム群
提供金額 算出 API • 後続の稼働率は約25% • 最大でもAPIのコンテナ数と一致
© 2012-2021 BASE, Inc. 20 @glassmonekey #NRUG Gunicornの投入 • Python製APIで並列処理を扱えるためのミドルウェア
• python app.py だけだとリクエストのブロッキングが発生してた https://gunicorn.org/
© 2012-2021 BASE, Inc. 21 @glassmonekey #NRUG スループット向上 約1.5倍で 安定するように
200rpmぐらいが許容だった。 300rpm 超えても安定 before after
© 2012-2021 BASE, Inc. 22 © 2012-2021 BASE, Inc. 22
どこかに処理のボトルネックがある?
© 2012-2021 BASE, Inc. 23 @glassmonekey #NRUG 謎の空白期間が分散トレースに 空白の6秒間
© 2012-2021 BASE, Inc. 24 @glassmonekey #NRUG Pythonの分散トレース • New
Relicのfunction_trace機能を利用 ◦ https://docs.newrelic.com/docs/apm/agents/python-agent/configuration/python-agent-configuration/ • newrelic.iniの設定追加が必要 • 同僚謹製のCLIで雛形を作成 budougumi0617/list_func
© 2012-2021 BASE, Inc. 25 @glassmonekey #NRUG 設定ファイルイメージ [newrelic] transaction_tracer.function_trace
= lib.hoge:functionA lib.fuga:ClassX.methodY 以下が分散トレースに落ちるようになる • lib.hogeパッケージの「functionA」 • lib.fugaパッケージの「ClassXのmethodY」
© 2012-2021 BASE, Inc. 26 @glassmonekey #NRUG ボトルネックの正体 提供金額 記録バッチ
機械学習 システム群 提供金額 算出 API 異常検知モデル 異常検知 モデルのロード
© 2012-2021 BASE, Inc. 27 @glassmonekey #NRUG パフォーマンス向上 約20%改善 異常検知モデルのロードを
初回のみに変更 外部API部分が ボトルネック
© 2012-2021 BASE, Inc. 28 @glassmonekey #NRUG パフォーマンス向上その2 約30%改善 外部依存の呼び出しを減らすように
リファクタ
© 2012-2021 BASE, Inc. 29 @glassmonekey #NRUG インフラコスト削減 NATのコストを ほぼ半分に
© 2012-2021 BASE, Inc. 30 @glassmonekey #NRUG やれたこと • スループット向上
(1.5倍以上耐えられるように) • 処理速度改善 (約50%削減) • インフラコストの削減
© 2012-2021 BASE, Inc. 31 全データ記録の実施期間を 90日想定から7日まで短縮できた。
© 2012-2021 BASE, Inc. 32 @glassmonekey #NRUG 実現できた👏 https://devblog.thebase.in/entry/looker-debut
© 2012-2021 BASE, Inc. 33 @glassmonekey #NRUG やれてないこと(個人的に) • ダッシュボード化(標準のサマリーが便利故)
• NRQL活用 • パフォーマンス監視 • エンドユーザーレベルではまだまだ遅いので改善
© 2012-2021 BASE, Inc. 34 @glassmonekey #NRUG 感想 • 計測が簡単にできるのは楽だった。分散トレース良い。
• 推測するな計測しろ。しかし仮説立ても大事。 • 仕組み化していきたい。
© 2012-2021 BASE, Inc. 35 BASEの資金調達サービスを New Relicで楽に パフォーマンス改善できました。
© 2012-2021 BASE, Inc. 36 @glassmonekey #NRUG 宣伝その1 https://github.com/budougumi0617/nrseg budougumi0617/nrseg
Goで既存のAPIに セグメントを追加してくれる CLIツール
© 2012-2021 BASE, Inc. 37 @glassmonekey #NRUG 宣伝その2 https://devblog.thebase.in Adventカレンダーやってます。