Slide 1

Slide 1 text

© 2012-2021 BASE, Inc. 1 BASE株式会社 永野峻輔 (@glassmonekey) BASEの資金調達サービスを New Relicで楽に パフォーマンス改善できた話

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

© 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

Slide 25

Slide 25 text

© 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」

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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