Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

自己紹介 • 2007年〜 ヤフーオークション • 2013年〜 ヤフーショッピング • 2019年〜 ヤフーショッピング(注文決済領域) 職歴 • 釣り • ゲーム 趣味 • ServerSide BE • WebAPI • 高負荷対策 技術

Slide 3

Slide 3 text

Agenda - 超PayPay祭について - 解決のアプローチ ビジネス システム UI/UX 組織 - 今後の課題

Slide 4

Slide 4 text

ヤフーショッピング

Slide 5

Slide 5 text

2022年 2020年 2015年 2021年 〜 2014年 大型セールの歴史 ヤフーショッピングの大型セールの歴史 日本一優勝セール 年末感謝セール 超PayPay祭 春 夏のPayPay祭 開始 いい買物の日 開始(〜2019) 超PayPay祭 開始 超PayPay祭 開催中 〜 〜 〜 2018年

Slide 6

Slide 6 text

0 2 4 6 8 10 12 14 we A B C D E F G H 1日あたりの取扱高の成長 ヤフーショッピングで単日で一番売れた日

Slide 7

Slide 7 text

0 2 4 6 8 10 12 14 we A B C D E F G H 秒間最大注文数の推移 1秒間あたりの最大注文数

Slide 8

Slide 8 text

0 2 4 6 8 10 12 14 we A B C D E F G H 一日の注文数の傾向 2019年いい買物の日

Slide 9

Slide 9 text

栄光と挫折

Slide 10

Slide 10 text

解決へのアプローチ 4種類のカテゴリで実施 システム 組織 UI/UX ビジネス

Slide 11

Slide 11 text

解決へのアプローチ 4種類のカテゴリで実施 システム 組織 UI/UX ビジネス

Slide 12

Slide 12 text

セール期間の変更 セールの立て付けを変更しつつ負荷対策も Before 単日 After 複数日 ü セール期間を長く ü グランドフィナーレも 2日間に ü ロスタイムとして 2時間の延長

Slide 13

Slide 13 text

解決へのアプローチ 4種類のカテゴリで実施 システム 組織 UI/UX ビジネス

Slide 14

Slide 14 text

システム構成 購入導線 概略図 Acquiring Cart PayPay 注文 決済 PayPayGW PayPay PayPayカード 他 Wallet

Slide 15

Slide 15 text

システム全般共通 量を増やす+量を調整する+閾値を守る Server+Database STEP1 スケール アウト&アップ 流量制限 STEP2 非同期化 限界値の設定 STEP3 RateLimit

Slide 16

Slide 16 text

スケールアウト&アップ Web/APIサーバの増設+Databaseのバージョンアップ(Oracle19c移行)を実施 Acquiring Cart PayPay 注文 決済 PayPayGW PayPay PayPayカード 他 Wallet

Slide 17

Slide 17 text

非同期の導入 注文のDatabase書込+決済のDatabase書込+オーソリゼーションが対象 Acquiring Cart PayPay 注文 決済 PayPayGW PayPay PayPayカード 他 Wallet

Slide 18

Slide 18 text

RateLimitを設ける カートUIおよびPayPayGWとAcquiringで設定 Acquiring Cart PayPay 注文 決済 PayPayGW PayPay PayPayカード 他 Wallet

Slide 19

Slide 19 text

Databaseへのアプローチ 代表として注文のDatabaseに着目 Acquiring Cart PayPay 注文 決済 PayPayGW PayPay PayPayカード 他 Wallet

Slide 20

Slide 20 text

注文Databaseの特徴 • 3node構成x2 • ストアIDを主キー • データ量は多い • 追加はユーザの注文時 • 更新は主にストアから • 参照は一覧・詳細が主 • ストア・ユーザ共に参照実施 • ユーザからの一覧がネック 注文Databaseの問題点 Node間での参照・更新が多く待機イベントが発生していた。 実践!! 高可用性システム構築~RAC詳細編~ - Oracleより引用

Slide 21

Slide 21 text

Before 注文Databaseは3Nodex2の6Node構成で各Node同じデータを保持 Contents Node1 Contents Node2 Contents Node3 Application Read/Write ①注文Insert ②一覧参照

Slide 22

Slide 22 text

