「大規模データベース移行の技術的チャレンジと実践例」に参加してきました

VoicyのTiDB移行 失敗ポイント集

  • 株式会社Voicy 千田 航己@thousan_daさん

TiDB

  • 最近メインのDBをTiDBに移行した
  • 足りなかったSQL知識
    • 一般的なチューニング知識が必要
    • TiDBならではというのは少ない
  • 反映し忘れ設定
    • チューニング中にどれがきいてよくなったか分からなくなった
    • 移行時に設定漏れがあった
  • 途切れてしまったレプリケーション
    • 2段階でリバートしやすく移行した
    • 移行先と同期を取りながら移行
    • 読み込みだけ先にTiDBに
    • その後書き込みも切り替え
    • 同期が止まることも想定に入れた構成が必要
  • 古すぎたLambda
    • Lambdaが古すぎて変更できなくなっていた
    • EOL対応は日頃からやっておくこと
  • 耐えられなかった負荷
    • DBキャパオーバーで落ちた
    • 本番の負荷が未知だった
      • ログからわかる本番相当の負荷試験はしてた
      • リクエストの偏りなど考慮できてなかった
    • ピーク時負荷のキャパシティを見誤った

スケーラビリティの課題解決に向けたココナラのデータベース移行戦略

DBの課題

  • スケーラビリティの確保
    • KPIとしてリクエスト成功99.96%
    • なのにRDSのSLAは99.95%
  • IOPSの上限に抵触しそう
    • CPUやメモリは問題なかった
    • ストレージを拡張することで一時しのぎ
  • MySQL5.7のEOL対応

課題との向き合い

  • RDSやめてAurora
  • DB移行のリスクを経営陣にインプット
    • 5.7EOL対応を1年半がかりで立ち上げ
  • SQL8億本を自動テストするツールを導入

Aurora から Spanner への移行の決断と背景

  • 株式会社TimeTree 金井 栄喜さん

DB移行

  • 背景
    • データ量の増加
    • DBの物理的な上限
      • ストレージ/コネクション/ローカルストレージ
    • スケーリングやオンラインDDLなどへ影響
  • 移行推進
    • 2019:モニタリングを充実させる
    • 2022:いよいよという空気で採用もはじめる
    • 2024:PJ立ち上げもろもろ整理し取締役会承認
  • 決断
    • 本当に実施するのか
      • 前から発信して認知してたのが良かった
      • サービス成長においても影響ある
    • 手段
      • Vitess
        • 水平スケーリング
      • PlanetScale
        • Vitessを運用してくれるSaaS
      • Spanner
        • GoogleCloudのフルマネージドでシャーディング自動でやってくれる
        • BigQueryとのシームレスな連携
        • これを採用

Raftとは?/仕組みから考える得意なこと苦手なこと

Raft

  • Raft
  • なぜ必要
    • two phase commitではダメ
    • Jespen Test
      • OSSのテストフレームワーク
      • 分散システムの一貫性と信頼性を検証する
      • 意図的に異常な状態作ってテスト
      • RedisやMongoでは壊れる
  • 仕組み
    • ノード
      • リーダー
        • すべてのリクエストを受け取る
      • フォロワー
        • 命令を受け取る
      • 候補者
        • リーダー候補
    • ターム
      • 今のリーダーが何代目か
    • ログ/インデックス
      • 今のリーダーの何個目の命令か
      • 一意に命令できるように