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
タウンワーク90万原稿の掲載を支えるレガシーバッチパフォーマンスチューニング #devsumi...
Search
Recruit Technologies
February 15, 2019
Technology
7
4.4k
タウンワーク90万原稿の掲載を支えるレガシーバッチパフォーマンスチューニング #devsumi #devisumiD
2019/02/15 Developers Summit 2019での、森廣の講演資料になります
Recruit Technologies
February 15, 2019
Tweet
Share
More Decks by Recruit Technologies
See All by Recruit Technologies
障害はチャンスだ! 障害を前向きに捉える
rtechkouhou
1
630
Flutter移行の苦労と、乗り越えた先に得られたもの
rtechkouhou
3
11k
ここ数年間のタウンワークiOSアプリのエンジニアのチャレンジ
rtechkouhou
1
1.5k
大規模環境をAWS Transit Gatewayで設計/移行する前に考える3つのポイントと移行への挑戦
rtechkouhou
1
1.9k
【61期 新人BootCamp】TOC入門
rtechkouhou
3
41k
【RTC新人研修 】 TPS
rtechkouhou
1
41k
Android Boot Camp 2020
rtechkouhou
0
41k
HTML/CSS
rtechkouhou
10
50k
TypeScript Bootcamp 2020
rtechkouhou
9
45k
Other Decks in Technology
See All in Technology
強いチームと開発生産性
onk
PRO
33
11k
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
180
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
220
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
110
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.8k
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
860
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
2
580
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
0
110
rootlessコンテナのすゝめ - 研究室サーバーでもできる安全なコンテナ管理
kitsuya0828
3
380
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.1k
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.3k
Featured
See All Featured
Faster Mobile Websites
deanohume
305
30k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Typedesign – Prime Four
hannesfritz
40
2.4k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Producing Creativity
orderedlist
PRO
341
39k
A Philosophy of Restraint
colly
203
16k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
A Tale of Four Properties
chriscoyier
156
23k
Rails Girls Zürich Keynote
gr2m
94
13k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Transcript
タウンワーク90万原稿の掲載を支える レガシーバッチパフォーマンスチューニング 1 (C) Recruit Technologies Co.,Ltd. All rights reserved.
2019/2/15 リクルートテクノロジーズ 森廣 隆行
自己紹介 森廣 隆行 株式会社リクルートテクノロジーズ ITエンジニアリング本部 プロダクトエンジニアリング部 リクルートジョブズグループ 2 ▪経歴 Sier(2006/4
〜 2010/3) 金融系業務基幹システム運用保守開発 ナビアプリ(2010/4 〜 2015/9) 自社アプリ開発(サーバサイド、フロントエンド) リクルートテクノロジーズ(2015/10 〜) フロム・エーナビ運用保守開発(2015/10〜 2017/9) リクルートジョブズ全体領域アーキテクト(2017/10〜) ▪主な役割 リクルートジョブズ領域における サーバサイド(Java)、フロントエンド (JavaScript)開発責任者
本日の内容 3 去年発表の 技術側の話
注意 • 本セッションはレガシーコードにまみれた世界での社員 エンジニア奮闘記です! • 新技術とかそういうキラキラしたものを取り上げたもの ではなく古くから使われている手法ばかりの泥臭い内容 です。 • スライドは後日公開いたします。
4
はじめに • リクルートジョブズ リボンモデル 5
はじめに • リクルートジョブズ リボンモデル 6 ここ!!
背景 7 原稿入稿処理はリボンモデルの根幹を支える部分であり、 これがないとビジネスが成り立たないため必然的に「当た り前品質」を求められています。 カスタマー 営業 売上 〜 〜
〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 原稿作成 クライアント 検索サービス 0¥ マッチング 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 入稿 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 掲載 まいどありー♪ 開発者 掲載します いいバイトあるかなー 入稿システム
背景 8 「商品の追加」、「掲載情報の追加」など新規案件におい て「当たり前品質」を優先するあまり既存処理に手を加え るのではなく新規追加というディフェンシブな対応が取ら れていきました。 カスタマー 営業 売上 〜
〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 原稿作成 クライアント 検索サービス 0¥ マッチング 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 入稿 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 掲載 新規商品追加だ! うぅ、、まじか。。 なんとかするか 開発者 入稿システム
その結果。。。 9
システム全体図 10
システム全体図 11 タウンワーク フロム・エー ナビ 入稿システム データの 流れ
背景 12 近年の掲載数増加に伴い急激な性能劣化が発生。 入稿システム単体での対応では根本的解決にならない。 処理終了時間の推移 入稿システ ムの改善 急激な性 能劣化 掲載数の推移
背景 13 「リプレイス」「リビルド」という手法は、開発期間の長 期凍結を伴うため、タウンワークという大規模システムで 行った場合、機会損失が大きすぎて現実的ではない。
背景 14 従来の「担当システム」という個別最適化ではなく、「原 稿入稿処理フロー」というフローでの全体最適化を行いま した。 × × × × ×
個別最適化 全体最適化 担当システム × × 原稿入稿処理フロー
実施内容 15
原稿情報入稿ジョブフロー 16 原稿入稿システム クライアント 日中帯 原稿反映 処理 タウンワーク 原稿取込 処理
Solr反映 処理 原稿テーブル 保管テーブル 4回/日
原稿情報入稿ジョブフロー 17 クライアント 日中帯 原稿反映 処理 タウンワーク 原稿取込 処理 Solr反映
処理 原稿テーブル 保管テーブル 問題① 問題② 問題③ 原稿入稿システム 4回/日
問題その① 18 クライアント 日中帯 原稿反映 処理 タウンワーク 原稿取込 処理 Solr反映
処理 原稿テーブル 保管テーブル 問題① 原稿入稿システム 4回/日
問題その① 業務とシステムの不一致 19 入稿システム タウンワーク インフラ 業務 ここの話
問題その① 20 原稿入稿システム クライアント 月曜朝掲載開始 原稿反映 処理 保管テーブル 日曜夜開始 原稿入稿システム
月曜〜金曜日 ①金曜日夕方入稿締 フリーペーパー Web掲載 印刷 配送
問題その① 21 クライアント 原稿反映 処理 ②一週間分まと めて処理 保管テーブル フリーペーパー Web掲載
印刷 配送 原稿入稿システム 月曜朝掲載開始 日曜夜開始 原稿入稿システム 月曜〜金曜日
問題その① 22 原稿反映処理 新規掲載原稿 掲載停止原稿 掲載修正原稿 入稿処理 停止処理 停止予約処理 修正処理
クライアント 連携テーブル ③ここが多い! 保管テーブル 日曜日夜開始 月曜〜金曜日
問題その① 23 クライアント 連携テーブル 保管テーブル 原稿反映処理 新規掲載原稿 掲載停止原稿 掲載修正原稿 停止処理
停止予約処理 修正処理 編集処理 反映処理 ④画像加工、コード 変換など 日曜日夜開始 月曜〜金曜日
問題その① 24 クライアント 連携テーブル 原稿反映処理 新規掲載原稿 掲載停止原稿 掲載修正原稿 停止処理 停止予約処理
修正処理 編集 処理 反映処理 ⑤入稿時に処理 保管テーブル 日曜日夜開始 月曜〜金曜日
問題その① 結果 25 原稿入稿システム クライアント 日曜日夜開始 日中帯 原稿反 映処理 タウンワーク
原稿取込 処理 Solr反映 処理 原稿テーブル 処理量を分散 編 集 保管テーブル
問題その② 26 クライアント 4回/日 日中帯 原稿反 映処理 タウンワーク 原稿取込 処理
Solr反映 処理 原稿テーブル 編 集 保管テーブル 問題② 原稿入稿システム
27 問題その② システム間連携の不備 入稿システム タウンワーク インフラ 業務 ここの話
問題その② 28 連携テーブル 原稿取込処理 掲載原稿 登録処理 原稿テーブル 原稿反映処理 新規掲載原稿 掲載停止原稿
掲載修正原稿 タウンワーク開発チーム 原稿入稿開発チーム ①開発チームが別
問題その② 29 連携テーブル 原稿取込処理 掲載原稿 登録処理 原稿テーブル 原稿反映処理 新規掲載原稿 掲載停止原稿
掲載修正原稿 タウンワーク開発チーム 原稿入稿開発チーム ②タウンチーム に連携されていない
問題その② 30 連携テーブル 原稿取込処理 掲載原稿 登録処理 DELETE ⇒ INSERT 原稿テーブル
③すべて同じ処理 原稿反映処理 新規掲載原稿 掲載停止原稿 掲載修正原稿 タウンワーク開発チーム 原稿入稿開発チーム
問題その② 31 原稿取込処理 原稿テーブル 原稿反映処理 新規掲載原稿 掲載停止原稿 掲載修正原稿 新規掲載原稿 掲載停止原稿
掲載修正原稿 INSERT UPDATE DELETE ⇒ INSERT 連携テーブル ④処理毎に分割 タウンワーク開発チーム 原稿入稿開発チーム
問題その② 32 原稿取込処理 原稿テーブル 原稿反映処理 新規掲載原稿 掲載停止原稿 掲載修正原稿 新規掲載原稿 掲載停止原稿
掲載修正原稿 連携テーブル マ ス タ ー チ ェ ッ ク マ ス タ ー チ ェ ッ ク 削除 削除 両方から同じ処理 両方から同じ処理 タウンワーク開発チーム 原稿入稿開発チーム
問題その② 結果 33 クライアント 日中帯 原稿反 映処理 タウンワーク Solr反映 処理
原稿テーブル マスターチェック 削除 編 集 新規 停止 修正 保管テーブル チーム間で役割分担 情報共有を密に 原稿入稿システム 4回/日
問題その③ 34 クライアント 日中帯 原稿反 映処理 タウンワーク Solr反映 処理 原稿テーブル
編 集 新規 停止 修正 保管テーブル 問題③ マスターチェック 削除 原稿入稿システム 4回/日
35 問題その③ システムとインフラ間 設計矛盾 入稿システム タウンワーク インフラ 業務 ここの話
問題その③-1 36 Solrデータ作成 Solrインプットファイル 検索データ作成処理 データ抽出&加工 インプットファイル 作成 中間テーブル 原稿テーブル
関連テーブル
問題その③-1 37 Solrデータ作成 検索データ作成処理 データ抽出&加工 インプットファイル 作成 中間テーブル 原稿テーブル 関連テーブル
実行時間調査 SQLが遅い Solrインプットファイル
問題その③-1 SQLチューニング 38 Solrデータ作成 検索データ作成処理 データ抽出&加工 インプットファイル 作成 中間テーブル 原稿テーブル
関連テーブル SQLチューニング Solrインプットファイル
問題その③-1 SQLチューニング • 件数減らしてJOIN • INDEXを再確認し貼り直し • 使用関数(SUM, NOT EXISTSなど)の見直し
• 参照テーブルの見直し 39
問題その③-1 SQLチューニング 40 歴史を感じる500行超え のSQL 実行計画も壮絶 やばい!
問題その③-1 SQLチューニング 41 JOINテーブル多すぎ テーブル大きすぎて 読み込み&コスト急増 ① ② ④ ⑥
⑦ ③ ⑤ ⑧ ⑨
問題その③-1 SQLチューニング 42 条件絞り込み 参照テーブル変更 ① ② ③ ④ ⑤
⑥ ⑦ ⑧
問題その③-1 SQLチューニング 43 657,382 ↓ 420,422 へ少し改善
問題その③-1 並列化 44 Solrデータ作成 Solrインプットファイル 検索データ作成処理 インプットファイル作成 中間テーブル 原稿テーブル 関連テーブル
インプットファイル作成 インプットファイル作成 並列化 データ抽出&加工
問題その③-1 結果 2時間 ⇒ 1時間40分 20分しか改善せず 45
問題その③-2 再調査 46 OracleEnterpriseManagerを利用して SQLパフォーマンスの詳細調査 ※OracleEnterpriseManager とは オラクル製品を含め、システム 全体を見える化・監視するための ブラウザベースの管理ツールです。
問題その③-2 47 Solrデータ作成 Solrインプットファイル 検索データ作成処理 中間テーブル 原稿テーブル 関連テーブル ここが詰まってた インプットファイル作成
インプットファイル作成 インプットファイル作成 データ抽出&加工
問題その③-2 ほとんどがキャッシュフュージョンによる データ読み込み待機イベント 48 実際の処理(CPU Used) 圧倒的水色 (DB File Sequential
Read)
問題その③-2 キャッシュフュージョンとは 49 SQL A B C A OracleRAC構成 FileIO遅い
50 SQL B OracleRAC構成 A B C 問題その③-2 キャッシュフュージョンとは
51 SQL B OracleRAC構成 A B C Bデータ誰か持 ってない? 問題その③-2
キャッシュフュージョンとは
52 SQL B OracleRAC構成 A B C あるよー 問題その③-2 キャッシュフュージョンとは
53 SQL B OracleRAC構成 頂戴ー A B C A B
C どうぞー 問題その③-2 キャッシュフュージョンとは
問題その③-2 54 バッチ1 バッチ2 バッチ3 A B C OracleRAC構成 A
B C 頂戴ー 頂戴ー
問題その③-2 55 バッチ1 バッチ2 バッチ3 A B C OracleRAC構成 A
B C 今処理中だ から無理! 待ちま す 待つよ
問題その③-2 56 バッチ1 バッチ2 バッチ3 A B C OracleRAC構成 A
B C データ変更無 いから直接読 み込んで まーだ ー? まだー?
問題その③-2 57 バッチ1 バッチ2 バッチ3 A B C OracleRAC構成 A
B C 詰まる ラジャー! 了解!
問題その③-2 58 バッチ1 バッチ2 バッチ3 A B C OracleRAC構成 A
B C DB File Sequential Read
問題その③-2 結果 擬似的なMaster-Slave構成をとってキャッシュフュージョンを減らした。 59 バッチ1 バッチ2 バッチ3 A B C
A B C Master Slave OracleRAC構成
問題その③-3 圧倒的な水色 (DB File Sequential Read)パート② 60 実行時間は減っている 圧倒的水色 (DB
File Sequential Read)
問題その③-3 データフロー 61 Solrデータ作成 Solrインプットファイル 検索データ作成処理 中間テーブル 原稿テーブル 関連テーブル データフロー洗い出し
データ抽出&加工 インプットファイル作成 インプットファイル作成 インプットファイル作成
問題その③-3 データフロー データフロー 62 バッチ バッチ バッチ バッチ バッチ バッチ
バッチ バッチ バッチ バッチ 原稿テーブル バッチ マスターテーブル Solr ファイル 画像 アクセス履歴 さっきの SQL
63 技術負債の巣窟!!
問題その③-3 64 バッチ バッチ バッチ バッチ バッチ バッチ バッチ バッチ
バッチ バッチ 原稿テーブル バッチ マスターテーブル 中間テーブル Solr ファイル 画像 アクセス履歴 さっきの SQL
問題その③-3 初期データフローは多分これ 65 バッチ バッチ バッチ バッチ 原稿テーブル バッチ Solr
ファイル 画像 アクセス履歴
問題その③-3 66 バッチ バッチ バッチ バッチ 原稿テーブル バッチ Solr ファイル
画像 アクセス履歴 ①情報増やしたい
問題その③-3 67 バッチ バッチ バッチ バッチ 原稿テーブル バッチ Solr ファイル
画像 アクセス履歴 バッチ ②追加するならここ
問題その③-3 68 バッチ バッチ バッチ バッチ 原稿テーブル バッチ Solr ファイル
画像 アクセス履歴 バッチ ③ここに影響が出てしまう
問題その③-3 69 バッチ バッチ バッチ バッチ 原稿テーブル バッチ Solr ファイル
画像 アクセス履歴 ④なのでここに作る バッチ
70 繰り返した結果。。。
問題その③-3 71 バッチ バッチ バッチ バッチ バッチ バッチ バッチ バッチ
バッチ バッチ 原稿テーブル バッチ マスターテーブル ⑤中間テーブル多すぎ Solr ファイル 画像 アクセス履歴 さっきの SQL
問題その③-3 72 バッチ バッチ バッチ バッチ バッチ バッチ バッチ バッチ
原稿テーブル バッチ マスターテーブル Solr ファイル 画像 アクセス履歴 バッチ バッチ ⑥オンラインから常時アクセス さっきの SQL
問題その③-3 73 バッチ バッチ バッチ バッチ バッチ バッチ バッチ バッチ
原稿テーブル バッチ マスターテーブル Solr ファイル 画像 アクセス履歴 ⑦原稿テーブルから 大量データ取得 バッチ バッチ さっきの SQL
問題その③-3 74 バッチ バッチ バッチ バッチ バッチ バッチ バッチ バッチ
原稿テーブル バッチ マスターテーブル Solr ファイル 画像 アクセス履歴 バッチ バッチ ⑧何故か原稿テーブ ル更新 さっきの SQL
問題その③-3 オンラインとバッチでさっきと同じキャッシュフュージョン! 75 バッチ A B C Master Slave A
B C
問題その③-3 76 バッチ バッチ バッチ バッチ バッチ バッチ バッチ バッチ
原稿テーブル バッチ マスターテーブル Solr ファイル 画像 アクセス履歴 バッチ バッチ 削除 削除 さっきの SQL
問題その③-3 77 バッチ バッチ バッチ バッチ バッチ バッチ 原稿テーブル バッチ
マスターテーブル Solr ファイル 画像 アクセス履歴 バッチ バッチ バッチ バッチ バッチ 4回/日 4回/日 1回/日 オンライン オフライン 分離 さっきの SQL
問題その③-3-2 結果 2時間処理かかっていたものが15分に改善 78
最終形態 79 クライアント 日中帯 原稿反 映処理 タウンワーク Solr反映 処理 原稿テーブル
編 集 新規 停止 修正 保管テーブル レスポン ス速度UP マスターチェック 削除 原稿入稿システム 4回/日
品質担保 品質担保 80
品質担保 81 処理前 処理後 テスト環境 JOBネット 改修後JOB ネット データ比較 テスト
データ 商品データ作成
品質担保 82 処理前 処理後 テスト環境 JOBネット 改修後JOB ネット 比較量が膨大 テスト
データ 商品が多く 知識も必要 一週間分
品質担保 83 処理前 処理後 本番 テスト環境 JOBネット コピー 改修後JOB ネット
コピー オフショア使って比較 一週間分
結果 想定通り掲載数は増加しているが処理時間は激減させることに成功 84 処理終了時間の推移 掲載数の推移 増加 激減
結果 事後経過も順調で障害も現在まで0件 85 MAX6時間短縮 平均4時間短縮
結果 毎週月曜日朝5時のモーニングコール(?)をストップ 86 遅延監視 電話コールライン 6週連続 11 週連続
まとめ • レガシーシステムの改善は「リビルド」「リプレイス」 に頼らなくても、泥臭い成果の積み重ねで成果を十二分 に出せます。また業務、インフラも絡めて検討すると効 果が増大します。 • システム単体で最適だったとしても、経年劣化や視点を 変えると負債化していたり改善の余地がかなりあること があります。
87
最後に 88
一言 自分の責任と技術力の限りを尽くして 「リアルISUCON」 をしたい人には最高の環境です! 89
一緒に仕事をしてくれる仲間を募集中です!! 90
結果 ご清聴ありがとうございました 91