CQRSパターンの採用 データ ストアの読み取りと更新の操作を分離(コマンドクエリ責務分離) ストア更新・参照 STEP1 Sharding 参照対策 STEP2 ReadOnly ユーザ一覧対策 STEP3 データソース 分離

Slide 23

Slide 23 text

Sharding 主キーであるストア毎にアクセス先を変更し、待機イベントを削減 Contents Node1 Contents Node2 Contents Node3 Application A-Store B-Store C-Store Read/Write Read/Write Read/Write

Slide 24

Slide 24 text

ReadOnly 参照用のクラスターを用意し、一部の参照はそちらにリクエストを逃がす。 Contents Node1 Contents Node2 Contents Node3 Application A-Store B-Store C-Store R/W R/W R/W Contents 各Node Readの一部 Dataguard

Slide 25

Slide 25 text

データソースの分離 一番負荷の高いユーザの一覧の参照リクエストは別リソースを用意して対応 Contents Node1 Contents Node2 Contents Node3 Application A-Store B-Store C-Store R/W R/W R/W Contents 各Node Readの一部 Dataguard Application KVS Read (ユーザの一覧) Write

Slide 26

Slide 26 text

解決へのアプローチ 4種類のカテゴリで実施 システム 組織 UI/UX ビジネス

Slide 27

Slide 27 text

注文受付中表示 注文完了画面 注文履歴一覧画面

Slide 28

Slide 28 text

混雑予想を表示 - 混雑予測時間を表示 - 混雑緩和の見込み時間を表示

Slide 29

Slide 29 text

- お詫び画面を用意 - 混雑予測を表示 - ご案内は負荷状況など緊急告 知に合わせて更新可能 RateLimitに達した場合

Slide 30

Slide 30 text

解決へのアプローチ 4種類のカテゴリで実施 システム 組織 UI/UX ビジネス

Slide 31

Slide 31 text

全体負荷試験 受注だけでなく参照含めて負荷試験を実施。実績値を元にRateLimitを設定。 TOP Search Item Cart Order Item

Slide 32

Slide 32 text

ヤフー内の体制 CTOの元横断的に動ける体制に オーク ション CTO コマース インフラ ⾦融 統括 システム 統括 データ 統括 ショッ ピング

Slide 33

Slide 33 text

ショッピング内の体制 SREチームの立ち上げ 検索 SRE 商品 カート 注⽂ 決済 TOP

Slide 34

Slide 34 text

解決へのアプローチ 4種類のカテゴリで実施 システム 組織 UI/UX ビジネス 結果

Slide 35

Slide 35 text

0 2 4 6 8 10 12 14 we A B C D E F G H 一日の注文数の傾向 2021年 超PayPay祭(春)

Slide 36

Slide 36 text

0 2 4 6 8 10 12 14 we A B C D E F G H 注文数の比較 2019年いい買物の日 VS 2021年 超PayPay祭(春) ■2019年 いい買物の日 ■2021年 超PayPay祭(春)

Slide 37

Slide 37 text

今後の課題

Slide 38

Slide 38 text

今できてること • 受付中や混雑予想などを表示 →今までわからなかったことが伝えられた ユーザ向けUI/UXの磨き込み よりユーザに伝わるように 更に取り組みたいこと • セール開始時の注文増加対策 →対策を考えていく • 障害発生時や非同期処理が遅れたときの表示 →進捗状況がわからない、どう表示するか? • 買う前にユーザに待ってもらう仕組み →リアル店舗のレジ待ちの状態

Slide 39

Slide 39 text

今できてること • ツールでの告知やお知らせ枠はある ストア向け機能改善 よりストアも業務しやすくなるように 更に取り組みたいこと • 障害や遅延発生時など告知方法 →対応してほしい内容など伝えられるように →よりスムーズに告知できるよう • ストアも非同期の注文の状況がわからない →ストアにも進捗状況がを伝えられないか?

Slide 40

Slide 40 text

単一障害点の解消 Single Point of Failure Acquiring Cart PayPay 注文 決済 PayPayGW PayPay PayPayカード 他 Wallet

Slide 41

Slide 41 text

緊急時の連携体制の見直し • 社内他部署との連携 • 役割の見直し • ユーザ・ストアへの告知も 障害時の連携体制 障害内容や対応についてを連携し、ユーザ・ストアファーストに動けるように

Slide 42

Slide 42 text

ご静聴 ありがとうございました