Slide 1

Slide 1 text

© 2012-2025 BASE, Inc. 2025/04/12 PHPカンファレンス小田原2025 New RelicのAPMを活用したECサービス におけるメール遅延解消の舞台裏 1

Slide 2

Slide 2 text

© 2012-2025 BASE, Inc. 2 氏名:Futoshi Endo 所属:BASE株式会社 業務:バックエンド エンジニア 趣味:料理、音楽鑑賞、散歩 奥さんと、豆柴(どんちゃん)の三人で楽しく暮 らしています。 ● Endo Tech Blog ● https://scrapbox.io/fendo181/ Fendo181 自己紹介

Slide 3

Slide 3 text

© 2012-2023 BASE, Inc. アジェンダ 3

Slide 4

Slide 4 text

© 2012-2025 BASE, Inc. アジェンダ 4 ● 発表のゴール ● メールの配信遅延問題による影響 ● 遅延を解消するまでのステップの紹介 ● CUJ/SLI/SLOについて ● New Relic APMなどを活用した計測方法の解説 ● 改善後の結果について ● まとめ

Slide 5

Slide 5 text

© 2012-2023 BASE, Inc. 発表のゴール 5

Slide 6

Slide 6 text

© 2012-2025 BASE, Inc. 今日の発表ゴール 6 1 2 New RelicのAPMの活用方法について学べる 「推測ではなく、計測する事」の大事さについて学ぶ

Slide 7

Slide 7 text

© 2012-2023 BASE, Inc. メールの配信遅延問題による 影響について 7

Slide 8

Slide 8 text

© 2012-2025 BASE, Inc. 8 「これは20XX年の某日のお話...」

Slide 9

Slide 9 text

© 2012-2025 BASE, Inc. 9

Slide 10

Slide 10 text

© 2012-2025 BASE, Inc. 10 「頭を抱えているエンジニアが1人...」

Slide 11

Slide 11 text

© 2012-2025 BASE, Inc. 11

Slide 12

Slide 12 text

© 2012-2025 BASE, Inc. 12 「人気ショップさんの商品がTVに取り上 げられて嬉しい!...はずだが!」

Slide 13

Slide 13 text

© 2012-2025 BASE, Inc. 13 あの問題が 発生する...

Slide 14

Slide 14 text

© 2012-2025 BASE, Inc. 14 購入完了メールの配信遅延問題

Slide 15

Slide 15 text

© 2012-2025 BASE, Inc. 15 ● ショップさんの商品がTVやネットで取り 上げられと注文が殺到し、購入が短期間 で増加。結果、メールがさばけずメール の送信が遅延する事象。 ● キャンペーンなどのクーポン配布時でも 同様に遅延が発生していた(当時) メールの配信遅延問題による影響について

Slide 16

Slide 16 text

© 2012-2025 BASE, Inc. 16 メール送信のざっくり構成図(当時) 購入者 EC DB AWS SES メールの配信遅延による影響について

Slide 17

Slide 17 text

© 2012-2025 BASE, Inc. 17 購入者 EC DB AWS SES ①購入者が商品 を購入する メールの配信遅延による影響について メール送信のざっくり構成図(当時)

Slide 18

Slide 18 text

© 2012-2025 BASE, Inc. 18 購入者 EC DB AWS SES ②メールを送信す る為のデータを DB に保存する メールの配信遅延による影響について メール送信のざっくり構成図(当時)

Slide 19

Slide 19 text

© 2012-2025 BASE, Inc. 19 購入者 EC DB AWS SES 抽選商品 通常商品 予約商品 メールの配信遅延による影響について メール送信のざっくり構成図(当時)

Slide 20

Slide 20 text

© 2012-2025 BASE, Inc. 20 購入者 EC DB AWS SES 抽選商品 通常商品 予約商品 ③ メール送信用の batch を使ってcronで1分間 に送信する件数と メールタイプを指定し てDBからデータを取 得し、送信処理を行う メールの配信遅延による影響について メール送信のざっくり構成図(当時)

Slide 21

Slide 21 text

© 2012-2025 BASE, Inc. 21 購入者 EC DB AWS SES 抽選商品 通常商品 予約商品 抽選完了用の通知のメール 購入完了用のメール 予約完了用の通知用のメール メールの配信遅延による影響について メール送信のざっくり構成図(当時)

Slide 22

Slide 22 text

