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

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

glassmonenkey
December 15, 2021

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

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

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

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 感想 • 計測が簡単にできるのは楽だった。分散トレース良い。

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