Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
10年以上続くシステムと向き合い始めた事例の紹介
Search
Recruit
PRO
November 05, 2021
Technology
1
360
10年以上続くシステムと向き合い始めた事例の紹介
2021-09-22
RECRUIT TECH MEETUP登壇時の資料です
Recruit
PRO
November 05, 2021
Tweet
Share
More Decks by Recruit
See All by Recruit
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
3
140
dbtとBigQuery MLで実現する リクルートの営業支援基盤のモデル開発と保守運用
recruitengineers
PRO
3
160
『ホットペッパービューティー』のiOSアプリをUIKitからSwiftUIへ段階的に移行するためにやったこと
recruitengineers
PRO
4
1.6k
経営の意思決定を加速する 「事業KPIダッシュボード」構築の全貌
recruitengineers
PRO
4
260
Browser
recruitengineers
PRO
12
3.6k
JavaScript 研修
recruitengineers
PRO
8
2k
TypeScript入門
recruitengineers
PRO
37
14k
モダンフロントエンド 開発研修
recruitengineers
PRO
13
7.7k
Webアクセシビリティ入門
recruitengineers
PRO
4
2.1k
Other Decks in Technology
See All in Technology
AI AgentをLangflowでサクッと作って、1日働かせてみた!
yano13
1
130
組織改革から開発効率向上まで! - 成功事例から見えたAI活用のポイント - / 20251016 Tetsuharu Kokaki
shift_evolve
PRO
2
230
FinOps について (ちょっと) 本気出して考えてみた
skmkzyk
0
190
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
2.2k
CNCFの視点で捉えるPlatform Engineering - 最新動向と展望 / Platform Engineering from the CNCF Perspective
hhiroshell
0
130
現場データから見える、開発生産性の変化コード生成AI導入・運用のリアル〜 / Changes in Development Productivity and Operational Challenges Following the Introduction of Code Generation AI
nttcom
1
440
NLPコロキウム20251022_超効率化への挑戦: LLM 1bit量子化のロードマップ
yumaichikawa
1
190
[OCI Skill Mapping] AWSユーザーのためのOCI – IaaS編(Compute/Storage/Networking) (2025年10月8日開催)
oracle4engineer
PRO
1
180
Data Hubグループ 紹介資料
sansan33
PRO
0
2.2k
Copilot Studio ハンズオン - 生成オーケストレーションモード
tomoyasasakimskk
0
200
MCP ✖️ Apps SDKを触ってみた
hisuzuya
0
300
AI駆動で進める依存ライブラリ更新 ─ Vue プロジェクトの品質向上と開発スピード改善の実践録
sayn0
1
140
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
990
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Balancing Empowerment & Direction
lara
5
700
Transcript
10年以上続くシステムと 向き合い始めた事例の紹介 秋⽥ 諒 2021-09-22 RECRUIT TECH MEETUP #1
Whoami 秋⽥ 諒 • 株式会社リクルート(2017~) • 『じゃらんnet 』の開発、プロジェク トマネジメントなどを担当 •
Java / Spring / Python / AWS 2
今⽇話すこと ⻑年の増改築で肥⼤化したシステムが抱えていた問題に取り組んだ事例の紹介 • きっかけ • どうやって⼊っていったか • (技術要素は少なめです) 3
『じゃらんnet 』 4
『じゃらんnet 』 • 宿・ホテル予約サイト • 2000年からサービス開始 • 宿予約だけではなくレンタカー や⾶⾏機・新幹線の予約なども 可能
5 ͡ΌΒΜετʔϦʔ IUUQTXXXSFDSVJUDPKQTFSWJDFTUPSZKBMBOIUNM
『じゃらんnet 』|システム関連 • Java(独⾃FW) • オンプレ環境 6 ͷ૿վஙͷ݁Ռ • クラス数:数万
• リポジトリ数:数百 • テーブル数:数千 構成 規模感 ※ 関連システム、じゃらんの全サービスを考慮
『じゃらんnet 』とクーポン 7
『じゃらんnet 』とクーポン • 『じゃらんnet 』では定期的にクーポンを発⾏しておりお客様からも好評をい ただいている 8 めっちゃ安くなった! クーポン配布してる! 無くなる前に急げー!
配布⽅法 • 先着順 • 配布⽇時がセールのページに記載 9
配布開始直後どうなるか • ユーザからの⼤量アクセス 10
配布開始直後どうなるか • ユーザからの⼤量アクセスでDBの⼀部でCPU使⽤率が100%に 😇 11 クーポン配布開始直後のDBのCPU使⽤率グラフ(⼀部抜粋)
開発者から⾒た当時のクーポン 12 複雑性 ⼤ システム負荷 ⼤ • 定期的に⼤型クーポンを配布 • 配布⽇の10時は恐怖
• 機能改修の頻度が⾼い機能 • 仕様が複雑で全体感が 把握できない • 実装はそれ以上に複雑
開発者から⾒た当時のクーポン 13 複雑性 ⼤ システム負荷 ⼤ • 定期的に⼤型クーポンを配布 • 配布⽇の10時は恐怖
• 機能改修の頻度が⾼い機能 • 仕様が複雑で全体感が 把握できない • 実装はそれ以上に複雑 ΫʔϙϯػೳΛͳΜͱ͔͠ͳ͍ͱʜ ࠶ߏஙઆ͕ೱްˠݕ౼Λґཔ͞ΕΔ
戦略検討 14
アサイン当初思ったこと • 「再構築」の聞こえは魅⼒的だが結構時間がかかりそう ‣ 再構築が終わるまでビクビクしながらセールを迎えたくない • 「システム負荷」と「複雑性」は分けて考えたい ‣ (正直そんなてんこ盛りプロジェクト回せる⾃信ない) 15
システム負荷から攻める • セール時にユーザが通る導線を事前に軽く調査してみたところ無駄な処理が 結構ありそうなことが分かった • 勝ち筋が少し⾒えたので「開発者が安⼼してセールを迎える」ことを第⼀⽬ 標にプロジェクトを進めることに決めた 16 ϓϩδΣΫτݑষΑΓ
が、「複雑性の改善」に対して仕込みはしておく • ある程度負荷が改善し、プロジェクトの信頼感が獲得できれば「複雑性の改 善」への対応がやりやすくなるのではという仮説 • 負荷系の調査と同時に「複雑性の改善」に対しての仕様理解や課題整理もで きると嬉しい 17 ϓϩδΣΫτݑষΑΓ
戦略サマリ|短期と中⻑期の2階建て 18 2階 (中⻑期) 1階 (短期) セール時の システム負荷 取り組む課題
得られるもの 仕様と実装の複雑性 セール時の安⼼感 周りからの信頼 素早く質の⾼い 機能開発 仕様理解
戦略サマリ|短期と中⻑期の2階建て 19 2階 (中⻑期) 1階 (短期) セール時の システム負荷 取り組む課題
得られるもの 仕様と実装の複雑性 セール時の安⼼感 周りからの信頼 素早く質の⾼い 機能開発 仕様理解 イマココ 今回の内容は基本的に短期の内容のみ。 短期⽬標プロジェクトにどれくらい中⻑期を⾒越したものを混ぜたのか。を話す
プロジェクトスタート 20
負荷改善プロジェクトはこんなフェーズで実施 21 情報 収集 対策 検討 実装 効果 測定 2020/11~
2020/12~ 2021/01~ 2021/04~
情報収集フェーズ 中⻑期を⾒越した幅優先での情報収集と対外的な印象づけ 22 開発軸 ユースケース軸 ‣ 対象機能⼀覧 ‣ リソース使⽤状況の整理 ‣
画⾯遷移図 ‣ クーポン系障害整理 ‣ ソースコードリーディング ‣ ⽤語整理 ‣ 使われ⽅整理 (データのライフサイクル) 情報 収集 対策 検討 実装 効果測定
中⻑期を⾒越した幅優先での情報収集と対外的な印象づけ 情報収集フェーズ 23 情報 収集 対策 検討 実装 効果測定 クーポンでこういう問題が
起きてて整理してるんです! 分からないところを 教えてください! اը୲ऀ όοΫΦϑΟεܥ୲ऀ ։ൃऀ この⼈たちは クーポンの⼈なんだな ヒアリングを⾏いつつ課題感を共有 「クーポン関連で開発者が動いてそう」という認識を持ってもらう
ここから先はセール時の負荷改善へ深さ優先で検討 対策検討フェーズ 24 情報 収集 対策 検討 実装 効果測定
1. 対象機能⼀覧や画⾯遷移図を地図として、セール時にアクセスが多い機能を 特定 2. アクセスが多い機能のボトルネックをリソースの使⽤状況などから調査 3. ボトルネックを⾒つけ、打ち⼿を考える 対策検討フェーズ|取り組み⽅ 25 情報
収集 対策 検討 実装 効果測定
セール導線の課題詳細と打ち⼿ • 結果がどこにも使われていないSQLがある • ⼤量のマスタデータを取得するSQLがリクエストのたびに実⾏されている • クーポンを発⾏時、発⾏枚数をカウントするために⾏ロックを取得。⼤量ア クセスが来るとロック解放待ちが発⽣(何度かリトライしてロックが取れな かったらエラーへ遷移) 26
情報 収集 対策 検討 実装 効果測定 注:発⾏枚数は「クーポンが使われた予約数」とは別の概念。『じゃらんnet 』を使うユーザからは⾒えない。
セール導線の課題詳細と打ち⼿ • 結果がどこにも使われていないSQLがある ‣ 消す! • ⼤量のマスタデータを取得するSQLがリクエストのたびに実⾏されている ‣ キャッシュ化 •
クーポンを発⾏時、発⾏枚数をカウントするために⾏ロックを取得。⼤量ア クセスが来るとロック解放待ちが発⽣(何度かリトライしてロックが取れな かったらエラーへ遷移) ‣ 即時のカウントアップではなく定期バッチで発⾏枚数を集計するように仕様変更を提 案 27 情報 収集 対策 検討 実装 効果測定 注:発⾏枚数は「クーポンが使われた予約数」とは別の概念。『じゃらんnet 』を使うユーザからは⾒えない。
やることが決まったらあとは粛々と装着 • ソースコードリーディングや仕様理解が進んでいたこともあり、実装⾃体は 無難に終了 28 情報 収集 対策 検討 実装
効果測定
配布開始直後どうなるか • ユーザからの⼤量アクセスでDBの⼀部でCPU使⽤率が100%に 😇 29 クーポン配布開始直後のDBのCPU使⽤率グラフ(⼀部抜粋) 再掲
効果測定|実際負荷はどうなったのか • クーポンのセール導線のスループットが10倍以上になりつつ、DBの負荷は余 裕あり 30 情報 収集 対策 検討 実装
効果測定 セール開始時刻
効果測定|実際負荷はどうなったのか • クーポンのセール導線のスループットが10倍以上になりつつ、DBの負荷は余 裕あり 31 情報 収集 対策 検討 実装
効果測定 セール開始時刻 短期⽬標達成
⼤変だったこと 32
⼤変だったこと① • 開発外の体制/責務理解 ‣ 新機能を企画するチームやクーポンを使った施策を考えるマーケティングチームなど、 それぞれが思いを持っている ‣ 仕様や要件に対して「この観点だと〇〇チームの確認が必要ですね」などが良くあっ た 33
各チームの責務を理解することを⼼がける 各チームの⾔葉で話せるようになるまでドキュメントを読んだり場数をこなす
⼤変だったこと② • ソースコード理解 ‣ 基本的にトランザクションスクリプトで記載されているため重複などが多く実装も⻑ くなりがち ‣ システム⾃体が巨⼤、関連システムも多いためローカル環境構築も⼀苦労 34 ペアでソースコードリーディング
動かさないと分からない箇所はすでに環境構築してる開発者を巻き込む
中⻑期に向けて 35
戦略サマリ|短期と中⻑期の2階建て 36 2階 (中⻑期) 1階 (短期) セール時の システム負荷 取り組む課題
得られるもの 仕様と実装の複雑性 セール時の安⼼感 周りからの信頼 素早く質の⾼い 機能開発 仕様理解 再掲
短期から中⻑期への移⾏はどうだったのか 🙆 うまくいったこと • クーポン系の機能開発の時に⾃分たちに声がかかるように ‣ クーポンを網羅的に調査したことで仕様を⼀番理解しているのが⾃分たちになっていた ‣ 社内的に「ちょっと聞いとこ」や「頭出ししとこ」という存在に 🙅
うまくいかなかったこと • 機能開発に向けたプロセス整備が遅れ、移⾏期に混乱が発⽣ ‣ 別チームの開発者から「⼀応設計⾒ておいてもらおう」で来た依頼が、クーポン全体を 破壊しかねない修正だったりして企画担当者に「ほんまゴメンやけどやり直させてく ださい」ってお願いしに⾏った ‣ 必要な⼿戻りだったが、もう少し⼿前で指摘できればよかった 37
今やっていること 中⻑期に⼊りかけ。⼟台づくり中。 38 課題 打ち⼿の⽅針 ・仕様や要件がまとまっていない ・検討中(ナレッジ?要件定義書の⾒直し?) ・難易度の⾼い要件を無理に実現しようとし て複雑な実装が⽣まれている ・まずは新規案件でこれ以上の負を⽣まないよう
なプロセス設計中 ・すでに複雑な箇所は要求を整理中。仕様調整や 現在の仕様に基づいたデータモデルを検討中
やっていき 💪 39