© 2012-2025 BASE, Inc. 22 購入者 EC DB AWS SES 抽選商品 通常商品 予約商品 購入完了用のメール メールの配信遅延による影響について メール送信のざっくり構成図(当時) 予約完了用の通知用のメール 抽選完了用の通知のメール ④ メール送信用の batchを 通じてAWS SES経由で メールを送信を行う

Slide 23

Slide 23 text

© 2012-2025 BASE, Inc. 23 購入者 EC DB AWS SES 抽選商品 通常商品 予約商品 購入完了用のメール ⑤購入者に メールが届く メールの配信遅延による影響について メール送信のざっくり構成図(当時) 抽選完了用の通知のメール 予約完了用の通知用のメール

Slide 24

Slide 24 text

© 2012-2025 BASE, Inc. 24 購入者 EC DB AWS SES 抽選商品 通常商品 予約商品 購入完了用のメール ⑤購入者に メールが届く メールの配信遅延による影響について メール送信のざっくり構成図(当時) 今回のケースでは 購入完了メールが遅延していた 購入完了用のメール 抽選完了用の通知のメール 予約完了用の通知用のメール

Slide 25

Slide 25 text

© 2012-2025 BASE, Inc. 25 メールの配信遅延による影響について ● ショップさんの商品がTVやネットで取り 上げられと注文が殺到し、購入が短期間 で増加すし、メールがさばけずメールの 送信が遅延する事象。 ● キャンペーンなどのクーポン配布時でも 同様に遅延が発生していた(当時) ● 購入者からすると「購入できてないです か?」と不安になり、お問い合わせにも繋 がる

Slide 26

Slide 26 text

© 2012-2025 BASE, Inc. 26 メールの配信遅延は購入者が 「安心・安全」に利用できるサービスの 信頼を損なってしまう メールの配信遅延による影響について

Slide 27

Slide 27 text

© 2012-2023 BASE, Inc. 遅延を解消するまでのステップについて 27

Slide 28

Slide 28 text

© 2012-2025 BASE, Inc. 28 遅延を解消するまでのステップについて よしゃ...! 色々試して早くし よう!!!

Slide 29

Slide 29 text

© 2012-2025 BASE, Inc. 29 ….. 遅延を解消するまでのステップについて

Slide 30

Slide 30 text

© 2012-2025 BASE, Inc. 30 そんな簡単にいくは ずがない! 遅延を解消するまでのステップについて

Slide 31

Slide 31 text

© 2012-2025 BASE, Inc. 31 ● DBに1000件以上レコードが作らていたが1分 間に200件程度しか送信ができてない ● アプリケーション側でN+1問題がおきてない かを調べたか問題なかった ● AWS SES でレートリミットの制限も特にか かってない ● DBで取得する件数を上げても変わらない ● 詳細な監視体制も整ってなく、原因がわから ない... 遅延を解消するまでのステップについて

Slide 32

Slide 32 text

© 2012-2025 BASE, Inc. 32 どうしたら ... 遅延を解消するまでのステップについて

Slide 33

Slide 33 text

© 2012-2025 BASE, Inc. 33 引用元: https://www.catb.org/esr/writings/taoup/html/ch01s06.html 遅延を解消するまでのステップについて

Slide 34

Slide 34 text

© 2012-2025 BASE, Inc. 34 Rule 1. プログラムが何処で処理時間を費やすのかは分からない。 ボトルネックは驚くべき場所で起こる。だからその箇所がボトルネックであるという証明 をするまで、当てずっぽうで高速化のためのハックを入れようとしてはならない。 Rule 2. 計測せよ。計測するまで最適化をするな 。そしてたとえ計測したとしても、ある 部分のコードが圧倒的に残りの部分より重い場合でなければ、最適化をしてはならな い。 遅延を解消するまでのステップについて 引用元: https://www.catb.org/esr/writings/taoup/html/ch01s06.html

Slide 35

Slide 35 text

© 2012-2025 BASE, Inc. 35 ● ボトルネック調査を十分におこなわず、先に手を動かしてしまった ○ 先にやるべき事は計測を行う為の基盤づくりを行い、次に具体的なアクショ ンを設定すべきだった ● PJメンバーとも相談をして、まずは以下の3つの指標を設定したうえで、計測 できる環境を用意し、遅延を解消することにしました。 ○ ユーザーにとって重要な体験(Critical User Journey) ○ サービスレベル指標(SLI:Service Level Indicators) ○ サービスレベル目標(SLO:Service Level Objectives) ※直近でSLI/SLO勉強会をやっていた事もきっかけに今回のプロジェクトでも導 入する事にした経緯があります 遅延を解消するまでのステップについて

