Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

RDBリファクタリングと異種間DB移行の戦い / AWS-DMS

soudai sone
February 11, 2019

RDBリファクタリングと異種間DB移行の戦い / AWS-DMS

soudai sone

February 11, 2019
Tweet

More Decks by soudai sone

Other Decks in Technology

Transcript

  1. 自己紹介 曽根 壮大(34歳) 株式会社オミカレ 副社長/CTO • 日本PostgreSQLユーザ会 勉強会分科会 座長 •

    3人の子供がいます • 技術的にはWeb/LL言語/RDBが好きです そ ね た け と も
  2. 自己紹介 曽根 壮大(34歳) 株式会社オミカレ 副社長/CTO • 日本PostgreSQLユーザ会 勉強会分科会 座長 •

    3人の子供がいます • 技術的にはWeb/LL言語/RDBが好きです そ ね た け と も
  3. 謎のデータ mysql> SELECT gender FROM demo GROUP BY gender; +--------+

    | gender | +--------+ | 0 | | 1 | | 女性 | | 男性 | +--------+ 4 rows in set (0.62 sec)
  4. リファクタリング方針 Aurora みんなの婚活 オミカレ party_detail party_open party 既存スキーマ 新スキーマ オミカレ

    データベース トリガー ③トリガーがそれぞれのテーブル に書き込みを行う
  5. RDS for PostgreSQLの採用 主な理由 • トリガーを複数設定できるRDBMSである • Aurora PostgreSQL互換の情報の少なさ •

    AuroraはAuroraであり、OSSでは無い – ローカルで同じ開発環境を用意できない – 場合によってはExtensionの自作が必要かもしれない →EC2に移せる選択肢が必要
  6. Amazon DMSを選んだ理由 タスクの実行単位の指定方法 • 正規表現でのテーブル名の指定 – user_% や %hoge% のような指定

    • 移行ルールの指定 – 移行元と移行先でテーブル名が違う場合 – 対象データをWHERE句で絞り込みたい
  7. この方法のメリット • Model単位で移行が可能 – 対象のテーブル単位で対応できる – リスクの範囲を小さくできる • 既存の仕組みを止める必要が無い –

    カナリヤリリース出来る – ロールバックしやすい • 以下のパターンで概ねリスク低く、対応出来る – 読み込みだけAPIにして書き込みはOLD • この場合はデータはAmazon DMSで連携 – 書き込みはAPIとOLDの両方に書き込み、 読み込みはOLD • この場合はAmazon DMSを使わない
  8. この方法のデメリット • ローカルで再現出来ない – Amazon DMSが再現出来ない – 現状はAWS上に開発環境がある • DMSが単一障害点

    – DMSが遅延したりすることが稀にある – トリガーが失敗するとDMSが止まる • DMSが止まるとサービス障害 • リードレプリカが昇格に未対応 – エンドポイントが変わるとDMSが止まる • DMSのタスクの上限がある – 開発環境を無限には作れない – 現状は本番で20以上のタスクが動いている
  9. サービスを止めるな! AWS php mackerel-agent Slack ① SDKを実行 ② ログを取得 ③

    ログを確認 ④Mackerel経由で通知 Mackerel-agentが定期的に実行する