Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BASEの資金調達サービスを New Relicで楽に パフォーマンス改善できた話

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for glassmonenkey glassmonenkey
December 15, 2021

BASEの資金調達サービスを New Relicで楽に パフォーマンス改善できた話

NRUG (New Relic User Group) vol1でLTをしました。

https://nrug.connpass.com/event/230940/

Avatar for glassmonenkey

glassmonenkey

December 15, 2021
Tweet

More Decks by glassmonenkey

Other Decks in Programming

Transcript

  1. © 2012-2021 BASE, Inc. 4 © 2012-2021 BASE, Inc. 4

    資金調達APIの パフォーマンス改善できた話
  2. © 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 永野 峻輔 (ながの しゅんすけ) 今年のアドベントカレンダー
  3. © 2012-2021 BASE, Inc. 7 @glassmonekey #NRUG YELL BANKの構成図 (一部簡略化)

    提供金額 算出 API BASE加盟店さま BASE BANKチームで管理 機械学習 API 資金提供API
  4. © 2012-2021 BASE, Inc. 10 1 2 3 @glassmonekey #NRUG

    APIは過去のデータを再現できるように Python製のAPIからログデータを作る ログデータをデータ基盤の形式に加工 提供金額記録システム
  5. © 2012-2021 BASE, Inc. 12 © 2012-2021 BASE, Inc. 12

    APIからログデータをつくる
  6. © 2012-2021 BASE, Inc. 16 @glassmonekey #NRUG 突然の死 提供金額 記録バッチ

    機械学習API 提供金額 算出 API • CPU/メモリーともに50%ぐらい • 後続のLambdaには余裕があった (1/4の稼働率)
  7. © 2012-2021 BASE, Inc. 18 © 2012-2021 BASE, Inc. 18

    処理が何らかの要因で並列に捌けてない?
  8. © 2012-2021 BASE, Inc. 19 @glassmonekey #NRUG 根拠 機械学習 システム群

    提供金額 算出 API • 後続の稼働率は約25% • 最大でもAPIのコンテナ数と一致
  9. © 2012-2021 BASE, Inc. 20 @glassmonekey #NRUG Gunicornの投入 • Python製APIで並列処理を扱えるためのミドルウェア

    • python app.py だけだとリクエストのブロッキングが発生してた https://gunicorn.org/
  10. © 2012-2021 BASE, Inc. 21 @glassmonekey #NRUG スループット向上 約1.5倍で 安定するように

    200rpmぐらいが許容だった。 300rpm 超えても安定 before after
  11. © 2012-2021 BASE, Inc. 22 © 2012-2021 BASE, Inc. 22

    どこかに処理のボトルネックがある?
  12. © 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
  13. © 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」
  14. © 2012-2021 BASE, Inc. 26 @glassmonekey #NRUG ボトルネックの正体 提供金額 記録バッチ

    機械学習 システム群 提供金額 算出 API 異常検知モデル 異常検知 モデルのロード
  15. © 2012-2021 BASE, Inc. 30 @glassmonekey #NRUG やれたこと • スループット向上

    (1.5倍以上耐えられるように) • 処理速度改善 (約50%削減) • インフラコストの削減
  16. © 2012-2021 BASE, Inc. 33 @glassmonekey #NRUG やれてないこと(個人的に) • ダッシュボード化(標準のサマリーが便利故)

    • NRQL活用 • パフォーマンス監視 • エンドユーザーレベルではまだまだ遅いので改善
  17. © 2012-2021 BASE, Inc. 34 @glassmonekey #NRUG 感想 • 計測が簡単にできるのは楽だった。分散トレース良い。

    • 推測するな計測しろ。しかし仮説立ても大事。 • 仕組み化していきたい。