Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
段階的なシステムリプレースを実現するデータ同期技術
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
s2terminal
September 13, 2019
Technology
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
段階的なシステムリプレースを実現するデータ同期技術
s2terminal
September 13, 2019
More Decks by s2terminal
See All by s2terminal
TypeScriptでJupyter
s2terminal
0
160
AIをWebアプリに実装するための便利なPythonライブラリ
s2terminal
0
680
NiceGUI is Nice
s2terminal
0
880
1年でモダンなフロントエンドに追いついた話 2019-08-22 Mix Leap Joint #26
s2terminal
0
58
20190706 BCU30 事業を変えるシステムリプレース
s2terminal
0
85
Cognitive Complexity でコードの複雑さを定量的に計測しよう
s2terminal
2
220
MySQLオンラインマイグレーションツールgh-ostで深夜メンテナンスを無くした話
s2terminal
0
95
Microsoft Azureで 女子力を生成する
s2terminal
0
82
かんたん機械学習はじめの1歩AzureMachineLearningでTweetをレコメンド
s2terminal
0
74
Other Decks in Technology
See All in Technology
[FECONF-2026] 신대륙을 향한 카카오페이증권 프론트엔드 항해기 (이주승)
l1ghthouse
0
360
なぜAI時代に技術記事を書くのか?どう書くのか? 〜bunの場合〜
kworkdev
PRO
0
4.6k
ALBのLCU予約とトラフィックの波によるプロダクト理解 / Understanding ALB LCU and Traffic Spikes
mito201
1
130
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
2.8k
慶應義塾大学 AI実践05 論文執筆の仕組み化
keio_smilab
PRO
6
3.4k
cdk deployとcdkd deploy、実際にデプロイして5倍速近くの差を実測した
yama3133
1
160
WireGuard for Apache NuttX - Bringing Secure Remote Access to embedded Devices -
aki310ooooo
0
130
AI AgentによるEmbedded SREの取り組み
tgidgd
1
320
Devin プロモコードの受け取りと適用(2026.10.27)
kinopeee
1
830
あなたのDartコードは丸見えかもしれない ~reFlutterで暴くFlutterアプリの中身と多層防御~
zozotech
PRO
0
750
自律的なチームを作るためにTechPMがやらないこと
ny7760
0
490
FinOpsを導入してマルチプロダクトのコスト最適化を実現する
kworkdev
PRO
0
110
Featured
See All Featured
Fireside Chat
paigeccino
43
4.1k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
How to train your dragon (web standard)
notwaldorf
96
6.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Ethics towards AI in product and experience design
skipperchong
2
450
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
540
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
600
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Accessibility Awareness
sabderemane
1
280
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Transcript
段階的なシステムリプレースを実現するデータ同期技術 Ateam Tech Meetup Vol.9 株式会社エイチームフィナジー テクニカルソリューション部 R&Dチーム 鈴⽊就⽃ GitHub
@s2terminal Twitter @suzukiterminal Qiita @suzuki_sh
© 2018 Ateam Inc. 今回お話する対象サービス ◧ ⾦融メディア事業の中のいちWebメディア ◧ 2013年12⽉(約 5
年半前)ローンチ ◧ グループ最⼤規模の売上に成⻑ 図: エイチームグループ ライフスタイルサポート事業の売上規模推移
© 2018 Ateam Inc. 3 画像の出典: https://unsplash.com/photos/O2MdroNurVw 運⽤を続けるうちに、システムが肥⼤化・複雑化 Webサイト上のコンテンツの ”正確な”
管理・更新が 問題となっていった
© 2018 Ateam Inc. 4 画像の出典: https://pixabay.com/images/id-1743963/ 複雑化した旧システムを刷新し 新しいシステムへ段階的な リプレースを実現したい
社内向け管理画⾯とお客様向けのページでは 失敗時のリスクの重さが異なる ページによっても広告出稿の 影響度の⼤⼩がある
© 2018 Ateam Inc. 5 システムリプレースの前提条件 新システムを機能毎に⼤きく3つのTier(段階)に分け Tier内でもURL毎に影響度の⼤⼩で分割し、段階的にリプレースした。 旧システムはPHPで動いているが、新システムには 社内に技術的な資産の多いRuby
on Railsへのリプレースを選択。 当然、RubyとPHPでは技術的に互換性は無いが、同時に稼働させる必要がある。 影響度の低い箇所から、段階的に移⾏したい そのため、移⾏期間中は 新旧の両システムを同時に稼働させたい
© 2018 Ateam Inc. 6 リプレースの構成概要と データ同期 画像の出典: https://pixabay.com/images/id-3246116/
© 2018 Ateam Inc. 7 データを同期させる必要 ユーザ向け ページ 社員向け 管理画⾯
旧システム MySQL データベース リプレース前の状態
© 2018 Ateam Inc. 8 データを同期させる必要 ユーザ向け ページ 社員向け 管理画⾯
MySQL データベース 旧システム ユーザ向け ページ 社員向け 管理画⾯ 新システム データ同期 MySQL データベース
© 2018 Ateam Inc. 9 新システムへのリプレース後の各データの扱い マスタデータ トランザクションデータ 旧システム Readのみ
Read/Write両⽅可能 新システム Read/Write両⽅可能 扱わない 今回のタイミングではマスタデータのみをリプレースし、 顧客申込情報などのトランザクションデータは まだ新システムでは取り扱わない事にした。 ■今回のプロジェクトの⽬的はマスタデータの取り扱いの課題からであり、 トランザクションデータを扱うシステムのリプレースは必須ではなかった ■移⾏先のシステムの仕様上、両者はシステム的に分離可能だった
© 2018 Ateam Inc. 10 データを同期させる必要 マスタデータのみを新システムに持っていくと決めたが 依然として、新システムと旧システムとを同時に稼働させ、 段階的にリプレースする必要がある。 新旧システム間のDBスキーマの形式は、似ているものの
完全⼀致するわけではない。 段階的なリプレースを実現するには、新旧の異なるシステムで 同⼀のマスタデータを参照できるようにする必要がある。
© 2018 Ateam Inc. 11 データ同期を実現した 3つの技術 画像の出典: https://pixta.jp/photo/46119614
© 2018 Ateam Inc. 12 データ同期の技術 ユーザ向け ページ 社員向け 管理画⾯
データベース 旧システム ユーザ向け ページ 社員向け 管理画⾯ データベース 新システム ②継続的な変更反映 ①初期移⾏ ③変換
© 2018 Ateam Inc. 13 1: 旧システム→新システムへの初期データの移⾏ 旧システムのデータを新システム⽤に変換する スクリプトを開発 •
新システムをリリースする時に、1度だけ実⾏。 • 新システム側のモデルクラスとして扱うため、 新システム側にRubyプログラムとして実装。 • プログラムの中⾝は、旧システムのデータをSQLで取得し 新システム側のデータモデルとして保存するもの。
© 2018 Ateam Inc. 14 2: 新システム→旧システムへと継続的にデータの変更を反映 • MySQL Replicationを使って
新システムから旧システムにデータを複製。 • Replicationは枯れた仕組みであり、運⽤も⽐較的低コスト • 今回発⽣する変更は社員向け管理画⾯のマスタデータ操作のみのため、 データ同期の反映は⾮同期でOK。 数秒のレプリケーション遅延は許容範囲だった。 • 別途データの変換を⾏う必要がある 開発当初の案としては、EmbulkやRubyのスクリプトを書いて 定期的にバッチ処理を動かすことで、新システムから旧システムへ データを変換しながら転送することを考えていた。 運⽤におけるコストの⾼さ(整合性の保証やリトライなど)が懸念で、やめた。
© 2018 Ateam Inc. 15 3: 旧システムで利⽤できるスキーマに変換 • MySQL Viewを使い、新システムのデータを
旧システムのスキーマに沿うように変換した。 • MySQL Replicationは同⼀データをそのまま複製するだけなので、 そのままのデータを旧システム上では使えない。 • 基本的に、新システムの機能は旧システムの上位互換となっていたため 旧システムのデータは新システムのデータのみを使って表現できた。 • 不⾜した部分は専⽤のテーブルを作るか、簡単なCASE⽂で対処 • Replicationで作られたテーブルを参照するViewを作り、 RENAME TABLEで新旧のテーブル名を差し替える事で 旧システムの参照データを新システムの物にリプレース。
© 2018 Ateam Inc. 16 データ同期の技術 データベース 旧システム データベース 新システム
②継続的な変更反映 ①初期移⾏ ③変換 新旧システム間でのデータ同期が実現
© 2018 Ateam Inc. 17 Amazon Aurora MySQLでの レプリケーションを利⽤した データ同期
画像の出典: https://pixta.jp/illustration/50017474
© 2018 Ateam Inc. 18 Amazon Aurora MySQLにおけるレプリケーションの利⽤ 今回のサービスは、DBにAmazon Aurora
MySQLを利⽤ Auroraにbinlogベースのレプリケーションを⼿動で構築 AWS側にもフルマネージドのレプリケーション機能は存在しているが、 インスタンス毎の完全なレプリカ作成しかできない。 今回は、旧システムのデータベースインスタンス内に 新システムのテーブルを共存させる必要があったため、binlogで⼿動構築。 Amazon Aurora MySQL とは AWSで提供されている、MySQLと互換性のあるマネージドのRDBMS パフォーマンス、セキュリティ、可⽤性の⾼さが特徴
© 2018 Ateam Inc. 19 Amazon Aurora MySQLにおけるレプリケーションの利⽤ Amazon Aurora
MySQLは、binlogを利⽤した ⼿動でのレプリケーション構築にも対応している。 外部のMySQLデータベースへデータを複製するための⼿段として、 AWS公式ドキュメントにも⼿順が紹介されている。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aur oraMySQL.Replication.MySQL.html 通常のMySQLでは「CHANGE MASTER TO」などのコマンドを使うところが AWS専⽤のコマンドに置き換えられている箇所があるため、要確認。
© 2018 Ateam Inc. 20 Amazon Aurora MySQLにおけるレプリケーションの利⽤ AWS CloudWatchでのレプリケーション遅延の監視
CloudWatchの「AuroraBinlogReplicaLag」というメトリクスで レプリケーション遅延 (いわゆる Seconds_Behind_Master) が、 CloudWatch上で計測できる。 似た名称の「AuroraReplicaLag」というメトリクスがあるが これはAWSのフルマネージド機能で作られたレプリカの話であり、 binlogベースのレプリケーション遅延ではない点に注意。
© 2018 Ateam Inc. 21 初期移⾏スクリプトと、MySQLのReplication・Viewを使い 新システムのマスタデータを、旧システムでも利⽤可能に。 このデータ同期により、同⼀のマスタデータを取り扱う 新システムへの段階的な移⾏が実現した。 管理画⾯やユーザ向けページを影響度毎に切り分け
部分的に旧システムを稼働させたまま、 新システムに移⾏できた。 まとめ 画像の出典: https://unsplash.com/photos/ckfkPwCEMNs
© 2018 Ateam Inc. 22 Links • 事業を変えるシステムリプレース • https://logmi.jp/tech/articles/321808
• 今回のリプレースについての、別の場所での発表資料です。 • 「なぜリプレースをしたか」「なぜRubyを選んだか」等についてはこちらを参照ください。 • 画像の出典 • https://unsplash.com/photos/O2MdroNurVw • https://unsplash.com/photos/ckfkPwCEMNs • https://pixabay.com/images/id-1743963/ • https://pixabay.com/images/id-3246116/ • https://pixta.jp/photo/46119614 • https://pixta.jp/illustration/50017474
「みんなで幸せになれる会社にすること」 「今から100年続く会社にすること」