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

Vitessの基礎.pdf

24606216ae4bbee28494552cb71cc220?s=47 yosshi_
July 01, 2019

 Vitessの基礎.pdf

24606216ae4bbee28494552cb71cc220?s=128

yosshi_

July 01, 2019
Tweet

Transcript

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

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

    データエンジニアリング • 、   • 趣味:ボードゲーム • コミュニティ活動
  3. 本日の目次 • Vitessとは • Vitessのアーキテクチャ • Vitessのシャーディングの仕組み • 参考

  4. とは

  5. Vitessとは • シャーディングによるMySQLの水平スケーリングのた めのデータベース・クラスタリングシステム • YouTubeによって開発された技術 – First Commit in

    2010 – In Production at YouTube since 2011 • CNCFに16番目にホストされたプロジェクト(現在は Incubating)
  6. Cloud Native Landscape 参考 https://landscape.cncf.io/ 関連

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

  8. Vitessの特徴 • パフォーマンス – パフォーマンスを最適化するた めの機能の提供 – トランザクション管理、全体の スループットを最適化 •

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

    例えばLIMITがないクエリなどをパフォーマンスを低下させるクエリを自動で書き換える • シャード管理 – メタデータをetcdで管理し、ユーザが を経由して接続する方式を取っているため ユーザ側がVitessの構成変更を意識することなく接続できる • ライフサイクルの管理の自動化 – マスターフェイルオーバーやデータバックアップをVitessが自動で管理
  10. Vitessのアーキテクチャ

  11. Vitessのアーキテクチャ

  12. Vitessの構成要素(1/3) • Topology – サーバー、シャーディング・スキームなどの構成情報を 管理するメタデータストア • Kubernetesではetcdを利用 • VTgate

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

    – MySQLデータベースの前に置かれているプロキ シサーバー – MySQLインスタンスと1:1、有害なクエリから MySQLを保護
  14. Vitessの構成要素(3/3) • VTctld – Vitessクラスタに対する管理操作を受け付けるHTTPサーバー – GUIも提供 • VTctl –

    Vitessクラスタを管理するためのコマンドラインツール
  15. Vitess on Kubernetes

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

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

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

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

    – Vertical Sharding(垂直): テーブル毎に複数のデータベースに分けて格納 – Horizontal Sharding(水平): 1つのテーブルを複数のShardに分割し、 複数のデータベースに分けて格納
  20. Vitessのワークロード Level1

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

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

  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 … … …
  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とのマッピングに従ってデータを配置
  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が内部的に使用
  26. Vitessのワークロード Level3(おさらい) をシャーディング

  27. 参考

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

  29. 参考 VTctldのGUI

  30. 参考 VTctldのGUI

  31. 参考 VTctldのGUI

  32. 参考 VTctldのGUI

  33. 参考 vtgateのGUI

  34. 参考 vtgateのGUI

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

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