Google Cloud のブロックストレージの使い方
2020 年 7 月に新しい バランス永続ディスク( pd-balanced )と呼ばれる永続ディスクのディスクタイプが追加されました、この記事ではこの新しい永続ディスク タイプについても触れつつ、Google Cloud のブロックストレージの使い方について解説します。
この記事は Google Cloud Japan Customer Engineer Advent Calendar 2020 の 7 日目の記事です。前回は Yasushi Takata の「アプリケーションプラットフォーム選択におけるベストプラクティス」でした。
ちなみに本記事の公開日である 12 月 7 日は日本で初めてクリスマスツリーが飾られた日で、クリスマスツリーの日だそうです、みなさんクリスマスの準備は順調でしょうか?
tl;dr
- Google Cloud のブロックストレージには永続ディスクとローカル SSD があるが、まずは永続ディスクの利用を検討する
- 永続ディスクはディスクのサイズと接続元 VM のマシンタイプと vCPU 数でパフォーマンスが決定される
- 新しい バランス永続ディスク( pd-balanced )が追加され、こちらを活用することでコスト最適化が狙える
- リージョン永続ディスクを利用すると、リージョン内の選択した2つのゾーンにデータがレプリケーションされるが、限界性能はゾーン永続ディスクより低いので注意が必要
Google Cloud で利用可能なブロックストレージについて
Google Cloud の Computer Engine の VM から利用可能なブロックストレージとして以下の 2 種類が利用可能です。
- 永続ディスク
- ローカル SSD
上記のうちローカル SSD に関しては、格納されたデータはインスタンスが停止または削除されると削除されてしまう為、一般的なデータ保存用途ではなく、キャッシュ用途やジョブ実行時の一時格納領域としての利用向けのブロックストレージと、利用目的が限られるため、この記事では永続ディスクについて解説します。
永続ディスクについてはパフォーマンス特性の違う以下の 3 種類のディスクタイプが利用可能です。冒頭で述べさせて頂いたとおり、2020 年 7 月に新しい バランス永続ディスク( pd-balanced )という新しいディクタイプが追加になっており、性能とコストのバランスがちょうど標準永続ディスクと SSD 永続ディスクの間くらいで、標準永続ディスクでは性能が足りなかったが、SSD 永続ディスクではオーバスペックとなっていた場合にコストを最適化することができるようになりました。
- 標準永続ディスク( pd-standard )
- バランス永続ディスク( pd-balanced ) ← New!
- SSD 永続ディスク( pd-ssd )
また、デフォルトだとデプロイしたゾーンからのみアクセス可能なゾーン永続ディスクとなりますが、リージョンの選択した 2 つのゾーンにデータがレプリケーションされるリージョン永続ディスクとして、ディスクを作成することが可能で、ゾーンをまたいだ HA 構成を構成する場合などに利用可能です。また、詳細は後述しますがリージョン永続ディスクは限界性能がゾーン永続ディスクよりも低い為、性能面でゾーン永続ディスクに劣るということも注意事項です。
※ リージョン永続ディスクを用いたマルチゾーンでの HA 構成についてはソリューションデザインパターン:高可用性を確保する為のデザイン パターンも参照ください。
- ゾーン永続ディスク
デプロイしたゾーンからのみアクセス可能 - リージョン永続ディスク
リージョン内の選択した2つのゾーンにデータがレプリケーションされる、限界性能はゾーン永続ディスクより低い
永続ディスクのパフォーマンスについて
永続ディスクを上手に使いこなすためには、必要なパフォーマンスを確保するために考慮が必要な要素と、 3 つのディスクタイプの違いについて理解する事が重要となります。
必要なパフォーマンスを確保するために考慮が必要な要素としては、永続ディスクのパフォーマンスは接続されているディスクのサイズと接続する VM インスタンスの vCPU 数で決定され、それぞれの定義の低いほうが上限となる形で利用いただきます。
- ディスクサイス
- インスタンスの vCPU 数
また、永続ディスクのパフォーマンスについては公式ドキュメントのブロック ストレージのパフォーマンスに詳しい記載があるので、ぜひこちらも参照しながら読み進めて頂ければ幸いです。
ディスクサイズによるストレージ パフォーマスの制限
まず一つ目の要素であるディスクサイズに関してですが、永続ディスクはディスクサイズを大きくすることで IOPS / スループットの上限を上げる事ができます。
また、ディスクタイプごとに GB ごとの IOPS / スループット の値が異なり、読み取り IOPS を例に取ると、以下のような相関となります。
補足ですが、これまでは選択肢が標準永続ディスクまたは SSD 永続ディスクのみで、その性能のギャップが大きかった為、標準永続ディスクで要件が満たされない場合は、高価な SSD 永続ディスクを利用する必要がありましたが、バランス永続ディスクの登場により、特にディスクサイズが大きい場合にコストを最適化できると思います。
ちなみに、このディスクサイズに関しては、接続されている一つ一つのディスクのサイズではなく、ある VM インスタンスに接続されているディスクのディスクタイプごとの合計値サイズでの計算となので、無理に一つにまとめる必要はなく、運用しやすいように必要に応じて分割して頂くことも可能です。
インスタンスの vCPU 数によるストレージ パフォーマスの制限
永続ディスクのパフォーマンスを決定するもう一つの要素が、接続している VM の vCPU 数による制限です。こちらに マシンタイプと vCPU 数ごとの表があるため、参照しながら必要に応じて vCPU 数を調整してください。
また、もう一つ注意が必要なのが、永続ディスクへの IO はネットワーク経由で行われ、 VM の各マシンタイプで定義されたネットワーク下り(外向き)帯域幅( Gbps )の制限を受けます。加えて、永続ディスクでは複数への並列書き込みで永続ディスクにデータを保存することで冗長化を行っているため、ディスクタイプごとの帯域幅乗数と呼ばれる値を、書き込みデータ量に乗算したものが実際のネットワーク転送量となるので、ディスクに書き込まれたデータ量よりも多くのデータ量がネットワークを通じて通信されます。
こちらで特に注意が必要なのが、1 個の vCPU の N1 VM インスタンスに標準ディスクを接続する場合で、こちらのネットワーク下り(外向き)帯域幅が 2 Gbps であることから、書き込みが最大 72 MB / 秒となっています。
(参考:パフォーマンスに影響するその他の要因)
例えば・・・
上記について、いくつかの例を用いて解説します。
(例 1 ) n2-standard-4 + ゾーン標準永続ディスク 2,048 GB を利用した場合に利用可能なパフォーマンス
IOPS : 書き込み 3,072 、読み取り 1,536
持続スループット:書き込み 240 MB/s 、読み取り 240 MB/s
上記は下記それぞれの強い方の制約である、太文字の値が採用された結果となります。
- ゾーン標準永続ディスク 2,048 GB のパフォーマンス
IOPS : 書き込み 3,072 、読み取り 1,536
持続スループット:書き込み 245 MB/s 、読み取り 245 MB/s - マシンタイプが N2 で vCPU 数 4 core のパフォーマンス
IOPS : 書き込み 15,000 、読み取り 3,000
持続スループット:書き込み 240 MB/s 、読み取り 240 MB/s
(例 2 ) n2-standard-4 + ゾーン SSD 永続ディスク 2,048 GB を利用した場合に利用可能なパフォーマンス
IOPS : 書き込み 15,000 、読み取り 15,000
持続スループット:書き込み 240 MB/s 、読み取り 240 MB/s
同様に下記の太文字の値が採用された結果となりますが、今度は vCPU あたりの制約でパフォーマンスが制限されているという状況になります。
- ゾーン SSD 永続ディスク 2,048 GB のパフォーマンス
IOPS : 書き込み 60,000 、読み取り 60,000
持続スループット:書き込み 983 MB/s 、読み取り 983 MB/s - マシンタイプが N2 で vCPU 数が 4 core のパフォーマンス
IOPS : 書き込み 15,000 、読み取り 15,000
持続スループット:書き込み 240 MB/s 、読み取り 240 MB/s
この(例 2 )の構成でストレージのパフォーマンスがボトルネックになっている場合、以下の(例 3) のように vCPU 数を増やすことで性能改善を図ることが可能です。
(例 3) n2-standard-32 + ゾーン SSD 永続ディスク 2,048 GB を利用した場合に利用可能なパフォーマンス
IOPS : 書き込み 60,000 、読み取り 60,000
持続スループット:書き込み 983 MB/s 、読み取り 983 MB/s
vCPU 数を増やすことで vCPU ごとのストレージパフォーマンスが改善し、 以下のようにゾーン SSD 永続ディスク 2,048 GB のパフォーマンスを最大限利用可能となりました。
- ゾーン SSD 永続ディスク 2,048 GB のパフォーマンス
IOPS : 書き込み 60,000 、読み取り 60,000
持続スループット:書き込み 983 MB/s 、読み取り 983 MB/s - マシンタイプが N2 で vCPU 数が 32 core のパフォーマンス
IOPS : 書き込み 60,000 、読み取り 60,000
持続スループット:書き込み 1,200 MB/s 、読み取り 1,200 MB/s
※ 上記では n2-standard-32 への変更を行いましたが、メモリの拡張はストレージパフォーマンスの改善のみを目的とするのであれば必ずしも必要ではないため、カスタムマシンタイプを利用し、 vCPU だけ増やすことでも同様のことが行えます。
バランス永続ディスクを利用したストレージコストの最適化について
バランス永続ディスクの登場により、今まで SSD 永続ディスクを利用していた VM に関してディスクタイプを変更することでコスト削減が可能なケースがあります、以下例を挟みつつ解説させて頂きます。
まず、東京( asia-northeast1 )のそれぞれの価格について( GB 単位/月、米ドル)以下補足させて頂きます。
- ゾーン標準永続ディスク( pd-standard ): $0.052
- ゾーンバランス永続ディスク( pd-balanced ):$0.130
- ゾーン SSD 永続ディスク( pd-ssd ):$0.221
上記のように、バランス永続ディスクは SSD 永続ディスクに比べ、単価 べースで −41% のコストとなるため、こちらを活用頂くと特にディスクサイズが大きな場合に大きなコスト最適化を狙うことが可能です。
では、先ほどの(例 2 )をバランス永続ディスクへ切り替えた場合のパフォーマンスと、コストについて解説させて頂きます。
① n2-standard-4 + ゾーン SSD 永続ディスク 2,048 GB を利用した場合に利用可能なパフォーマンスとコスト
IOPS : 書き込み 15,000 、読み取り 15,000
持続スループット:書き込み 240 MB/s 、読み取り 240 MB/s
月額コスト:$452.6
② n2-standard-4 + ゾーン バランス永続ディスク 2,048 GB を利用した場合に利用可能なパフォーマンスとコスト
IOPS : 書き込み 12,288 、読み取り 12,288
持続スループット:書き込み 240 MB/s 、読み取り 240 MB/s
月額コスト:$266.2
前提として、①に関しては vCPU 数が少ないためゾーン SSD 永続ディスクのパフォーマンスを使い切れていない状況でしたが、一般的な DB インスタンスでよくある構成かなと思います。
② がこちらをゾーン バランス永続ディスクに切り替えた場合ですが、 IOPS のパフォーマンスが 20 % 程度下がるものの、ストレージの月額コストも大きく下がっているため、既存環境の IOPS の実績を確認頂き、このパフォーマンスで収まる場合には切り替えて頂く事で、コストの最適化を行うことが出来ます。
リージョン 永続ディスクを利用する際の注意点
前述の通り、リージョン 永続ディスクを利用した場合、リージョン内の選択した2つのゾーンにデータがレプリケーションされますが、限界性能がゾーン永続ディスクより低くなり、以下の通りとなります。
- インスタンスの vCPU 数による書き込み IOPS の上限が 30,000 となる
※ 上限のみの制限の為、 30,000 以下の場合は差異なし。 - インスタンスの vCPU 数による書き込み持続スループット が半分となる
※ 半分となるため、n2-standard-4 の場合は書き込みスループットが半分の 120 MB/s 、n2-standard-32 の場合は書き込みスループットが 600 MB/s となる。
特に高負荷な DB インスタンスをリージョン永続ディスクを使って HA 構成を構築する場合には上記を考慮いただき、パフォーマンスの確保が必要な場合はリージョン永続ディスクの採用ではなく、別ゾーンに構築したインスタンスへの DB の機能によるレプリケーションによる冗長化や、 DRBD などの別ソリューションの採用も検討するのが良いと思います。
まとめ
「 Google Cloud のブロックストレージの使い方」 というテーマで、主に永続ディスクのパフォーマンス面について解説させていただきましたが、いかがでしたでしょうか?
tl;dr でも書かせて頂きましたが、この記事でお伝えしたかった事は以下となりますので、念のため再掲させて頂きます。
- Google Cloud のブロックストレージには永続ディスクとローカル SSD があるが、まずは永続ディスクの利用を検討する
- 永続ディスクはディスクのサイズと接続元 VM の vCPU 数でパフォーマンスが決まる
- 新しい バランス永続ディスク( pd-balanced )が追加され、こちらを活用することで大きなコスト最適化が狙える
- リージョン永続ディスクを利用すると、リージョン内の選択した2つのゾーンにデータがレプリケーションされるが、限界性能はゾーン永続ディスクより低いので注意が必要
今回最近追加されたバランス永続ディスクについても解説させて頂きましたが、今後のアップデートについても是非楽しみにして頂けると嬉しいです。