SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
段階的なシステムリプレースを実現するデータ同期技術
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年続く会社にすること」

Mais conteúdo relacionado

Semelhante a 段階的なシステムリプレースを実現するデータ同期技術

分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
Ryusuke Ashiya
 
Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用の...
Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用の...Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用の...
Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用の...
Kazuya Sugimoto
 

Semelhante a 段階的なシステムリプレースを実現するデータ同期技術 (20)

JavaからAkkaハンズオン
JavaからAkkaハンズオンJavaからAkkaハンズオン
JavaからAkkaハンズオン
 
ゲーム事業×データ分析 ドリコムにおける組織と仕事の組み立て方
ゲーム事業×データ分析 ドリコムにおける組織と仕事の組み立て方ゲーム事業×データ分析 ドリコムにおける組織と仕事の組み立て方
ゲーム事業×データ分析 ドリコムにおける組織と仕事の組み立て方
 
ヤフーにおけるTableau Blue Printの実践
ヤフーにおけるTableau Blue Printの実践ヤフーにおけるTableau Blue Printの実践
ヤフーにおけるTableau Blue Printの実践
 
Get trust and confidence to manage your data in hybrid it environments japanese
 Get trust and confidence to manage your data in hybrid it environments japanese Get trust and confidence to manage your data in hybrid it environments japanese
Get trust and confidence to manage your data in hybrid it environments japanese
 
要求開発アライアンス 9月定例会議
要求開発アライアンス 9月定例会議要求開発アライアンス 9月定例会議
要求開発アライアンス 9月定例会議
 
国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例
国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例
国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例
 
20180831 [DeLTA TECH] DeLTA-Liteを支える技術(システム構成編)
20180831 [DeLTA TECH] DeLTA-Liteを支える技術(システム構成編)20180831 [DeLTA TECH] DeLTA-Liteを支える技術(システム構成編)
20180831 [DeLTA TECH] DeLTA-Liteを支える技術(システム構成編)
 
Extreme Management Center を活用したネットワークの見える化
Extreme Management Center を活用したネットワークの見える化Extreme Management Center を活用したネットワークの見える化
Extreme Management Center を活用したネットワークの見える化
 
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
 
リクルートにおけるデータのインフラ化への取組
リクルートにおけるデータのインフラ化への取組リクルートにおけるデータのインフラ化への取組
リクルートにおけるデータのインフラ化への取組
 
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
 
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
 
Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用の...
Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用の...Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用の...
Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用の...
 
バイモーダルIT時代の守りと攻めの運用を実現する「Hinemos」
バイモーダルIT時代の守りと攻めの運用を実現する「Hinemos」バイモーダルIT時代の守りと攻めの運用を実現する「Hinemos」
バイモーダルIT時代の守りと攻めの運用を実現する「Hinemos」
 
Tier Ⅳ Tech Meetup #2 - 自動運転を作るのはCloudシステムの集合体?? 活用技術を大解剖 -
Tier Ⅳ Tech Meetup #2 - 自動運転を作るのはCloudシステムの集合体?? 活用技術を大解剖 -Tier Ⅳ Tech Meetup #2 - 自動運転を作るのはCloudシステムの集合体?? 活用技術を大解剖 -
Tier Ⅳ Tech Meetup #2 - 自動運転を作るのはCloudシステムの集合体?? 活用技術を大解剖 -
 
Power platform day summer 19
Power platform day summer 19 Power platform day summer 19
Power platform day summer 19
 
de:code2018 登壇資料
de:code2018 登壇資料de:code2018 登壇資料
de:code2018 登壇資料
 
社内エンジニアを支えるテクニカルアカウントマネージャー
社内エンジニアを支えるテクニカルアカウントマネージャー社内エンジニアを支えるテクニカルアカウントマネージャー
社内エンジニアを支えるテクニカルアカウントマネージャー
 
Accel series 2018_spring
Accel series 2018_springAccel series 2018_spring
Accel series 2018_spring
 
06 FinTech (楽天生命)
06 FinTech (楽天生命)06 FinTech (楽天生命)
06 FinTech (楽天生命)
 

Mais de Shuto Suzuki

Mais de Shuto Suzuki (7)

TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
 
1年でモダンなフロントエンドに追いついた話 2019-08-22 Mix Leap Joint #26
1年でモダンなフロントエンドに追いついた話  2019-08-22 Mix Leap Joint #261年でモダンなフロントエンドに追いついた話  2019-08-22 Mix Leap Joint #26
1年でモダンなフロントエンドに追いついた話 2019-08-22 Mix Leap Joint #26
 
