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

Vitessの基礎.pdf

yosshi_
July 01, 2019

 Vitessの基礎.pdf

yosshi_

July 01, 2019
Tweet

More Decks by yosshi_

Other Decks in Technology

Transcript

  1. 自己紹介 • 吉村 翔太 • コミュニケーションズ所属 • データサイエンスチーム • インフラエンジニア

    データエンジニアリング • 、   • 趣味:ボードゲーム • コミュニティ活動
  2. Vitessの特徴 • パフォーマンス – パフォーマンスを最適化するた めの機能の提供 – トランザクション管理、全体の スループットを最適化 •

    データベースの保護 – 潜在的に問題のあるクエリー からの保護 • クラスター管理・監視 – WebベースのGUI、マスター管 理ツール – パフォーマンスの監視・ 診断・分析ツールの提供 • MySQLとの互換性 – MySQLのクエリとの互換性 MySQLクライアントからそのま ま利用可能 – (一部非互換あり)
  3. MySQLに対するVitessの改良点 参考 ttps://vitess.io/docs/overview/whatisvitess/ • 接続プーリング – MySQLに比べて接続のオーバーヘッドが少ないので数千の接続数が可能 • パフォーマンス –

    例えばLIMITがないクエリなどをパフォーマンスを低下させるクエリを自動で書き換える • シャード管理 – メタデータをetcdで管理し、ユーザが を経由して接続する方式を取っているため ユーザ側がVitessの構成変更を意識することなく接続できる • ライフサイクルの管理の自動化 – マスターフェイルオーバーやデータバックアップをVitessが自動で管理
  4. Vitessの構成要素(1/3) • Topology – サーバー、シャーディング・スキームなどの構成情報を 管理するメタデータストア • Kubernetesではetcdを利用 • VTgate

    – アプリケーションからのクエリを正しいVTtabletにルー ティングし、統合された結果をクライアントに返す軽量な プロキシサーバー • アプリケーションはデータの配置(Shard)を意識することなく、 VTgateに対して処理を投げるだけ
  5. Vitessの構成要素(2/3) • tablet – mysqldとVTtabletをセットでこう呼ぶ – tabletはmaster/replica/rdonlyなどのタイプが割 り当てられる • VTtablet

    – MySQLデータベースの前に置かれているプロキ シサーバー – MySQLインスタンスと1:1、有害なクエリから MySQLを保護
  6. シャーディング • シャーディングとは – 2つ以上のデータベースにデータを分割して格納すること – Shardを追加することでDBのスケールアウトし、パフォーマンスの向上を狙う技 術 • Vitessは2種類のShardingをサポート

    – Vertical Sharding(垂直): テーブル毎に複数のデータベースに分けて格納 – Horizontal Sharding(水平): 1つのテーブルを複数のShardに分割し、 複数のデータベースに分けて格納
  7. テーブルのシャーディング A列 B列 C列 … … … 1235 20181004 yyy

    1236 20181005 zzz … … … A列 B列 C列 … … … 1234 20181003 xxx … … … のルール を定義 { } A列 B列 C列 … … … 1234 20181003 xxx 1235 20181004 yyy 1236 20181005 zzz … … …
  8. シャーディングのロジック Shard -40 40-80 80-C0 C0- Keyspace ID … 7F

    FF FF FF 80 00 00 00 80 00 00 01 … Key Range :00 00 00 00 – 3F FF FF FF :3F FF FF FF – 7F FF FF FF :80 00 00 00 – C0 00 00 00 :C0 00 00 00 – FF FF FF FF A列 B列 … … 1234 1235 1236 … … … ※ の名前は (キー範囲)の開始と終了 進数で表示されハイフンで区切られる テーブル { } • Vindexを付与した列からKeyspace IDを算出(Hashなど複数種のサポート) • Keyspace IDとShardとのマッピングに従ってデータを配置
  9. VindexとKeyspace ID • Vindex – キーとなる列とKeyspace IDの算出ロジックを定義 • 算出ロジックは選択可能 –

    例:Hash/Functional/Lookup Unique/Lookup NonUnique – テーブルは複数のVindexを持つことができる • プライマリVindex: Shard分割に使用する一意な列を指定(Sharding Key) • セカンダリVindex: プライマリVindexを使用しないWHERE句の最適化を提供 (クロスシャードIndex) • Keyspace ID – 特定の行がどのShardに存在するかを決定・特定するために使用される値 – Vitessが内部的に使用
  10. • JapanContainerDays v18.12 Kubernetesが超強力な分散RDBに vitessの真価を大検証してみた - 早川 博 , 茂

    こと(日本オラクル) (https://speakerdeck.com/cotoc/20181204-vitess-jkd-day1) • Kubecon China 2019でのToliver氏の発表 (https://kccncosschn19eng.sched.com/speaker/toliver17?iframe=no&w=100%&sidebar=yes&bg=no) • Vitessの公式サイトのPresentations and Videos (https://vitess.io/docs/resources/presentations/) 参考