Slide 36

Slide 36 text

© 2012-2023 BASE, Inc. CUJ/SLI/SLOについて 36

Slide 37

Slide 37 text

© 2012-2025 BASE, Inc. 37 ● CUJ(Critical user journey)とは ○ 多くの目標を達成するために共通するタスクや、非常に重要な目標を達成するた めに行う一連の流れを指します。 ● 全体のユーザー体験(フードデリバリーアプリのCUJ) ○ アプリを起動する ○ レストランを検索/選択する ○ メニューから商品を選ぶ ○ 注文を確定する ○ 支払いを行う ○ 配達状況を確認する ○ 料理を受け取る ● 特に重要なユーザー体験 ○ ユーザーが注文をして料理を受け取る CUJ/SLI/SLOについて

Slide 38

Slide 38 text

© 2012-2025 BASE, Inc. 38 ● SLI(サービスレベル指標)とは ○ SLI(Service Level Indicator)は、サービスの品質を測定するための具体的 な指標。SLIは、サービスのパフォーマンスを定量的に測定するために使用さ れます。モニタリングできるものが基。 ○ 例えば、Webサービスの応答時間やシステムの稼働率などがSLIの例 ■ リクエスト成功率(99.9%) ■ システム稼働時間(99.95%) CUJ/SLI/SLOについて

Slide 39

Slide 39 text

© 2012-2025 BASE, Inc. 39 ● SLO(サービスレベル目標)とは ○ SLO(Service Level Objective)は、SLIに基づいて設定された具体的な目標 値です。 SLOは、サービスのパフォーマンスを評価するための基準となりま す。 ■ 「APIのレスポンスタイムは、95%のリクエストで500ms以内」 ■ 月間のエラーレートは0.1%未満」 CUJ/SLI/SLOについて

Slide 40

Slide 40 text

© 2012-2025 BASE, Inc. 40 「購入完了メール送信」における CUJ/SLI/SLOを設定する CUJ/SLI/SLOについて

Slide 41

Slide 41 text

© 2012-2025 BASE, Inc. 41 全体のユーザー体験(購入完了メールにおけるCUJ) ○ 商品を購入する。 ○ ユーザーが購入完了メールをもらう ○ ユーザーが購入完了メールの中身をみたり、リンクをクリックしたり。 特に重要なユーザー体験 ○ ユーザーが商品を購入後に、購入完了メールが届く。 CUJ/SLI/SLOについて

Slide 42

Slide 42 text

© 2012-2025 BASE, Inc. 42 ● 購入完了メールにおけるSLI/SLOを設定する SLI ○ 購入完了メールの受信レイテンシ ■ (ユーザーが商品を購入後に購入完了メール受信されるまでの時間) SLO ○ 28日間でユーザが商品を購入してから購入完了メールがとどくまでの時間が120秒 以内の割合が97% CUJ/SLI/SLOについて

Slide 43

Slide 43 text

© 2012-2025 BASE, Inc. 43 購入者 EC DB AWS SES 抽選商品 通常商品 予約商品 購入完了用のメール メール送信のざっくり構成図(当時) CUJ/SLI/SLOについて

Slide 44

Slide 44 text

© 2012-2025 BASE, Inc. 44 購入者 EC DB AWS SES 抽選商品 通常商品 予約商品 購入完了用のメール メール送信のざっくり構成図(当時) このスコープでボトルネックを調査す ると遅延解消の原因が特定しやすいと 判断ができる CUJ/SLI/SLOについて

Slide 45

Slide 45 text

© 2012-2025 BASE, Inc. 45 CUJ/SLI/SLOを設定する事で どこのボトルネックを解消するべきかが 定まりやすく、戦略が立てやすい

Slide 46

Slide 46 text

© 2012-2023 BASE, Inc. New RelicのAPMを活用した 計測方法の紹介 46

Slide 47

Slide 47 text

© 2012-2025 BASE, Inc. 47 New RelicのAPMを活用した計測方法の紹介 ● NewRelicで提供されているAPM (Application Performance Monitoring)。 ● アプリケーションが想定通りのパフォーマンスを 発揮しているかどうかを監視し、その改善に向け た原因の特定や、改修の迅速化を実現するための プロセス、あるいはそのためのツールを指しま す。 ● APMを導入することで、アプリケーションの パフォーマンス低下やエラーを検知し、その原因 を素早く特定して対処することができる

