の基礎恐るることなかれ! Cloud NativeリレーショナルDB特集!!-- cndjp第12回
View Slide
自己紹介● 吉村 翔太● コミュニケーションズ所属● データサイエンスチーム● インフラエンジニア データエンジニアリング● 、 ● 趣味:ボードゲーム● コミュニティ活動
本日の目次• Vitessとは• Vitessのアーキテクチャ• Vitessのシャーディングの仕組み• 参考
とは
Vitessとは• シャーディングによるMySQLの水平スケーリングのためのデータベース・クラスタリングシステム• YouTubeによって開発された技術– First Commit in 2010– In Production at YouTube since 2011• CNCFに16番目にホストされたプロジェクト(現在はIncubating)
Cloud Native Landscape参考 https://landscape.cncf.io/関連
Cloud Native Landscape DB編参考 https://landscape.cncf.io/
Vitessの特徴• パフォーマンス– パフォーマンスを最適化するための機能の提供– トランザクション管理、全体のスループットを最適化• データベースの保護– 潜在的に問題のあるクエリーからの保護• クラスター管理・監視– WebベースのGUI、マスター管理ツール– パフォーマンスの監視・診断・分析ツールの提供• MySQLとの互換性– MySQLのクエリとの互換性MySQLクライアントからそのまま利用可能– (一部非互換あり)
MySQLに対するVitessの改良点参考 ttps://vitess.io/docs/overview/whatisvitess/• 接続プーリング– MySQLに比べて接続のオーバーヘッドが少ないので数千の接続数が可能• パフォーマンス– 例えばLIMITがないクエリなどをパフォーマンスを低下させるクエリを自動で書き換える• シャード管理– メタデータをetcdで管理し、ユーザが を経由して接続する方式を取っているためユーザ側がVitessの構成変更を意識することなく接続できる• ライフサイクルの管理の自動化– マスターフェイルオーバーやデータバックアップをVitessが自動で管理
Vitessのアーキテクチャ
Vitessの構成要素(1/3)• Topology– サーバー、シャーディング・スキームなどの構成情報を管理するメタデータストア• Kubernetesではetcdを利用• VTgate– アプリケーションからのクエリを正しいVTtabletにルーティングし、統合された結果をクライアントに返す軽量なプロキシサーバー• アプリケーションはデータの配置(Shard)を意識することなく、VTgateに対して処理を投げるだけ
Vitessの構成要素(2/3)• tablet– mysqldとVTtabletをセットでこう呼ぶ– tabletはmaster/replica/rdonlyなどのタイプが割り当てられる• VTtablet– MySQLデータベースの前に置かれているプロキシサーバー– MySQLインスタンスと1:1、有害なクエリからMySQLを保護
Vitessの構成要素(3/3)• VTctld– Vitessクラスタに対する管理操作を受け付けるHTTPサーバー– GUIも提供• VTctl– Vitessクラスタを管理するためのコマンドラインツール
Vitess on Kubernetes
参考 minikube上にhelmで立ち上げた場合参考 https://github.com/vitessio/vitess/blob/master/examples/helm/101_initial_cluster.yaml
Vitessのアーキテクチャ(おさらい)
Vitessのシャーディングの仕組み
シャーディング• シャーディングとは– 2つ以上のデータベースにデータを分割して格納すること– Shardを追加することでDBのスケールアウトし、パフォーマンスの向上を狙う技術• Vitessは2種類のShardingをサポート– Vertical Sharding(垂直): テーブル毎に複数のデータベースに分けて格納– Horizontal Sharding(水平): 1つのテーブルを複数のShardに分割し、複数のデータベースに分けて格納
Vitessのワークロード Level1
Vitessのワークロード Level2を分割
Vitessのワークロード Level3をシャーディング
テーブルのシャーディングA列 B列 C列… … …1235 20181004 yyy1236 20181005 zzz… … …A列 B列 C列… … …1234 20181003 xxx… … …のルールを定義{ }A列 B列 C列… … …1234 20181003 xxx1235 20181004 yyy1236 20181005 zzz… … …
シャーディングのロジックShard-4040-8080-C0C0-Keyspace ID…7F FF FF FF80 00 00 0080 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 FFA列 B列… …123412351236 …… …※ の名前は (キー範囲)の開始と終了進数で表示されハイフンで区切られるテーブル{ }• Vindexを付与した列からKeyspace IDを算出(Hashなど複数種のサポート)• Keyspace IDとShardとのマッピングに従ってデータを配置
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が内部的に使用
Vitessのワークロード Level3(おさらい)をシャーディング
参考
の状態参考 mysqlの操作が可能
参考 VTctldのGUI
参考 vtgateのGUI
Special Thanks!!@cotoc88本スライドの監修
• 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/)参考