Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DMSを利用して、オンプレOracleの大規模データを Auroraへ継続的にレプリケーション...
Search
Recruit
PRO
August 02, 2022
Technology
0
640
DMSを利用して、オンプレOracleの大規模データを Auroraへ継続的にレプリケーションした事例の紹介/アップデート紹介とちょっぴりDiveDeepするAWSの時間 第19回
2022/06/23 AWS主催「アップデート紹介とちょっぴり DiveDeep する AWS の時間 第19回」での、辛の講演資料になります。
Recruit
PRO
August 02, 2022
Tweet
Share
More Decks by Recruit
See All by Recruit
事業の財務責任に向き合うリクルートデータプラットフォームのFinOps
recruitengineers
PRO
1
22
AI-DLCを現場にインストールしてみた:プロトタイプ開発で分かったこと・やめたこと
recruitengineers
PRO
2
150
プロダクトマネジメントの分業が生む「デリバリーの渋滞」を解消するTPMの越境
recruitengineers
PRO
3
830
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
4
320
dbtとBigQuery MLで実現する リクルートの営業支援基盤のモデル開発と保守運用
recruitengineers
PRO
5
250
『ホットペッパービューティー』のiOSアプリをUIKitからSwiftUIへ段階的に移行するためにやったこと
recruitengineers
PRO
4
1.8k
経営の意思決定を加速する 「事業KPIダッシュボード」構築の全貌
recruitengineers
PRO
4
410
Browser
recruitengineers
PRO
12
4k
JavaScript 研修
recruitengineers
PRO
9
2.2k
Other Decks in Technology
See All in Technology
5分で知るMicrosoft Ignite
taiponrock
PRO
0
390
20251218_AIを活用した開発生産性向上の全社的な取り組みの進め方について / How to proceed with company-wide initiatives to improve development productivity using AI
yayoi_dd
0
120
SREには開発組織全体で向き合う
koh_naga
0
370
AI駆動開発の実践とその未来
eltociear
0
130
AWS re:Invent 2025で見たGrafana最新機能の紹介
hamadakoji
0
410
非CUDAの悲哀 〜Claude Code と挑んだ image to 3D “Hunyuan3D”を EVO-X2(Ryzen AI Max+395)で動作させるチャレンジ〜
hawkymisc
2
200
CARTAのAI CoE が挑む「事業を進化させる AI エンジニアリング」 / carta ai coe evolution business ai engineering
carta_engineering
0
1.9k
初めてのDatabricks AI/BI Genie
taka_aki
0
200
Fashion×AI「似合う」を届けるためのWEARのAI戦略
zozotech
PRO
2
830
Snowflakeでデータ基盤を もう一度作り直すなら / rebuilding-data-platform-with-snowflake
pei0804
6
1.6k
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
3.4k
JEDAI認定プログラム JEDAI Order 2026 エントリーのご案内 / JEDAI Order 2026 Entry
databricksjapan
0
140
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Context Engineering - Making Every Token Count
addyosmani
9
530
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
730
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
4 Signs Your Business is Dying
shpigford
186
22k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Building an army of robots
kneath
306
46k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Transcript
DMSを利用して、オンプレOracleの大規模データを Auroraへ継続的にレプリケーションした事例の紹介 株式会社リクルート 辛剣徳
目次 1. じゃらんnetについて 2. クラウド在庫検索基盤について 3. AWS DMSについて 4. AWS
DMS利用時の課題 5. まとめ 2
辛剣徳(Shin Kento) 2021年 リクルート中途入社 「じゃらんnet」のバックエンド開発・運用を担当 自己紹介 3
じゃらんnet 4
• 宿・ホテル予約のWebサービス • 宿予約だけでなく、パッケージツアー、レンタカー、ゴルフなどの様々なサービスを提供 じゃらんnetとは 360°トラベルパートナー 宿泊施設・地域のパートナーとして、旅行業 界に貢献 5
• 環境:オンプレミス • アプリケーション:Java • DB:Oracle じゃらんnetのシステム 6
在庫検索機能 7
条件(エリア、日付、予算など)に合う在庫(宿泊施設、部屋タイプ、プランの組み合わせ ) を検索する。 じゃらんの在庫検索機能 条件入力 検索結果 宿泊施設 プラン 部屋タイプ 8
• 大量のユーザーからの高頻度なアクセス • 大規模なデータ量(宿 x プラン x 部屋 x 日付)
在庫検索機能の特徴 宿データ プランデータ 部屋データ 在庫データ アクセス数、処理時間共に大きく、DBに高負荷を与える機能 データ 検索処理 検索結果 • 結合 • 料金計算 • 条件抽出 • ソート 9
1. DBへの負荷が大きく、オンプレのDBではオンデマンドなスケーリングが難しい 2. 検索以外の機能とも密結合しており、改修時の影響範囲が大きい 検索機能の課題 既存のシステムでは、在庫検索機能を利用した新しい機能を追加したくて も、コストが大きく、気軽に追加できない 既存環境とは独立した、在庫検索機能を提供するシステムが必要 10
クラウド在庫検索基盤 11
在庫検索機能の課題を解決するために構築されたクラウド上の在庫検索 API クラウド在庫検索基盤とは オンプレ環境とは独立したサブシステム AWS アクセス数に応じてスケーリングでき、検索処理を高速に 実行できるハイパフォーマンスなDB Aurora (MySQL) アクセス数に応じてスケーリングできるアプリケーション実
行環境 ECS オンプレDBからAWSへの継続的なデータ同期 DMS 求める要件 採用技術 12
13 クラウド在庫検索基盤の役割 役割 環境 リクエスト種 別 データの 鮮度 データの 整合性
本体システム 検索・予約などの主要機能 オンプレミス 更新リクエストを含む リアルタイム 厳密な整合性が求められる クラウド在庫検索基盤 UX改善のための新機能や A/Bテスト クラウド(AWS) 参照リクエストのみ ほぼリアルタイム (数分程度の遅延は許容 ) ある程度の結果整合を許容 セキュリティ 個人情報データを扱う 個人情報データは扱わない
クラウド在庫検索基盤の位置づけ 本体システム (オンプレ) クラウド在庫検 索基盤(AWS) DB DB フロント画面 予約機能 決済機能
在庫検索機能 ・・・ 在庫検索機能 在庫検索機能のみ再構築 必要なデータを同期 (14テーブル、数十億レコード ) 主要予約導線の検索リクエストは引き 続き本体システムへ 在庫検索機能を利用した新しい機能で のリクエストはクラウド在庫検索基盤へ 14
クラウド在庫検索基盤のシステムアーキテクチャ 15 オンプレ環境 DirectConnectによりDMSと オンプレ環境を接続 クラウド在庫検索基盤 DMSの更新処理をWriter、 APIからの参照リクエストを Readerに振り分け 各コンポーネントは全て
Multi-AZで構成
AWS DMS 16
• Database Migration Service • 異種間のデータベースの移行をサポート • ダウンタイムなく移行が可能 • CDC(継続的なレプリケーション)が可能
AWS DMSとは 17
クラウド在庫検索基盤におけるDMSの利用 DMSの利用により以下を達成 Oracle → MySQLへの異種間DB移行 サービス停止のないオンライン下での全同期 レイテンシ平均1分程度のほぼリアルタイムな同期 18
① レプリケーションインスタンス、移行タスクを作成 ② ターゲットDBにテーブルを準備 ③ 既存データの全同期(フルロード)を実施 ④ 継続的同期(CDC)を開始 DMSの利用手順 19
DMSの利用手順① インスタンス、タスクを作成 ① レプリケーションインスタンスの作成 インスタンスサイズ等を指定 ② エンドポイントの作成 ソース、ターゲットそれぞれに接続するためのエンドポイン トを作成 ③
タスクを作成 移行タイプにフルロード & CDCを指定 20
タスク設定のテーブルマッピングを利用することで、連携対象のレコード、カラムを指定することが可 能。 テーブルマッピング 特定の日付以降の在庫データに 制限 個人情報カラムを連携対象から 除外 • 連携レコードを指定(選択ルール) •
連携カラムを指定(変換ルール) 21
移行対象のテーブル • 移行対象のテーブルをターゲットDBに作成する。 • Oracleのデータ型に対応する適切なMySQLのデータ型を選択する。 • ロード速度を高めるために、セカンダリインデックスはフルロード完了後に作成する DMSの利用手順② ターゲットテーブルの準備 ソースDB(Oracle)
ターゲットDB(Aurora MySQL) 移行対象に対応す るテーブルを作成 DMS (レプリケーションインスタンス) 22
• サービス稼働中に既存データの移行 (フルロード)を実施。 • DMSはソースDBにSELECTを実行し、取得したデータをターゲット DBにロードする。 • ソースDBへの負荷を最小限にするため、複数テーブルの並列なロードは行わない。 DMSの利用手順②フルロード ソースDB(Oracle)
ターゲットDB(Aurora MySQL) DATA DATA ソースDBへ の更新操作 ※フルロード中の 更新差分はDMSの メモリ内にキャッ シュされる SELECT LOAD 23
• フルロード中にキャッシュされた変更差分を適用しきった後、新規更新の適用が始まる。 • Oracleがソースの場合、LogMinerによりREDOログファイルを解析し、 SQLを生成してターゲット DBに連 携する。 ◦ REDOログファイル: 更新履歴を記録するログファイル
◦ LogMiner: Oracleの提供するログファイルの解析機能 DMSの利用手順③ CDC ソースDB(Oracle) ターゲットDB(Aurora MySQL) ソースDBへ の更新操作 REDOログ ファイル LogMinerに よる解析 SQL SQL 24
フルロード結果 Table1 Table2 Table3 Table4 Table5 Table6 Table7 Table8 Table9
Table10 Table11 Table12 Table13 25 • 合計所要時間 8時間程度 • 平日日中のアクセスの少ない時 間帯に、2日に分けて実施。
26 CDC結果 • スループット:平均数 500 rows/s • レイテンシ:平均1分程度 ソース側の更新頻度の増加や、CPU高騰時はレイテ ンシが増加。
DMS利用時の課題と対応 27
課題① 適切なタスク数の検討 28 レイテンシ DBへの負荷 データの 整合性 耐障害性※ タスク数を増やした場合 タスク数を減らした場合
タスクの数だけ並列でCDCを実行できるが、以下のようなトレードオフが存在する ※ タスクが停止した際に影響が及ぶテーブルの数 小さい 大きい 整合性を保ちにくい 高い 大きい 小さい 整合性を保ちやすい 低い 小規模なテーブルを扱うタスクと大規模なテーブルを扱うタスクの 2タスクに分け、大 規模テーブルの再ロードリスクを減らす方針
• ソースの更新頻度に対しターゲットへの適用が追いつかず、レイテンシ (同期遅延)が上昇してしまう。 • 特にオンライン下でのフルロードでは、フルロード中の更新差分が蓄積され大きなレイテンシになってし まう。 課題② CDCレイテンシの増大 フルロード CDC
フルロード&CDC時のレイテンシの推移 フルロード終了時点で 3時間のレ イテンシが発生 CDC中もソースの更新に適用が追 いつかず、レイテンシが 6時間まで 拡大 29
ソースDBで実行された複数のトランザクションを、ひとつの処理にまとめて適用する機能 • メリット: ターゲットDBへの適用頻度を抑えることができる • デメリット: ソースのトランザクション変更されるため、厳密な参照整合性が損なわれる BatchApply機能 ソースDB(Oracle) ターゲットDB(Aurora
MySQL) 複数のトランザクションが バッチ化される 30
• BatchApplyの有効化により、無効化時と比較してターゲットへの適用スループットが劇的に (100倍程度)改善した。 BatchApply機能の効果 BatchApply有効化時のレイテンシの推移 フルロード CDC フルロード終了後、変更 差分を即座に適用 CDC中のレイテンシは
最大10分程度で安定 31
CDCタスクを一時停止後、ソースDBの負荷高騰により再開に一度失敗したことで、一部 のINSERT処理を欠損してしまった。(DMSのログから検知) 課題③ データ差分の発生 ソースDB(Oracle) ターゲットDB(Aurora MySQL) LogMinerに よる解析 SQL
SQL 欠損データの復旧が必要だが、 サービス停止の伴うフルロードはなるべく避けたい 同期失敗 32
• DMSの検証タスクを利用することで、ソース、ターゲットのデータ差分を検出することができる。 • 検証後、フルロードではなく、検知した差分のみを手動で復元することで対応 • 恒常的に検証タスクを稼働させると、ソース DBの負荷が大きくなるため、タスクの停止や不審なログを検知 した都度実行する方針を採用。 検証タスクの利用 ソースDB(Oracle)
ターゲットDB(Aurora MySQL) CDCタスク 検証タスク ソース、ターゲットのレコードを抽出し差分を検出す る 33
検証タスク実行結果 34 • 検証タスクのコンソール画面 • 検証実行時の検証保留中のレコード数の推移 既存のデータの検証 CDCにより新しく連携されるデータの検証
まとめ 35
• DMSにより簡易にデータ移行を実現できるが、機能面、性能面で注意 点も多いため、本番適用前に十分に検証してから利用するのが大事。 • タスクのエラーや、データ差分の発生は完全には避けきれないという前 提で、失敗した際に再フルロードや検証を実施できる運用にするべき。 DMSを利用しての所感 36
• 導入成果 ◦ 平均1分程度のレイテンシでほぼリアルタイムな同期を実現 ◦ いくつかの新機能やA/Bテストなどで高速に実施できるようになった。 導入成果・今後の展望 37 • 今後の展望
◦ アクセス数の大きい機能や、処理負荷の高い検索処理など本体システムで実現 できない機能での利用拡大を目指す。 ◦ 検索性能そのものを改善し、検索速度、スループットの向上を目指す。 ← 在庫検索クラウド基盤利用例 在庫カレンダー画面
• じゃらんnetでは在庫検索処理の負荷が大きな課題であったが、クラウド 在庫検索基盤の導入によって、検索処理の負荷をオフロードし、機能追加 のしやすい環境を実現することができた。 • オンプレシステムからクラウドへのデータ同期は、異種DB間の移行・ほぼ リアルタイムな同期・大規模データという難易度の高いものだったが、 DMSにより実現することができた。 結び 38
We’re Hiring!!! 39 採用サイト(テクノロジー職): https://recruit-saiyo.jp/technology/ Tech Blog: https://engineers.recruit-jinji.jp/ じゃらんnetでは バックエンドエンジニア、SREエンジニア等、
様々な職種で一緒に働く仲間を募集しています • 大規模システムの課題を解決する • クラウドを武器に開発生産性を上げる 上記に興味がある方はぜひご応募ください!