20190706 BCU30 事業を変えるシステムリプレース
20190706 BCU30 事業を変えるシステムリプレース20190706 BCU30 事業を変えるシステムリプレース
20190706 BCU30 事業を変えるシステムリプレース
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
MySQLオンラインマイグレーションツールgh-ostで深夜メンテナンスを無くした話
MySQLオンラインマイグレーションツールgh-ostで深夜メンテナンスを無くした話MySQLオンラインマイグレーションツールgh-ostで深夜メンテナンスを無くした話
MySQLオンラインマイグレーションツールgh-ostで深夜メンテナンスを無くした話
 
Monaco Editor on Cloud
Monaco Editor on CloudMonaco Editor on Cloud
Monaco Editor on Cloud
 
Microsoft Azureで 女子力を生成する
Microsoft Azureで 女子力を生成するMicrosoft Azureで 女子力を生成する
Microsoft Azureで 女子力を生成する
 

Último

Último (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

段階的なシステムリプレースを実現するデータ同期技術

  • 1. 段階的なシステムリプレースを実現するデータ同期技術 Ateam Tech Meetup Vol.9 株式会社エイチームフィナジー テクニカルソリューション部 R&Dチーム 鈴⽊就⽃ GitHub @s2terminal Twitter @suzukiterminal Qiita @suzuki_sh
  • 2. © 2018 Ateam Inc. 今回お話する対象サービス ◧ ⾦融メディア事業の中のいちWebメディア ◧ 2013年12⽉(約 5 年半前)ローンチ ◧ グループ最⼤規模の売上に成⻑ 図: エイチームグループ ライフスタイルサポート事業の売上規模推移
  • 3. © 2018 Ateam Inc. 3画像の出典: https://unsplash.com/photos/O2MdroNurVw 運⽤を続けるうちに、システムが肥⼤化・複雑化 Webサイト上のコンテンツの ”正確な” 管理・更新が 問題となっていった
  • 4. © 2018 Ateam Inc. 4画像の出典: https://pixabay.com/images/id-1743963/ 複雑化した旧システムを刷新し 新しいシステムへ段階的な リプレースを実現したい 社内向け管理画⾯とお客様向けのページでは 失敗時のリスクの重さが異なる ページによっても広告出稿の 影響度の⼤⼩がある
  • 5. © 2018 Ateam Inc. 5 システムリプレースの前提条件 新システムを機能毎に⼤きく3つのTier(段階)に分け Tier内でもURL毎に影響度の⼤⼩で分割し、段階的にリプレースした。 旧システムはPHPで動いているが、新システムには 社内に技術的な資産の多いRuby on Railsへのリプレースを選択。 当然、RubyとPHPでは技術的に互換性は無いが、同時に稼働させる必要がある。 影響度の低い箇所から、段階的に移⾏したい そのため、移⾏期間中は 新旧の両システムを同時に稼働させたい
  • 6. © 2018 Ateam Inc. 6 リプレースの構成概要と データ同期 画像の出典: https://pixabay.com/images/id-3246116/
  • 7. © 2018 Ateam Inc. 7 データを同期させる必要 ユーザ向け ページ 社員向け 管理画⾯ 旧システム MySQL データベース リプレース前の状態
  • 8. © 2018 Ateam Inc. 8 データを同期させる必要 ユーザ向け ページ 社員向け 管理画⾯ MySQL データベース 旧システム ユーザ向け ページ 社員向け 管理画⾯ 新システム データ同期 MySQL データベース
  • 9. © 2018 Ateam Inc. 9 新システムへのリプレース後の各データの扱い マスタデータ トランザクションデータ 旧システム Readのみ Read/Write両⽅可能 新システム Read/Write両⽅可能 扱わない 今回のタイミングではマスタデータのみをリプレースし、 顧客申込情報などのトランザクションデータは まだ新システムでは取り扱わない事にした。 ■今回のプロジェクトの⽬的はマスタデータの取り扱いの課題からであり、 トランザクションデータを扱うシステムのリプレースは必須ではなかった ■移⾏先のシステムの仕様上、両者はシステム的に分離可能だった
  • 10. © 2018 Ateam Inc. 10 データを同期させる必要 マスタデータのみを新システムに持っていくと決めたが 依然として、新システムと旧システムとを同時に稼働させ、 段階的にリプレースする必要がある。 新旧システム間のDBスキーマの形式は、似ているものの 完全⼀致するわけではない。 段階的なリプレースを実現するには、新旧の異なるシステムで 同⼀のマスタデータを参照できるようにする必要がある。
  • 11. © 2018 Ateam Inc. 11 データ同期を実現した 3つの技術 画像の出典: https://pixta.jp/photo/46119614
  • 12. © 2018 Ateam Inc. 12 データ同期の技術 ユーザ向け ページ 社員向け 管理画⾯ データベース 旧システム ユーザ向け ページ 社員向け 管理画⾯ データベース 新システム ②継続的な変更反映 ①初期移⾏③変換
  • 13. © 2018 Ateam Inc. 13 1: 旧システム→新システムへの初期データの移⾏ 旧システムのデータを新システム⽤に変換する スクリプトを開発 • 新システムをリリースする時に、1度だけ実⾏。 • 新システム側のモデルクラスとして扱うため、 新システム側にRubyプログラムとして実装。 • プログラムの中⾝は、旧システムのデータをSQLで取得し 新システム側のデータモデルとして保存するもの。
  • 14. © 2018 Ateam Inc. 14 2: 新システム→旧システムへと継続的にデータの変更を反映 • MySQL Replicationを使って 新システムから旧システムにデータを複製。 • Replicationは枯れた仕組みであり、運⽤も⽐較的低コスト • 今回発⽣する変更は社員向け管理画⾯のマスタデータ操作のみのため、 データ同期の反映は⾮同期でOK。 数秒のレプリケーション遅延は許容範囲だった。 • 別途データの変換を⾏う必要がある 開発当初の案としては、EmbulkやRubyのスクリプトを書いて 定期的にバッチ処理を動かすことで、新システムから旧システムへ データを変換しながら転送することを考えていた。 運⽤におけるコストの⾼さ(整合性の保証やリトライなど)が懸念で、やめた。
  • 15. © 2018 Ateam Inc. 15 3: 旧システムで利⽤できるスキーマに変換 • MySQL Viewを使い、新システムのデータを 旧システムのスキーマに沿うように変換した。 • MySQL Replicationは同⼀データをそのまま複製するだけなので、 そのままのデータを旧システム上では使えない。 • 基本的に、新システムの機能は旧システムの上位互換となっていたため 旧システムのデータは新システムのデータのみを使って表現できた。 • 不⾜した部分は専⽤のテーブルを作るか、簡単なCASE⽂で対処 • Replicationで作られたテーブルを参照するViewを作り、 RENAME TABLEで新旧のテーブル名を差し替える事で 旧システムの参照データを新システムの物にリプレース。
  • 16. © 2018 Ateam Inc. 16 データ同期の技術 データベース 旧システム データベース 新システム ②継続的な変更反映 ①初期移⾏③変換 新旧システム間でのデータ同期が実現
  • 17. © 2018 Ateam Inc. 17 Amazon Aurora MySQLでの レプリケーションを利⽤した データ同期 画像の出典: https://pixta.jp/illustration/50017474
  • 18. © 2018 Ateam Inc. 18 Amazon Aurora MySQLにおけるレプリケーションの利⽤ 今回のサービスは、DBにAmazon Aurora MySQLを利⽤ Auroraにbinlogベースのレプリケーションを⼿動で構築 AWS側にもフルマネージドのレプリケーション機能は存在しているが、 インスタンス毎の完全なレプリカ作成しかできない。 今回は、旧システムのデータベースインスタンス内に 新システムのテーブルを共存させる必要があったため、binlogで⼿動構築。 Amazon Aurora MySQL とは AWSで提供されている、MySQLと互換性のあるマネージドのRDBMS パフォーマンス、セキュリティ、可⽤性の⾼さが特徴
  • 19. © 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専⽤のコマンドに置き換えられている箇所があるため、要確認。
  • 20. © 2018 Ateam Inc. 20 Amazon Aurora MySQLにおけるレプリケーションの利⽤ AWS CloudWatchでのレプリケーション遅延の監視 CloudWatchの「AuroraBinlogReplicaLag」というメトリクスで レプリケーション遅延 (いわゆる Seconds_Behind_Master) が、 CloudWatch上で計測できる。 似た名称の「AuroraReplicaLag」というメトリクスがあるが これはAWSのフルマネージド機能で作られたレプリカの話であり、 binlogベースのレプリケーション遅延ではない点に注意。
  • 21. © 2018 Ateam Inc. 21 初期移⾏スクリプトと、MySQLのReplication・Viewを使い 新システムのマスタデータを、旧システムでも利⽤可能に。 このデータ同期により、同⼀のマスタデータを取り扱う 新システムへの段階的な移⾏が実現した。 管理画⾯やユーザ向けページを影響度毎に切り分け 部分的に旧システムを稼働させたまま、 新システムに移⾏できた。 まとめ 画像の出典: https://unsplash.com/photos/ckfkPwCEMNs
  • 22. © 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