$30 off During Our Annual Pro Sale. View Details »

Vitessの基礎.pdf

yosshi_
July 01, 2019

 Vitessの基礎.pdf

yosshi_

July 01, 2019
Tweet

More Decks by yosshi_

Other Decks in Technology

Transcript

  1. の基礎
    恐るることなかれ! Cloud NativeリレーショナルDB特集!!
    -- cndjp第12回

    View Slide

  2. 自己紹介
    ● 吉村 翔太
    ● コミュニケーションズ所属
    ● データサイエンスチーム
    ● インフラエンジニア データエンジニアリング
    ● 、  
    ● 趣味:ボードゲーム
    ● コミュニティ活動

    View Slide

  3. 本日の目次
    • Vitessとは
    • Vitessのアーキテクチャ
    • Vitessのシャーディングの仕組み
    • 参考

    View Slide

  4. とは

    View Slide

  5. Vitessとは
    • シャーディングによるMySQLの水平スケーリングのた
    めのデータベース・クラスタリングシステム
    • YouTubeによって開発された技術
    – First Commit in 2010
    – In Production at YouTube since 2011
    • CNCFに16番目にホストされたプロジェクト(現在は
    Incubating)

    View Slide

  6. Cloud Native Landscape
    参考 https://landscape.cncf.io/
    関連

    View Slide

  7. Cloud Native Landscape DB編
    参考 https://landscape.cncf.io/

    View Slide

  8. Vitessの特徴
    • パフォーマンス
    – パフォーマンスを最適化するた
    めの機能の提供
    – トランザクション管理、全体の
    スループットを最適化
    • データベースの保護
    – 潜在的に問題のあるクエリー
    からの保護
    • クラスター管理・監視
    – WebベースのGUI、マスター管
    理ツール
    – パフォーマンスの監視・
    診断・分析ツールの提供
    • MySQLとの互換性
    – MySQLのクエリとの互換性
    MySQLクライアントからそのま
    ま利用可能
    – (一部非互換あり)

    View Slide

  9. MySQLに対するVitessの改良点
    参考 ttps://vitess.io/docs/overview/whatisvitess/
    • 接続プーリング
    – MySQLに比べて接続のオーバーヘッドが少ないので数千の接続数が可能
    • パフォーマンス
    – 例えばLIMITがないクエリなどをパフォーマンスを低下させるクエリを自動で書き換える
    • シャード管理
    – メタデータをetcdで管理し、ユーザが を経由して接続する方式を取っているため
    ユーザ側がVitessの構成変更を意識することなく接続できる
    • ライフサイクルの管理の自動化
    – マスターフェイルオーバーやデータバックアップをVitessが自動で管理

    View Slide

  10. Vitessのアーキテクチャ

    View Slide

  11. Vitessのアーキテクチャ

    View Slide

  12. Vitessの構成要素(1/3)
    • Topology
    – サーバー、シャーディング・スキームなどの構成情報を
    管理するメタデータストア
    • Kubernetesではetcdを利用
    • VTgate
    – アプリケーションからのクエリを正しいVTtabletにルー
    ティングし、統合された結果をクライアントに返す軽量な
    プロキシサーバー
    • アプリケーションはデータの配置(Shard)を意識することなく、
    VTgateに対して処理を投げるだけ

    View Slide

  13. Vitessの構成要素(2/3)
    • tablet
    – mysqldとVTtabletをセットでこう呼ぶ
    – tabletはmaster/replica/rdonlyなどのタイプが割
    り当てられる
    • VTtablet
    – MySQLデータベースの前に置かれているプロキ
    シサーバー
    – MySQLインスタンスと1:1、有害なクエリから
    MySQLを保護

    View Slide

  14. Vitessの構成要素(3/3)
    • VTctld
    – Vitessクラスタに対する管理操作を受け付けるHTTPサーバー
    – GUIも提供
    • VTctl
    – Vitessクラスタを管理するためのコマンドラインツール

    View Slide

  15. Vitess on Kubernetes

    View Slide

  16. 参考 minikube上にhelmで立ち上げた場合
    参考 https://github.com/vitessio/vitess/blob/master/examples/helm/101_initial_cluster.yaml

    View Slide

  17. Vitessのアーキテクチャ(おさらい)

    View Slide

  18. Vitessのシャーディングの仕組み

    View Slide

  19. シャーディング
    • シャーディングとは
    – 2つ以上のデータベースにデータを分割して格納すること
    – Shardを追加することでDBのスケールアウトし、パフォーマンスの向上を狙う技

    • Vitessは2種類のShardingをサポート
    – Vertical Sharding(垂直): テーブル毎に複数のデータベースに分けて格納
    – Horizontal Sharding(水平): 1つのテーブルを複数のShardに分割し、
    複数のデータベースに分けて格納

    View Slide

  20. Vitessのワークロード Level1

    View Slide

  21. Vitessのワークロード Level2
    を分割

    View Slide

  22. Vitessのワークロード Level3
    をシャーディング

    View Slide

  23. テーブルのシャーディング
    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
    … … …

    View Slide

  24. シャーディングのロジック
    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とのマッピングに従ってデータを配置

    View Slide

  25. 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が内部的に使用

    View Slide

  26. Vitessのワークロード Level3(おさらい)
    をシャーディング

    View Slide

  27. 参考

    View Slide

  28. の状態
    参考 mysqlの操作が可能

    View Slide

  29. 参考 VTctldのGUI

    View Slide

  30. 参考 VTctldのGUI

    View Slide

  31. 参考 VTctldのGUI

    View Slide

  32. 参考 VTctldのGUI

    View Slide

  33. 参考 vtgateのGUI

    View Slide

  34. 参考 vtgateのGUI

    View Slide

  35. Special Thanks!!
    @cotoc88
    本スライドの監修

    View Slide

  36. • 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/)
    参考

    View Slide