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.4k
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
パッケージ管理ツール Ryeへの旅路
nagano
1
470
PHPerにとってのWebAssemblyの可能性
nagano
1
1.3k
PHPをブラウザで動かす技術
nagano
0
2.2k
PHPとWebAssembly
nagano
19
5.1k
アジャイルで始める データ分析基盤構築
nagano
1
3.2k
Goで始めるTDD
nagano
1
2.8k
Python製の姓名分割 ライブラリをGoに移植した話
nagano
0
1.4k
PHPとGraphQL
nagano
3
5.4k
PHP Conference Japan 2021
nagano
1
1.9k
Other Decks in Programming
See All in Programming
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
390
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
240
OpenTelemetryでRailsのパフォーマンス分析を始めてみよう(KoR2024)
ymtdzzz
4
1.5k
RailsのPull requestsのレビューの時に私が考えていること
yahonda
5
1.7k
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
3
400
gopls を改造したら開発生産性が高まった
satorunooshie
8
240
Vitest Browser Mode への期待 / Vitest Browser Mode
odanado
PRO
2
1.7k
VR HMDとしてのVision Pro+ゲーム開発について
yasei_no_otoko
0
100
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
150
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
330
Nuxtベースの「WXT」でChrome拡張を作成する | Vue Fes 2024 ランチセッション
moshi1121
1
500
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
200
Featured
See All Featured
Code Review Best Practice
trishagee
64
17k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Measuring & Analyzing Core Web Vitals
bluesmoon
1
39
The Pragmatic Product Professional
lauravandoore
31
6.3k
How to Ace a Technical Interview
jacobian
275
23k
YesSQL, Process and Tooling at Scale
rocio
167
14k
Building Better People: How to give real-time feedback that sticks.
wjessup
363
19k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.1k
Six Lessons from altMBA
skipperchong
26
3.5k
Adopting Sorbet at Scale
ufuk
73
9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
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カレンダーやってます。