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
2000万アカウントの無停止データ移行の裏側
Search
DMM.com
May 22, 2017
Technology
21
11k
2000万アカウントの無停止データ移行の裏側
#DataMigrationNight にて発表したスライドです
DMM.com
May 22, 2017
Tweet
Share
More Decks by DMM.com
See All by DMM.com
Neo4j with Spark for Big Data Analysis
dmmlabo
1
470
P3インスタンスではじめるDeep Learningと画像レコメンド
dmmlabo
2
3.1k
DMM.comのサービス開発におけるGitHub Enterprise活用の舞台裏
dmmlabo
2
890
Digdagを導入してみて
dmmlabo
9
3.9k
DMM.comラボにおける Scality Ring 活⽤事例
dmmlabo
0
990
デジタルコンテンツの安定配信とコスト削減の両立を実現したシステム刷新
dmmlabo
1
2.6k
DMM CM AWAEDS におけるフロントエンド技術選定について
dmmlabo
1
1.3k
エンジニアのパフォーマンス・モチベーション管理
dmmlabo
1
1.3k
DMMに於ける技術導入はじめの一歩
dmmlabo
1
1.3k
Other Decks in Technology
See All in Technology
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
280
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
180
[JAWS-UG新潟#20] re:Invent2024 -CloudOperationsアップデートについて-
shintaro_fukatsu
0
120
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
39
16k
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
140
Working as a Server-side Engineer at LY Corporation
lycorp_recruit_jp
0
340
DUSt3R, MASt3R, MASt3R-SfM にみる3D基盤モデル
spatial_ai_network
2
230
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
750
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.9k
宇宙ベンチャーにおける最近の情シス取り組みについて
axelmizu
0
120
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
1.1k
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
260
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
450
How STYLIGHT went responsive
nonsquared
96
5.2k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
4 Signs Your Business is Dying
shpigford
182
21k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Documentation Writing (for coders)
carmenintech
66
4.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Fireside Chat
paigeccino
34
3.1k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Transcript
2000万超アカウント データ移行の裏側 サービス基盤の大規模データ移行事例 株式会社DMM.comラボ プラットフォーム開発部 飯田涼太 2017/05/22 Data Migration Night@六本木セミナールーム
システム本部 チームリーダー I ♥ Kanazawa. • 186cm • mesh1neko •
最近はAWSと奮闘 • 金沢すきま旅(PR) AWS Summit2017 も出るよ 発表者紹介 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 2
• データ移行のゴール • データ移行の課題 • 新旧同期Replicatorとは • 新旧同期Replicatorを用いた移行の流れ 3 アジェンダ
Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
データ移行のゴール 4 Copyright © 2017 DMM.com Co., Ltd. All Rights
Reserved. 無断複製・転載を禁じます。
old master new master old2new Replicator new2old Replicator 5 Copyright
© 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 今回のデータ移行のゴール 事業部が任意のタイミングでAPIの切り替えをできるように 新旧どちらも利用できる仕組みを用意する old PF-API new PF-API 事業部 Client 今日お話 する仕組みはココ
old master new master old2new Replicator new2old Replicator 6 Copyright
© 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 新旧同期Replicatorを開発 新旧環境で常にデータを同期することで 任意のタイミングで移行可能に
1. データ構造が異なるDBへ移行したい 2. サービス停止を避けたい 3. サービスの切替タイミングを任意としたい 7 Copyright © 2017
DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 課題点は大きく3つ
最新の利用状況を考慮し 今後の事業展開を見越した より汎用的なデータ構造に改修 8 Copyright © 2017 DMM.com Co., Ltd.
All Rights Reserved. 無断複製・転載を禁じます。 課題1. データ構造が異なるDBへ移行したい
多くの事業を支える基盤として 全体メンテナンスは避けたいところ ^^ ^^ ^^ ^^ ^^ 9 課題2. サービス停止を避けたい
Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
各事業の最適なタイミングで移行が可能 済 未 済 未 未 10 課題3. 切替タイミングを任意としたい Copyright
© 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
使う人に気持ち良く使ってもらいたい 「ここぞ、PFの腕の見せ所」 11 Copyright © 2017 DMM.com Co., Ltd. All
Rights Reserved. 無断複製・転載を禁じます。
リアルタイム双方向同期を実現する 新旧同期Replicatorとは? 2000万超アカウント移行の救世主 12 Copyright © 2017 DMM.com Co., Ltd.
All Rights Reserved. 無断複製・転載を禁じます。
【機能】 • 双方向レプリケーション ◦ 循環更新防止 • 新旧スキーマのマッピング ◦ オンライン定義更新 •
リレーログ同等の永続性 ◦ MQによるバッファ 13 実現に何が必要なのか 【非機能】 • 低レイテンシー Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
14 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
どう実現したのか? (双方向 - 配置) RabbtMQ old master new master old2new Replicator new2old Replicator 双方向のデータフローに対し Replicatorを配置
Replicatorは MySQLの slaveとして更新情報を取得 15 Copyright © 2017 DMM.com Co., Ltd.
All Rights Reserved. 無断複製・転載を禁じます。 どう実現したのか? (双方向 - 認識) old master new master old2new Replicator new2old Replicator slave slave
16 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
どう実現したのか? (双方向 - キュー) old master new master old2new Replicator new2old Replicator Replicatorは前段にRabbitMQのキューを配置し リレーログ相当の永続性を担保 RabbitMQ RabbitMQ
• 柔軟な同期の実現のために • オンラインで設定変更が可 • 更新内容に応じた条件分岐 e.g. INSERT/UPDATE ONLY, green
=> ok • 別DBからのデータ取得にも対応 e.g. DBをまたいだリレーション(第三者的DB)もレプリケー ション元としてSELECT可 17 新旧のマッピング情報はymlで設定 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
old master new master MySQL Replicator RabbitMQ RabbitMQ Adapter Query
Mapper Query Executor 18 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 レプリケータ内部構成 Powered by Vert.x 3
new master MySQL Replicator RabbitMQ RabbitMQ Adapter Query Mapper Query
Executor 19 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 レプリケータ内部構成 binlog取得 by OpenReplicator MQとの仲介 マッピング 実行 old master
SQL Parser Query Executor Replication STATEMENT Replication Row JSQLParser Source
Query Destination Query translate schema/ table.yml New Query 20 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 クエリ変換のイメージ クエリの解析・スキーマの翻訳・変換後クエリの実行 の各プロセスを経て変換機能を実現します
どれがソースでも解析できるように対応 5.1 5.5 5.6 STATEMENT MIXED STATEMENT デフォルトbinlog_formatは違うため 21 Copyright
© 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 binlogフォーマットの複数バージョン対応
• Max:4,000req/sec • 1日の更新クエリの99%が15msで同期 22 Replicatorの性能実績 Copyright © 2017 DMM.com
Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
Replicatorを用いた データ移行の流れ コンバートから双方向同期まで 23 Copyright © 2017 DMM.com Co., Ltd.
All Rights Reserved. 無断複製・転載を禁じます。
new slave old master old slave new master old slave
Replication stop @2553923 サービスイン中 24 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 1. slaveを1台サービスアウト
new slave old master old slave new master コンバート old
slave 25 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 2. slaveから全データをコンバート Replication stop @2553923
new slave old master old slave new master old slave
Replication start @2553924 移行期間分の遅れをとっ ているため ひたすら追いかける 26 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 3. 続きを slaveから差分で同期 old2new Replicator コンバート
new slave old master new master Replication start @1 27
Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 4. 順方向の同期完了後、逆方向も同期を開始 コンバート old2new Replicator
old Master new Master old2new Replicator new2old Replicator 28 Copyright
© 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 5. 新旧同期できる状態で新APIの提供を開始
• 1処理で大量のcommitが走る際は順番のズレに留意 -> スレッド処理のため。最終的に整合性が合えばOK • 循環同期の発生に留意 -> 今回は更新者というカラムやコメント文で制御 • データ上の矛盾に留意
-> 別途テストを用意すべき 29 Replicatorを用いたデータ移行の留意点 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
old master new master old2new new2old ①UPDATE A to B
②UPDATE A to B ③UPDATE A to B? ④UPDATE A to B? 30 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 循環同期について(補足)
old master new master old2new new2old ①UPDATE A to B
②UPDATE A to B ③UPDATE A to B? ④UPDATE A to B? 31 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 循環同期について(補足) 実際に循環することはないが 無駄にクエリが走ると 問題につながりかねない
old master new master old2new new2old UPDATE A to B
By User UPDATE A to B By Replicator 32 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 更新者を明示して対応
old master new master old2new new2old UPDATE A to B
By User UPDATE A to B /* Replicator */ 33 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 更新者を明示して対応
old master new master old2new new2old STATEMENT ROW 更新者を示すための カラム有り
更新者を示すため のカラム無し 34 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。 明示の仕方の違い
• あくまでマッピングに従って同期しているだけ • データに矛盾がないかはわからない → 対応する新旧APIを叩いて データに問題ないか毎日確認 ※テストを量産しやすいcodeceptionを利用 35 データの矛盾確認-compatible
checker Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
今日お話した仕組みはココ 36 old Master New Master old2new Replicator new2old Replicator
old PF-API new PF-API 事業部 Client Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。
絶対サービスは止めたくない 熱い思いが詰まったReplicator 37 Copyright © 2017 DMM.com Co., Ltd. All
Rights Reserved. 無断複製・転載を禁じます。
質疑応答 38 Copyright © 2017 DMM.com Co., Ltd. All Rights
Reserved. 無断複製・転載を禁じます。
ご清聴ありがとうございました。 Copyright © 2017 DMM.com Co., Ltd. All Rights Reserved. 無断複製・転載を禁じます。