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
Browser
recruitengineers
PRO
9
2.9k
JavaScript 研修
recruitengineers
PRO
8
1.7k
TypeScript入門
recruitengineers
PRO
36
12k
モダンフロントエンド 開発研修
recruitengineers
PRO
12
6.9k
Webアクセシビリティ入門
recruitengineers
PRO
4
1.8k
攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~
recruitengineers
PRO
4
2.2k
モバイルアプリ研修
recruitengineers
PRO
6
1.9k
事業価値と Engineering
recruitengineers
PRO
10
6.2k
制約理論(ToC)入門
recruitengineers
PRO
10
4.3k
Other Decks in Technology
See All in Technology
人工衛星のファームウェアをRustで書く理由
koba789
15
8.1k
実践!カスタムインストラクション&スラッシュコマンド
puku0x
0
480
プラットフォーム転換期におけるGitHub Copilot活用〜Coding agentがそれを加速するか〜 / Leveraging GitHub Copilot During Platform Transition Periods
aeonpeople
1
180
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
190
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
2
250
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
300
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
260
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
130
Terraformで構築する セルフサービス型データプラットフォーム / terraform-self-service-data-platform
pei0804
1
190
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
200
Modern Linux
oracle4engineer
PRO
0
150
まずはマネコンでちゃちゃっと作ってから、それをCDKにしてみよか。
yamada_r
2
120
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Agile that works and the tools we love
rasmusluckow
330
21k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Thoughts on Productivity
jonyablonski
70
4.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Rails Girls Zürich Keynote
gr2m
95
14k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Site-Speed That Sticks
csswizardry
10
820
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Building Applications with DynamoDB
mza
96
6.6k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Fireside Chat
paigeccino
39
3.6k
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