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. 1
    BASE株式会社 永野峻輔 (@glassmonekey)
    BASEの資金調達サービスを
    New Relicで楽に
    パフォーマンス改善できた話

    View full-size slide

  2. © 2012-2021 BASE, Inc. 2
    @glassmonekey
    #NRUG
    BASEは160万ショップ

    View full-size slide

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

    View full-size slide

  4. © 2012-2021 BASE, Inc. 4
    © 2012-2021 BASE, Inc. 4
    資金調達APIの
    パフォーマンス改善できた話

    View full-size slide

  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
    永野 峻輔 (ながの しゅんすけ)
    今年のアドベントカレンダー

    View full-size slide

  6. © 2012-2021 BASE, Inc. 6
    @glassmonekey
    #NRUG
    今日話すこと
    実はこれを実現するために一番苦労した話です
    https://devblog.thebase.in/entry/looker-debut

    View full-size slide

  7. © 2012-2021 BASE, Inc. 7
    @glassmonekey
    #NRUG
    YELL BANKの構成図 (一部簡略化)
    提供金額 算出 API
    BASE加盟店さま
    BASE BANKチームで管理
    機械学習 API
    資金提供API

    View full-size slide

  8. © 2012-2021 BASE, Inc. 8
    @glassmonekey
    #NRUG
    ショップカルテとは?
    ショップごとの情報を
    日毎で把握できる
    ダッシュボード

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  11. © 2012-2021 BASE, Inc. 11
    @glassmonekey
    #NRUG
    記録システム構成図
    提供金額 記録バッチ 機械学習 API
    記録バケット
    提供金額 算出 API

    View full-size slide

  12. © 2012-2021 BASE, Inc. 12
    © 2012-2021 BASE, Inc. 12
    APIからログデータをつくる

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  16. © 2012-2021 BASE, Inc. 16
    @glassmonekey
    #NRUG
    突然の死
    提供金額
    記録バッチ
    機械学習API
    提供金額 算出 API
    ● CPU/メモリーともに50%ぐらい
    ● 後続のLambdaには余裕があった (1/4の稼働率)

    View full-size slide

  17. © 2012-2021 BASE, Inc. 17
    @glassmonekey
    #NRUG
    仮説
    ● 処理が並列に捌けてない?
    ● どこかに処理のボトルネックがある?

    View full-size slide

  18. © 2012-2021 BASE, Inc. 18
    © 2012-2021 BASE, Inc. 18
    処理が何らかの要因で並列に捌けてない?

    View full-size slide

  19. © 2012-2021 BASE, Inc. 19
    @glassmonekey
    #NRUG
    根拠
    機械学習
    システム群
    提供金額
    算出 API
    ● 後続の稼働率は約25%
    ● 最大でもAPIのコンテナ数と一致

    View full-size slide

  20. © 2012-2021 BASE, Inc. 20
    @glassmonekey
    #NRUG
    Gunicornの投入
    ● Python製APIで並列処理を扱えるためのミドルウェア
    ● python app.py だけだとリクエストのブロッキングが発生してた
    https://gunicorn.org/

    View full-size slide

  21. © 2012-2021 BASE, Inc. 21
    @glassmonekey
    #NRUG
    スループット向上
    約1.5倍で
    安定するように
    200rpmぐらいが許容だった。 300rpm 超えても安定
    before after

    View full-size slide

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

    View full-size slide

  23. © 2012-2021 BASE, Inc. 23
    @glassmonekey
    #NRUG
    謎の空白期間が分散トレースに
    空白の6秒間

    View full-size slide

  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

    View full-size slide

  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」

    View full-size slide

  26. © 2012-2021 BASE, Inc. 26
    @glassmonekey
    #NRUG
    ボトルネックの正体
    提供金額
    記録バッチ
    機械学習
    システム群
    提供金額
    算出 API
    異常検知モデル
    異常検知
    モデルのロード

    View full-size slide

  27. © 2012-2021 BASE, Inc. 27
    @glassmonekey
    #NRUG
    パフォーマンス向上
    約20%改善
    異常検知モデルのロードを
    初回のみに変更
    外部API部分が
    ボトルネック

    View full-size slide

  28. © 2012-2021 BASE, Inc. 28
    @glassmonekey
    #NRUG
    パフォーマンス向上その2
    約30%改善
    外部依存の呼び出しを減らすように
    リファクタ

    View full-size slide

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

    View full-size slide

  30. © 2012-2021 BASE, Inc. 30
    @glassmonekey
    #NRUG
    やれたこと
    ● スループット向上 (1.5倍以上耐えられるように)
    ● 処理速度改善 (約50%削減)
    ● インフラコストの削減

    View full-size slide

  31. © 2012-2021 BASE, Inc. 31
    全データ記録の実施期間を
    90日想定から7日まで短縮できた。

    View full-size slide

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

    View full-size slide

  33. © 2012-2021 BASE, Inc. 33
    @glassmonekey
    #NRUG
    やれてないこと(個人的に)
    ● ダッシュボード化(標準のサマリーが便利故)
    ● NRQL活用
    ● パフォーマンス監視
    ● エンドユーザーレベルではまだまだ遅いので改善

    View full-size slide

  34. © 2012-2021 BASE, Inc. 34
    @glassmonekey
    #NRUG
    感想
    ● 計測が簡単にできるのは楽だった。分散トレース良い。
    ● 推測するな計測しろ。しかし仮説立ても大事。
    ● 仕組み化していきたい。

    View full-size slide

  35. © 2012-2021 BASE, Inc. 35
    BASEの資金調達サービスを
    New Relicで楽に
    パフォーマンス改善できました。

    View full-size slide

  36. © 2012-2021 BASE, Inc. 36
    @glassmonekey
    #NRUG
    宣伝その1
    https://github.com/budougumi0617/nrseg
    budougumi0617/nrseg
    Goで既存のAPIに
    セグメントを追加してくれる
    CLIツール

    View full-size slide

  37. © 2012-2021 BASE, Inc. 37
    @glassmonekey
    #NRUG
    宣伝その2
    https://devblog.thebase.in
    Adventカレンダーやってます。

    View full-size slide