Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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.7k
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
encoding/json/v2で何が変わるか
nagano
14
4k
アジャイルテストの4象限で考える プロダクト開発の品質への向き合い方
nagano
1
2.3k
パッケージ管理ツール Ryeへの旅路
nagano
1
600
PHPerにとってのWebAssemblyの可能性
nagano
1
1.5k
PHPをブラウザで動かす技術
nagano
0
2.7k
PHPとWebAssembly
nagano
19
6.1k
アジャイルで始める データ分析基盤構築
nagano
1
3.6k
Goで始めるTDD
nagano
1
3k
Python製の姓名分割 ライブラリをGoに移植した話
nagano
0
1.6k
Other Decks in Programming
See All in Programming
connect-python: convenient protobuf RPC for Python
anuraaga
0
370
チームをチームにするEM
hitode909
0
250
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
170
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
140
愛される翻訳の秘訣
kishikawakatsumi
1
270
CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム
ternbusty
7
2k
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
780
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
5
19k
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
960
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.1k
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.4k
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Building Adaptive Systems
keathley
44
2.9k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Unsuck your backbone
ammeep
671
58k
Side Projects
sachag
455
43k
For a Future-Friendly Web
brad_frost
180
10k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
The Cult of Friendly URLs
andyhume
79
6.7k
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カレンダーやってます。