Slide 48

Slide 48 text

© 2012-2025 BASE, Inc. 48 New RelicのAPMを活用した計測方法の紹介 APM > Transactions > Transaction trace > Trace detailsの一部を抜粋

Slide 49

Slide 49 text

© 2012-2025 BASE, Inc. 49 New RelicのAPMを活用した計測方法の紹介 ● New Relic APMの「トランザクショントレース(Transaction trace)」画面でメール の送信処理を見たところ、1回のメール送信処理の処理全体の所要時間で最大8分21秒 程かかっていた ● SMTP(CakeSocket, SmtpTransport)が逐次的に行われていて、トータルで時間か かってる ○ なぜSMTPが使われているか? ■ 歴史的経緯で当時、AWS API経由だとsjisで送れない。ガラケーユーザーの購入者 さんが困る為、SMTPを使っていた。

Slide 50

Slide 50 text

© 2012-2025 BASE, Inc. 50 New RelicのAPMを活用した計測方法の紹介 SMTP(1通あたり) ● 接続: 500〜800ms(遅いと1〜2秒) ● 送信処理: 300〜700ms → 合計:1通あたり1〜2秒以上になることも SES API(1通あたり) ● API POST:200〜400ms(場合によってはもっと速い) ● 非同期で並列送信可能 → 並列処理で1秒あたり数十通以上も可能 SMTP と SES APIを使った送信方法の違いについて

Slide 51

Slide 51 text

© 2012-2025 BASE, Inc. 51 New RelicのAPMを活用した計測方法の紹介 SMTPからSES APIに 切り替えたら トランザクションでの 遅延が解消しそう (戦略1)

Slide 52

Slide 52 text

© 2012-2025 BASE, Inc. 52 New RelicのAPMを活用した計測方法の紹介 ● DBに1000件以上レコードが作らていたが 1分間に200件程度しか送信できてない

Slide 53

Slide 53 text

© 2012-2025 BASE, Inc. 53 ● DBに1000件以上レコードが作らていたが 1分間に200件程度しか送信できてない ● NewRelicを確認したところ、LA/CPUの負荷 に余裕がある。 ● 例えると1000人の行列ができるラーメン屋が あるが、作っている人間が2人しかいない... New RelicのAPMを活用した計測方法の紹介

Slide 54

Slide 54 text

© 2012-2025 BASE, Inc. 54 New RelicのAPMを活用した計測方法の紹介 1分間の送信件数をあげ るためにbatchの並列数 や、EC2のインスタンスタ イプを上げたら遅延が解 消しそう (戦略2) SMTPからSES APIに 切り替えたら トランザクションでの 遅延が解消しそう (戦略1)

Slide 55

Slide 55 text

© 2012-2023 BASE, Inc. 改善後の結果について 55

Slide 56

Slide 56 text

© 2012-2025 BASE, Inc. 56 改善後の結果について 🎉購入完了メールの配達完了時間が平均40秒以下に収まった! 🎉購入完了メールのトランザクション時間も平均30秒以下に収まった! 🎉キャンペーン開始後や、クーポン配布後でも「購入完了メールが 届かない等」のお問い合わせが減った!

Slide 57

Slide 57 text

© 2012-2023 BASE, Inc. まとめ 57

Slide 58

Slide 58 text

© 2012-2025 BASE, Inc. まとめ 58 ● メール改善に限らず、パフォーマンスチューニングする際は 「推測するな。計測せよ」の心構えが大事。 ● 計測するにあたって、事前にCUJ/SLI/SLOを定義する事で効 果的にボトルネックの調査と、改善方法が定まるのでおすす めです。 ○ SLI/SLOと聞くとSRE文脈に聞こえるかもしれないです が、領域関係なく活用できる概念なので知っておいて良い 思いました! ● 効果測定にあたっては、New Relic APMを活用する事で詳細 に調査ができるので使っていきましょう!

Slide 59

Slide 59 text

© 2012-2025 BASE, Inc. まとめ 59 推測より 計測こそが 道しるべ

Slide 60

Slide 60 text

© 2012-2025 BASE, Inc. 60 Thanks for listening ! Enjoy PHPカンファレンス小田原 2025🏯