Upgrade to Pro — share decks privately, control downloads, hide ads and more …

VoicyのTiDB移行 失敗ポイント集 (20240613_Findy_TiDB)

VoicyのTiDB移行 失敗ポイント集 (20240613_Findy_TiDB)

2024年6月13日に、Findyさん主催のデータベース移行に関する勉強会で登壇した際の資料です。

大規模データベース移行の技術的チャレンジと実践例
https://findy.connpass.com/event/320871/

主に移行の過程で自分や自分のチームが失敗した内容をまとめました。

Koki Senda

June 13, 2024
Tweet

More Decks by Koki Senda

Other Decks in Programming

Transcript

  1. © Voicy, Inc. はじめに
 • TiDBの採用を決めるまでの話はQiita Conference 2024で話しました
 ◦ 「音声プラットフォームVoicyがTiDBを検証し採用に至るまで」

    
 ◦ アーカイブ
 ▪ https://youtu.be/vm3b6wdAuzw 
 ▪ 2:24:00 あたりから
 • 今回は実際の移行について
 ◦ 失敗したこと
 具体的な失敗内容の外部公開、悪用はお控えくださいw (感想などはOK!)
 メインDBをTiDBに移行しました 

  2. © Voicy, Inc. 失敗ポイント集 
 目次
 • 足りなかったSQL知識
 • 反映し忘れた設定


    • 途切れてしまったレプリケーション
 • 古すぎたLambda
 • 耐えられなかった負荷

  3. © Voicy, Inc. 失敗ポイント集 
 目次
 • 足りなかったSQL知識 
 •

    反映し忘れた設定
 • 途切れてしまったレプリケーション
 • 古すぎたLambda
 • 耐えられなかった負荷

  4. © Voicy, Inc. 足りなかったSQL知識 
 アプリケーション開発者に必要なのは “使い方” の知識だった 
 •

    限られた予算内で十分なパフォーマンスを出すにはチューニングが必要
 ◦ 有効なチューニングは「一般的なSQLチューニング」 
 ◦ TiDBだからといって特別なことは少ない 
 • はじめたての僕
 ◦ 「せっかくNewSQL使うんだし、仕組みを理解するぞ〜!」 

  5. © Voicy, Inc. 足りなかったSQL知識 
 アプリケーション開発者に必要なのは “使い方” の知識だった 
 •

    限られた予算内で十分なパフォーマンスを出すにはチューニングが必要
 ◦ 有効なチューニングは「一般的なSQLチューニング」 
 ◦ TiDBだからといって特別なことは少ない 
 • はじめたての僕
 ◦ 「せっかくNewSQL使うんだし、仕組みを理解するぞ〜!」 
 最初に買った本 

  6. © Voicy, Inc. 失敗ポイント集 
 目次
 • 足りなかったSQL知識
 • 反映し忘れた設定

    
 • 途切れてしまったレプリケーション
 • 古すぎたLambda
 • 耐えられなかった負荷

  7. © Voicy, Inc. 反映し忘れた設定 
 変更した設定を管理できていなかった 
 • テストやチューニング中にいろいろな設定を変更した
 •

    が、どれを変更したか管理できていなかった
 
 結果、移行時に設定漏れがあり障害発生 (sql_mode)
 
 → どこかで一元管理しましょう 

  8. © Voicy, Inc. 失敗ポイント集 
 目次
 • 足りなかったSQL知識
 • 反映し忘れた設定


    • 途切れてしまったレプリケーション 
 • 古すぎたLambda
 • 耐えられなかった負荷

  9. © Voicy, Inc. 途切れてしまったレプリケーション 
 可用性100%のサービスは無い 
 • 読み取りをTiDBに向けたタイミングで前半のレプリケーションがダウン
 現行


    移行先
 バックアップ
 読み
 書き
 書き込んだ内容を読もうとすると反映されていない状態に...
 監視を整えたり、
 一部が落ちても障害にならない
 仕組みを作りましょう

  10. © Voicy, Inc. 失敗ポイント集 
 目次
 • 足りなかったSQL知識
 • 反映し忘れた設定


    • 途切れてしまったレプリケーション
 • 古すぎたLambda 
 • 耐えられなかった負荷

  11. © Voicy, Inc. 古すぎたLambda 
 昔々、DBに接続するAWS Lambdaがおりました 
 • 接続するデータベースをTiDBに変更しようとした


    • そのとき、問題は起きました
 こいつが古すぎて
 変更できない...
 EOL対応は日頃から
 やっておきましょう

  12. © Voicy, Inc. 失敗ポイント集 
 目次
 • 足りなかったSQL知識
 • 反映し忘れた設定


    • 途切れてしまったレプリケーション
 • 古すぎたLambda
 • 耐えられなかった負荷 

  13. © Voicy, Inc. 耐えられなかった負荷 
 移行後にデータベースのキャパオーバーでサービスダウン 
 本番の負荷が未知だった
 • 本番相当のreq/secでAPIを叩いてみる検証はしていた


    エンドポイント req/sec /再生ログの記録 40 /チャンネル詳細情報の取得 10 /フォロー中のチャンネルの放送取得 10 /コメントの取得 5 ・・・
  14. © Voicy, Inc. 耐えられなかった負荷 
 移行後にデータベースのキャパオーバーでサービスダウン 
 本番の負荷が未知だった
 • 本番相当のreq/secでAPIを叩いてみる検証はしていた


    エンドポイント req/sec /再生ログの記録 40 /チャンネル詳細情報の取得 10 /フォロー中のチャンネルの放送取得 10 /コメントの取得 5 ・・・ が、実際の負荷とは乖離があった模様

  15. © Voicy, Inc. 耐えられなかった負荷 
 移行後にデータベースのキャパオーバーでサービスダウン 
 • ある日の Query

    Per Second (具体的な値は伏せます)
 朝の通勤時間帯
 がピーク
 だいたいこれくらいの 
 時間に切り替え

  16. © Voicy, Inc. 耐えられなかった負荷 
 移行後にデータベースのキャパオーバーでサービスダウン 
 • ある日の Query

    Per Second (具体的な値は伏せます)
 朝の通勤時間帯
 がピーク
 だいたいこれくらいの 
 時間に切り替え
 翌朝サービスダウン

  17. © Voicy, Inc. 耐えられなかった負荷 
 移行後にデータベースのキャパオーバーでサービスダウン 
 • ある日の Query

    Per Second (具体的な値は伏せます)
 朝の通勤時間帯
 がピーク
 だいたいこれくらいの 
 時間に切り替え
 翌朝サービスダウン
 CPU負荷50%のとき、
 「あと2倍まで耐えられる!」
 とはならない

  18. © Voicy, Inc. 耐えられなかった負荷 
 移行後にデータベースのキャパオーバーでサービスダウン 
 理由
 • 本番の負荷が未知だった


    • ピーク時に必要なキャパシティを見誤った
 対策
 → 専用の負荷試験環境で実際のワークロードを再現しましょう

  19. © Voicy, Inc. 耐えられなかった負荷 
 移行後にデータベースのキャパオーバーでサービスダウン 
 理由
 • 本番の負荷が未知だった


    • ピーク時に必要なキャパシティを見誤った
 対策
 → 専用の負荷試験環境で実際のワークロードを再現しましょう
 その後、一旦だいぶ余裕を持ったキャパシティで移行しきった