San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
閉じる
プライバシー設定
ウェブサイト運営に必要なCookieや類似技術を使用しています。追加のCookieは貴社の同意がある場合のみ利用されます。同意は「Agree」をクリックすることでいただけます。どのデータが収集され、どのようにパートナーと共有されているかの詳細は、Cookieポリシープライバシーポリシーをご確認ください。
Cookieは、貴社デバイスの特性や、IPアドレス、閲覧履歴、位置情報、固有識別子などの特定の個人情報を取得、解析、保存するために使用されます。これらのデータは様々な目的で利用されます。分析Cookieによりパフォーマンスを評価し、オンライン体験やキャンペーンの効果向上に役立てます。パーソナライズCookieは、利用状況に応じた情報やサポートを通じ、貴社専用の体験を提供します。広告Cookieは、第三者が貴社のデータをもとにオーディエンスリストを作成し、ソーシャルメディアやネット上でのターゲット広告に使用します。貴社は各ページ下部のリンクから、いつでも同意の許可、拒否、または撤回が可能です。
ご送信ありがとうございます。内容を受け付けました。
申し訳ありません。フォーム送信時にエラーが発生しました。
DevSecOps

Vitessとは?

MySQLは非常に有名ですが、完璧というわけではありません。水平スケーリングはMySQL利用者にとって長年の難題で、それを解決するソリューションとしてVitessが注目されています。2010年にYouTubeが深刻なMySQLの問題に直面し、Vitessがその答えになりました。  

MySQLのシャーディング用ミドルウェアとして知られることの多いVitessは、多様なMySQLの構成上の課題を回避します。MySQLを使っている、または使う予定がある場合は、Vitessの重要なポイントが分かりやすくまとまっている本投稿をブックマークしておくと便利です。

Vitessとは?何を解決する?

MySQLを扱う方の多くは、複雑な水平スケーリングに苦労しています。Vitessはこれを簡単に解消できる方法です。この最新のデータベースソリューションは、膨大なデータベースインスタンスのエンドツーエンドのデプロイ、スケーリング、管理を担います。ただし、サポート対象はオープンソースのデータベースインスタンスのみです。

MySQLに加えて、MariaDBやPerconaにも対応しています。柔軟なアーキテクチャにより、パブリッククラウド、プライベートクラウド、物理サーバー環境でも同様の使いやすさと効率性を実感できます。

標準設定でVitessは基本的なSQL機能を強化し、NoSQLデータベースの拡張性に対応します。ニーズに合わせた導入を行えば、以下のように多方面をサポートできます。

  • 必要に応じたSQLデータベースのスケーリングが可能になり、アプリへの負荷を大幅に増やさずにデータを共有できます
  • ベアメタル環境からパブリックまたはプライベートクラウドへの移行を簡単に実行できます
  • 多くのSQLデータベースインスタンスを誤りなく管理できます
  • 主要言語やサーバープロトコルに対応しているため、MySQL導入が容易です
  • Kubernetes用のVitessを活用すれば、kubectl経由でKubernetesにMySQLを導入できます。 
  • K8s以外ではSlackでのVitess利用が代表的なユースケースです

Vitessの特徴

Vitessは他のMySQL導入ソリューションにはない特徴を備えているため、多くの場面で用いられています。代表的な機能をご紹介します。

  1. セキュリティ

VitessはMySQL導入をスムーズで安全に保つことを目指しています。そのため、クエリの書き換えやサニタイズ機能を用いて、開発者がクエリに制限を設けたり、不確定な更新を防いだりできるようにします。

さらに、クエリのブラックリスト機能があり、問題のあるクエリをデータベースから遠ざけます。この機能はルールのカスタマイズによって実現されます。

また、Query Killerという機能も注目に値します。これは、データ取得に通常より時間がかかるクエリを終了させ、導入を守るためのしくみです。最後に、VitessはテーブルACL機能を備えており、テーブルへのアクセス制御を設定できます。

  1. 性能

Vitessには、MySQL導入時の運用トラブルを最小限にする機能が多数備わっています。たとえば、接続プーリング機能があります。これは、複数のフロントエンドアプリからのクエリをまとめて1つのMySQL接続に束ねることで、常にクエリが存在し続ける状態を作り、パフォーマンスを高めます。

次に、クエリの重複排除(デデュープ)機能もあり、同じリクエストのクエリを再利用して効率を維持します。

最後に、タイムアウト制御はトランザクションマネージャによって行われ、トランザクション間の衝突を防ぎます。

  1. モニタリング

Vitessはデータベースの動作を監視するための多彩なパフォーマンス分析ツールを備えています。これにより、パフォーマンス上の遅延を素早く検知し、修正可能です。

  1. トポロジ管理ツール

Vitessはクラスタ管理ツールや使いやすいGUIを提供しており、トポロジ管理に役立ちます。Vitessベースのトポロジはクロスリージョンでも問題なく動作するよう設計されているので、管理の手間が大幅に軽減されます。  

  1. シャーディング

Vitessのシャーディング性能は高く、管理も容易です。動的に動作するリシャーディング機能が組み込まれ、水平および垂直の両シャーディングを自然にサポートします。

また、Vitessには多様なシャーディング方式が用意されており、簡単に統合できます。

Vitess Architecture

Vitessのアーキテクチャ

すでに述べたように、Vitessはクラスタ管理ツールとして利用されます。シンプルかつ効率的な動作を実現しているのは、その洗練されたアーキテクチャによるものです。

Vitessの主要構成要素としては、VTTabletとVTGateが挙げられます。まずはこの2つを説明します。  

  • VTGate

