Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

とは

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Vitessのアーキテクチャ

Slide 11

Slide 11 text

Vitessのアーキテクチャ

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Vitess on Kubernetes

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

シャーディング • シャーディングとは – 2つ以上のデータベースにデータを分割して格納すること – Shardを追加することでDBのスケールアウトし、パフォーマンスの向上を狙う技 術 • Vitessは2種類のShardingをサポート – Vertical Sharding(垂直): テーブル毎に複数のデータベースに分けて格納 – Horizontal Sharding(水平): 1つのテーブルを複数のShardに分割し、 複数のデータベースに分けて格納

Slide 20

Slide 20 text

Vitessのワークロード Level1

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

参考

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

参考 VTctldのGUI

Slide 30

Slide 30 text

参考 VTctldのGUI

Slide 31

Slide 31 text

参考 VTctldのGUI

Slide 32

Slide 32 text

参考 VTctldのGUI

Slide 33

Slide 33 text

参考 vtgateのGUI

Slide 34

Slide 34 text

参考 vtgateのGUI

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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