第11章. MySQLをスケーリングする
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
個人的なプロジェクトや若い会社で MySQL を運用するのと、市場が確立され「ホッケースティック成長」を遂げているビジネスで MySQL を運用するのとでは、大きく異なる。高速なビジネス環境では、トラフィックは年々桁違いに増加し、環境はより複雑になり、それに伴ってデータニーズも急速に加速する。MySQLのスケールアップは、データのステートフルな性質のため、他のタイプのサーバとは大きく異なる。これをWebサーバと比較すると、ロードバランサの後ろにさらに追加するという、広く受け入れられているモデルが一般的である。
この章では、スケーリングとは何かを説明し、スケーリングが必要となる様々な軸について説明する。なぜ読み取りスケーリングが不可欠なのかを探り、書き込みスケーリングをより予測しやすくするためのキューイングなどの戦略を用いて、それを安全に達成する方法を紹介する。最後に、ProxySQLやVitessのようなツールを使ってデータセットをシャーディングし、書き込みをスケーリングする方法について説明する。この章が終わる頃には、自分のシステムがどのようなシーズナルパターンを持っているのか、どのように読み取りをスケーリングするのか、そしてどのように書き込みをスケーリングするのかを特定できるようになっているはずである。
スケーリングとは何か?
スケーリングとは、増大するトラフィックをサポートするシステムの能力のことである。システムの拡張性が高いか低いかの基準は、コストとシンプルさで測ることができる。システムのスケーリング能力を高めるのに、過度にコストがかかったり、複雑であったりすると、限界にぶつかったときに、この問題を解決するのに多大な労力を費やすことになる。
キャパシティは関連概念である。システムの能力とは、与えられた時間内に実行できる仕事量のことである。1しかし、容量は限定されなければならない。システムの最大スループットと容量は同じではない。ほとんどのベンチマークはシステムの最大スループットを測定するが、実際のシステムをそこまで追い込むことはできない。そうすれば、性能は低下し、応答時間は許容できないほど大きく変動するようになる。私たちは、システムの実際のキャパシティを、許容可能なパフォーマンスを提供しながら達成できるスループットと定義している。
容量とスケーラビリティはパフォーマンスとは無関係だ。高速道路を走る車に例えることができる:
-
システムとは高速道路であり、そこにあるすべての車線と車である。
-
パフォーマンスとは車の速さのことだ。
-
容量は車線数×最高安全速度である。
-
スケーラビリティとは、交通を停滞させることなく、より多くの車や車線を追加できる度合いのことだ。
この例えでは、スケーラビリティは、インターチェンジの設計の良し悪し、事故や故障を起こす車の多さ、走行速度の違いや車線変更の多さといった要素に左右されるが、一般化すれば、スケーラビリティは車のエンジンの性能には左右されない。しかし、一般的にスケーラビリティは車のエンジンの性能には依存しない。システムは高性能でなくてもスケーラブルになりうるという点を指摘しているのだ。
50,000フィートから見たスケーラビリティとは、リソースを追加することによって容量を追加する能力のことである。
MySQLアーキテクチャがスケーラブルであっても、アプリケーションはスケーラブルではないかもしれない。何らかの理由で容量を増やすのが難しい場合、アプリケーションは全体的にスケーラブルではない。以前、スループットの観点からキャパシティを定義したが、同じように5万フィートの視点からキャパシティを見る価値がある。この視点から見ると、キャパシティとは単に負荷を処理する能力を意味し、負荷をいくつかの異なる角度から考えることは有益である: ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access