VTGateは、状態を持たないノード群の集合で、フロントエンドの役割を担います。ユーザーが発行するクエリはまずVTGateホストを通過し、内容を精査されます。

VTGateはクエリを詳細にチェックして、どのシャードが対象かを判断し、該当するシャードにのみ転送します。各シャードには複数のタブレットが存在し、そのうち1つがリーダーです。  

タブレットはVTTabletとMySQLの2つのコンポーネントで構成され、同一ホスト上で稼働します。

  • VTTablet

VTTabletは、ローカルのMySQLを監視し、正常に動作するよう支援する役割があります。問題のあるクエリを遮断したり、制限をかけたり、定期的なヘルスチェックを行ったりします。VTTabletは常にMySQLとペアで存在します。

メタデータはVitessアーキテクチャの一部で、キー空間のシャーディング方法やシャードのリーダー、シャード内のタブレットなどを定義します。

  • トポロジサービス

これらの情報はすべてトポロジサービスに蓄積されます。基本的にトポロジサービスは、小規模メタデータを絶えず保存できるストアである必要があります。  

Vitessではプラグイン方式を採用しているため、ConsulやZookeeper、etcdと完全に連携可能です。また、ウォッチ機能をサポートするメタデータストアを利用して、トポロジサービスを実装できます。トポロジサービス実装時には、VTGateが情報の読み込み・書き込みを支援します。  

ただし、トポロジサービスをVitessアーキテクチャに導入する際は、クエリのホットパスに含めないようにしてください。メタデータが変化するたびに更新が発生し、多くの場合はノード起動時に参照されます。

クエリのたびにトポロジサービスへアクセスすることはできません。シャードのルーティングが必要な場合は、VTGate側でクエリをキャッシュするようになっています。  

なお、トポロジサービスは大きく2種類あります。1つはどのセルにも属さないグローバルトポロジサービスで、変化の少ないデータを格納します。

もう1つはローカルトポロジサービスで、特定のセルに紐づき、グローバルトポロジサービスの情報に加え、そのセル専用の情報が含まれます。  

たとえば、そのセル内タブレットのホストアドレスはローカルトポロジサービスに保存されます。グローバルトポロジサービスがアップデートされると、ローカルにも同期されます。

  • セル

Vitessアーキテクチャの次の要素がセルです。通常は複数のセルがあり、セルとはホストの集合体を指します。参加ホストは独立した障害境界を持ち、障害発生時の影響を限定します。特にVitessをリージョンをまたいで運用する場合、セルが必要になります。

  • vtctlclientとvtctldサーバー

最後に、この2つのコンポーネントについて説明します。  

vtctldclientとvtctldサーバーはHTTPベースのクライアントとサーバーで、トポロジサービスを閲覧し把握しやすくします。vtctldclientはvtctldサーバーに対する呼び出しを行う役割を持ち、ユーザーがクラスタに変更を加える際の操作性を左右します。 

たとえば、vtctldclientでリペアレント操作を発火したり、タブレットのメタデータを読み取ったり、シャードのリーダーノードを探したり、リシャーディングのワークフローを実行したりできます。

Vitess vs. バニラMySQL 

MySQLの実装方法として有名なバニラMySQLは、Vitessとよく比較されます。以下に簡単な比較を示します。

Vitess vs. バニラMySQL

Vanilla MySQLVitess
この方式では、MySQL接続のオーバーヘッドは通常256KBから3MB程度に及び、MySQLのリリース種類によって差があります。Vitessでは接続のオーバーヘッドが非常に少なく済みます。Goの並行性を利用した接続プーリング機能があるためです。
接続数が増えるほどCPUオーバーヘッドが大きくなります。Vitessでは追加のオーバーヘッドはほぼありません。多数の接続を容易にさばきます。
クエリが制限なく書かれ、品質が低いケースが多いです。SQLパーサーを利用するためクエリが正しく書かれ、クエリ制限も設定されます。
ネイティブのシャーディングサポートはありません。Vitessは垂直・水平両方のシャーディングをネイティブでサポートします。
データベースライフサイクル管理が難しく、システム状態を把握するための継続的な情報収集が必要です。自動的にフェイルオーバーやバックアップなどを処理するため、ライフサイクル管理が容易です。

Vitess vs. NoSQL 

MySQL導入の従来手法としてNoSQLを利用することもありますが、VitessはNoSQLが解消していない欠点を補うモダンな選択肢です。

Vitess vs NoSQL

NoSQLVitess
利用中のデータテーブル間に明確なリレーションがなく、SQL言語のごく一部だけをサポートします。単なるキー・バリューストアにとどまらず、句や集計関数、JOINなどのクエリ構文をサポートします。
利用されるデータストアはトランザクションをサポートしないことが多いです。トランザクションサポートが充実しています。
独自のAPI群が豊富で、用途に合わせたアプリやツール、アーキテクチャを自由に構築可能です。独自APIや大きなバリエーションは少ないですが、既存のデータベースとして十分な互換性があります。
データベースサポートが限定的です。クエリのパフォーマンスを最適化するために、豊富なインデックス機能を備えています。

結論

MySQL導入に関しては、Vitessは検討に値するオプションです。正しく使えば非常に強力で、もともとはハイパースケール企業が利用していたものの、いまでは幅広く活用され、高い評価を得ています。 

パフォーマンスや安全性、拡張性を向上させる機能が多数含まれており、従来のNoSQLなどに比べてもより優れた結果を期待できます。興味があれば導入してみて、そのメリットを実感してみてください。

FAQ

最新情報を購読

学習目標
最新情報を
購読
購読する
関連トピック