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

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

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

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

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

384e4d8bab8ac2a5e6f64dab1300c491?s=128

glassmonenkey

December 15, 2021
Tweet

More Decks by glassmonenkey

Other Decks in Programming

Transcript

  1. © 2012-2021 BASE, Inc. 1 BASE株式会社 永野峻輔 (@glassmonekey) BASEの資金調達サービスを New

    Relicで楽に パフォーマンス改善できた話
  2. © 2012-2021 BASE, Inc. 2 @glassmonekey #NRUG BASEは160万ショップ

  3. © 2012-2021 BASE, Inc. 3 @glassmonekey #NRUG 資金調達サービス

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

    資金調達APIの パフォーマンス改善できた話
  5. © 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 永野 峻輔 (ながの しゅんすけ) 今年のアドベントカレンダー
  6. © 2012-2021 BASE, Inc. 6 @glassmonekey #NRUG 今日話すこと 実はこれを実現するために一番苦労した話です https://devblog.thebase.in/entry/looker-debut

  7. © 2012-2021 BASE, Inc. 7 @glassmonekey #NRUG YELL BANKの構成図 (一部簡略化)

    提供金額 算出 API BASE加盟店さま BASE BANKチームで管理 機械学習 API 資金提供API
  8. © 2012-2021 BASE, Inc. 8 @glassmonekey #NRUG ショップカルテとは? ショップごとの情報を 日毎で把握できる

    ダッシュボード
  9. © 2012-2021 BASE, Inc. 9 @glassmonekey #NRUG 提供金額の算出結果の情報が DBにない

  10. © 2012-2021 BASE, Inc. 10 1 2 3 @glassmonekey #NRUG

    APIは過去のデータを再現できるように Python製のAPIからログデータを作る ログデータをデータ基盤の形式に加工 提供金額記録システム
  11. © 2012-2021 BASE, Inc. 11 @glassmonekey #NRUG 記録システム構成図 提供金額 記録バッチ

    機械学習 API 記録バケット 提供金額 算出 API
  12. © 2012-2021 BASE, Inc. 12 © 2012-2021 BASE, Inc. 12

    APIからログデータをつくる
  13. © 2012-2021 BASE, Inc. 13 @glassmonekey #NRUG 過去全件記録に90日の概算🙀 効率よくデータを記録したい

  14. © 2012-2021 BASE, Inc. 14 @glassmonekey #NRUG 大量のAPIリクエスト

  15. © 2012-2021 BASE, Inc. 15 @glassmonekey #NRUG _人人人人人人_ > 突然の死 <  ̄Y^Y^Y^Y^Y ̄

  16. © 2012-2021 BASE, Inc. 16 @glassmonekey #NRUG 突然の死 提供金額 記録バッチ

    機械学習API 提供金額 算出 API • CPU/メモリーともに50%ぐらい • 後続のLambdaには余裕があった (1/4の稼働率)
  17. © 2012-2021 BASE, Inc. 17 @glassmonekey #NRUG 仮説 • 処理が並列に捌けてない?

    • どこかに処理のボトルネックがある?
  18. © 2012-2021 BASE, Inc. 18 © 2012-2021 BASE, Inc. 18

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

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

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

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

    どこかに処理のボトルネックがある?
  23. © 2012-2021 BASE, Inc. 23 @glassmonekey #NRUG 謎の空白期間が分散トレースに 空白の6秒間

  24. © 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
  25. © 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」
  26. © 2012-2021 BASE, Inc. 26 @glassmonekey #NRUG ボトルネックの正体 提供金額 記録バッチ

    機械学習 システム群 提供金額 算出 API 異常検知モデル 異常検知 モデルのロード
  27. © 2012-2021 BASE, Inc. 27 @glassmonekey #NRUG パフォーマンス向上 約20%改善 異常検知モデルのロードを

    初回のみに変更 外部API部分が ボトルネック
  28. © 2012-2021 BASE, Inc. 28 @glassmonekey #NRUG パフォーマンス向上その2 約30%改善 外部依存の呼び出しを減らすように

    リファクタ
  29. © 2012-2021 BASE, Inc. 29 @glassmonekey #NRUG インフラコスト削減 NATのコストを ほぼ半分に

  30. © 2012-2021 BASE, Inc. 30 @glassmonekey #NRUG やれたこと • スループット向上

    (1.5倍以上耐えられるように) • 処理速度改善 (約50%削減) • インフラコストの削減
  31. © 2012-2021 BASE, Inc. 31 全データ記録の実施期間を 90日想定から7日まで短縮できた。

  32. © 2012-2021 BASE, Inc. 32 @glassmonekey #NRUG 実現できた👏 https://devblog.thebase.in/entry/looker-debut

  33. © 2012-2021 BASE, Inc. 33 @glassmonekey #NRUG やれてないこと(個人的に) • ダッシュボード化(標準のサマリーが便利故)

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

    • 推測するな計測しろ。しかし仮説立ても大事。 • 仕組み化していきたい。
  35. © 2012-2021 BASE, Inc. 35 BASEの資金調達サービスを New Relicで楽に パフォーマンス改善できました。

  36. © 2012-2021 BASE, Inc. 36 @glassmonekey #NRUG 宣伝その1 https://github.com/budougumi0617/nrseg budougumi0617/nrseg

    Goで既存のAPIに セグメントを追加してくれる CLIツール
  37. © 2012-2021 BASE, Inc. 37 @glassmonekey #NRUG 宣伝その2 https://devblog.thebase.in Adventカレンダーやってます。