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
260
10年以上続くシステムと向き合い始めた事例の紹介
2021-09-22
RECRUIT TECH MEETUP登壇時の資料です
Recruit
PRO
November 05, 2021
Tweet
Share
More Decks by Recruit
See All by Recruit
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
270
プロデザ! BY リクルート vol.18_リクルートのリサーチ実践組織「リサーチブーストコミュニティ」
recruitengineers
PRO
3
280
Datadog による 自己完結的アプリケーションモニタリング
recruitengineers
PRO
4
260
プロデザ! BY リクルートvol.17_『じゃらんnet』公式アプリの高速リニューアル事例を大公開
recruitengineers
PRO
6
190
自己完結な開発者組織を支える プラットフォーム作り
recruitengineers
PRO
3
310
検索エンジニアが考える、 生成AI時代の人間の付加価値とは
recruitengineers
PRO
3
130
エンジニア思考で解決! 家事育児を劇的に進化させる開発プロセス応用術
recruitengineers
PRO
3
110
GraphQL「良さ」・「難しさ」再探訪 〜スタディサプリにおける実例〜 / StudySapuri with GraphQL
recruitengineers
PRO
22
4.7k
プロデザ番外編_リクルートのデザイン組織のご紹介
recruitengineers
PRO
3
200
Other Decks in Technology
See All in Technology
リテール金融(キャッシュレス・ネット銀行・ネット証券)の競争環境と経済圏
8maki
0
650
ServiceNow Knowledge 24の歩き方 EYストラテジー・アンド・コンサルティング
manarobot
0
190
Meta Quest 3 で動く桜マシマシ WebXR アプリを IBM Cloud Code Engine と Babylon.js で作った話
1ftseabass
PRO
0
120
DevOpsメトリクスとアウトカムの接続にトライ!開発プロセスを通して計測できるメトリクスの活用方法
ham0215
2
230
プラットフォームってつくることより計測することが重要なんじゃないかという話 / Platform Engineering Meetup #8
taishin
1
350
アクセス制御にまつわる改善 / Improving access control
itkq
0
530
地理空間データ可視化・解析・活用ソリューション Pacific Spatial Solutions (PSS)
pacificspatialsolutions
0
150
Delivering Millions of Messages within seconds @ Duolingo
pelelgrino
0
350
On Your Data を超えていく!
hirotomotaguchi
2
660
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
140
エンジニアのキャリアをちょっと楽しくする3本の軸/Three Pillars to Make an Engineer's Career More Enjoyable
kwappa
0
2.6k
オーナーシップを持つ領域を明確にする
konifar
13
3.1k
Featured
See All Featured
Ruby is Unlike a Banana
tanoku
96
10k
The Invisible Side of Design
smashingmag
294
49k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Happy Clients
brianwarren
92
6.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
Infographics Made Easy
chrislema
238
18k
GitHub's CSS Performance
jonrohan
1025
450k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
17
1.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
17
6.4k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
14
1.6k
Visualization
eitanlees
136
14k
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