vCPU数とメモリが同じ2つのプランでも、一方はデータベースのマイグレーションを数分で終え、もう一方は1時間も停滞することがあります。違いは通常、ストレージの経路にあります。PCIe接続のNVMeドライブか、従来型コントローラーの背後にあるSATAまたはSAS SSDかです。
本ガイドでは、両者を実際に分けているもの、NVMeの恩恵を受けるワークロードとそうでないワークロード、契約前にfioでサーバーを自ら測定する方法、そして転送量の上限とロケーションを同じ判断に含めるべき理由を解説します。
実際の違い:インターフェース、プロトコル、キュー
差が生まれるのは、ドライブとCPUの通信方法です。SATA SSDは回転ディスク向けに設計されたAHCIプロトコルを、最大6 Gbpsのリンク上で使用します。実際には、シーケンシャルスループットはおよそ550 MB/sになります。SASはリンクを12 Gbpsに引き上げ、デュアルポートなどのエンタープライズ向け機能を追加しますが、依然としてホストバスアダプターやRAIDコントローラーを経由します。
NVMeドライブはPCIeレーンに直接接続されます。サーバーにとって最も重要な違いはキューイングです。AHCIが提供するコマンドキューは32エントリの1本のみですが、NVMeでは最大64Kのキューに、それぞれ最大64Kのコマンドを格納できます。
VPSでは、ゲストは物理ドライブを直接認識しません。ホストの構成が適切であれば、NVMeの利点の大部分は維持されます。構成が不適切な場合や、過度なオーバーコミット、厳しいI/O制限がある場合は、その利点が失われることもあります。
購入担当者のためのIOPS、レイテンシ、キュー深度の解説
ストレージ性能を表す3つの数値があり、それらは互いに関連しています。IOPSは1秒あたりに完了する読み取りまたは書き込み操作の数で、通常は4 KBの小さなブロックで測定します。レイテンシは1回の操作にかかる時間です。キュー深度は同時に処理待ちとなっている操作の数です。
これらは単純な規則で結びついています。IOPSはおおよそキュー深度をレイテンシで割った値です。キュー深度1で100マイクロ秒で応答するドライブは、約10,000 IOPSを実現します。カタログ上のIOPS値はほぼ常に高いキュー深度で示されており、多くのアプリケーションが実際には生み出さない条件でドライブを有利に見せています。
トランザクションを1件ずつコミットし、そのたびにfsyncを待つトランザクション型データベースは、キュー深度1に近い状態になります。この場合、ピークIOPSよりもレイテンシが重要です。NVMeは一般にSATAよりデバイスのレイテンシが低く、ソフトウェア経路が短いことでさらにオーバーヘッドが減るため、アプリケーションが多数の並列リクエストを発行していない場合でも改善が表れます。
テールレイテンシには最も注意を払うべきです。サーバーを比較する際は、99パーセンタイルと99.9パーセンタイルの完了レイテンシを確認してください。
NVMeの恩恵を受けるワークロード
NVMeが効果を発揮するのは、アプリケーションがストレージのレイテンシや、多数の同時発生する小さな操作に律速されている場合です。代表的なケースは次のとおりです。
- リレーショナルデータベース。PostgreSQL、MySQL、および同様のエンジンは、コミットのたびにログに書き込み、ワーキングセットがメモリを超えるとランダムなページを読み込みます。書き込みレイテンシが低いほどコミットレートが上がり、ランダム読み取りが速いほどバッファキャッシュに載っていないクエリが短くなります。
- 検索と分析のインデックス。Elasticsearch、OpenSearch、および同様のエンジンは、セグメントのマージ、インデックスのリフレッシュ、多数の小さなファイルの読み取りを行います。NVMeはインデックス作成の時間を短縮し、マージ中もクエリのレイテンシを安定させます。
- ビルドサーバーとCIサーバー。大規模なコードベースのコンパイル、依存関係の解決、テストスイートの実行では、何千もの小さなファイルの読み書きが発生します。机上ではCPUバウンドのビルドが、実際にはストレージを待っていることがよくあります。
- 永続化を伴うキーバリューストア。スナップショットや追記型ログをディスクに書き込むシステムは、高速なフラッシュの恩恵を受けます。永続化の際にユーザーが感じる停止時間が短くなります。
- コンテナと仮想化のホスト。イメージの取得、多数のコンテナの起動、1台のマシン上での複数の高負荷サービスの実行は、I/Oの並行性を何倍にも高めます。まさにNVMeのキューイングが効果を発揮する領域です。
- データ処理ジョブ。ソート、ディスクへのスピル、中間ファイルのシャッフルを行うETLの各工程は、一時ストレージがNVMeであれば早く完了します。
SATAまたはSAS SSDで十分なワークロード
ストレージがボトルネックではないため、差がほとんど、あるいはまったく出ないワークロードも数多くあります。
- キャッシュが効果的に機能しているWebサイト。主にメモリ、ページキャッシュ、CDNから配信されるコンテンツサイトは、ウォームアップ後はディスクからほとんど読み取りません。
- ステートレスなアプリケーションサーバー。データを別のデータベースに保持するAPI層やWeb層は、主にCPUとネットワークを使用します。
- 帯域幅を多く使う配信。ファイル配布、ストリーミングのオリジン、ダウンロードミラーは、大きなファイルをシーケンシャルに読み出します。約550 MB/sのSATA SSDでも、1 Gbpsのポートが運べる量(約125 MB/s)をすでに上回ります。
- バックアップ先とアーカイブ。大きなオブジェクトのシーケンシャル書き込みでは、レイテンシよりも1ドルあたりの容量が重視されます。
- メモリに収まる小規模なデータベース。ワーキングセット全体がRAM上にあれば、読み取りでディスクに触れることはまれで、中程度のコミットレートであればSATAの限界内に十分収まります。
- トラフィックの少ない社内ツール。数十人が利用するWiki、チケット管理、監視ダッシュボードが、意味のあるI/O負荷を生むことはほとんどありません。
この場合、エンタープライズ向けSATAまたはSAS SSDの容量、メモリ、転送量無制限の帯域幅に予算を回すほうが多くは有効です。
契約前にfioで測定する方法
fioは、Linuxにおけるストレージベンチマークの標準的なオープンソースツールで、主要なディストリビューションすべてのパッケージリポジトリから入手できます。試用サーバーまたは新たにプロビジョニングしたサーバー上で、アプリケーションが使用するのと同じファイルシステム上のテストファイルに対して実行してください。データが格納されているRAWデバイスに対しては決して実行しないでください。
まず、負荷の高いデータベースや検索ノードに近い、中程度の同時実行数でのランダムリードテストから始めます:fio --name=randread --filename=/var/tmp/fiotest --size=4G --rw=randread --bs=4k --ioengine=libaio --direct=1 --iodepth=32 --numjobs=4 --runtime=60 --time_based --group_reporting。
次に、データベースのコミットを模したテストを実行します:fio --name=commit --filename=/var/tmp/fiotest --size=1G --rw=randwrite --bs=4k --ioengine=libaio --direct=1 --iodepth=1 --numjobs=1 --fsync=1 --runtime=60 --time_based。
最後に、--rw=readと--bs=1Mでシーケンシャルテストを実行し、バックアップや大きなファイルの処理に必要なスループットを確認します。結果を読む際は、IOPS、帯域幅、そして完了レイテンシ(clat)のp50、p99、p99.9のパーセンタイル値を記録します。共有インフラストラクチャでは、ピーク値と同じくらい、実行ごとの結果の一貫性が重要です。ホストがどれだけ隣接テナントを分離できているかが分かるためです。
テスト後はファイルを削除します。業務時間中は本番サーバーで重いベンチマークを避けてください。実トラフィックを遅くします。
転送量の上限、転送量無制限のポート、総コスト
プランが安いと言えるのは、その転送条件が実際に移動するデータ量に合っている場合だけです。
1 Gbpsのポートはフル稼働で毎秒約125 MB、1日あたりおよそ10.8 TB、1か月あたり約324 TBを転送します。月間3 TBの転送量は、平均で約9 Mbpsの持続トラフィックにすぎず、16 TBでも約49 Mbpsです。
転送量の上限があるプランは、ストレージ性能を重視し、トラフィックが中程度で予測しやすいワークロードに適しています。上限を超えた場合の扱い(テラバイト単位の超過料金、低速への帯域制限、上位プランへの強制アップグレード)を確認してください。転送量無制限のプランはポートに対する定額料金で、送信トラフィックが多い、または予測しにくいワークロードに適しています。ポート速度、専有か共有か、フェアユース条件の有無を確認してください。
現在のログやプロバイダーの請求データから月間のエグレスを見積もり、成長分とサーバーから送り出されるバックアップのトラフィック分の余裕を加え、超過料金を含めた月額の総コストを選択肢ごとに比較します。ワークロードを分割するのが正しい設計となる場合もあります。データベース層には控えめな転送量のNVMeを、配信層には転送量無制限のSSDサーバーを使う、といった形です。
VPSのロケーションの選び方
ロケーションはレイテンシ、コンプライアンス、コストに影響します。光ファイバー中の光は1ミリ秒あたり約200 km進むため、ファイバー100 kmごとに、ルーティングのオーバーヘッドを除いても往復時間が約1 ms増えます。実際の経路は直線より長いため、別の大陸にあるサーバーでは往復ごとに100から250 msの遅延が加わることがよくあります。
- サーバーをユーザーの近くに置く。ping、mtr、合成モニタリングを使い、トラフィックの大部分が発生するリージョンからのラウンドトリップ時間を測定します。
- 通信の多いコンポーネントはまとめて配置する。アプリケーションサーバーとそのデータベースは同じロケーションに置くべきです。クエリのたびに海を越えるのであれば、高速なNVMeストレージも無駄になります。
- データ所在地を確認する。規制や顧客との契約により、データを特定の国にとどめることが求められる場合があります。サーバー、そのバックアップ、すべてのレプリカがどこに保存されるかを確認してください。
- リージョン障害に備える。バックアップやウォームスタンバイ用の2つ目のロケーションがあれば、1つの施設の障害から守られます。
- リージョンごとの料金と転送条件を比較する。同じ構成でも、リージョンによって転送量の上限やコストが異なる場合があります。
判断表とチェックリスト
判断表:各行でワークロードの特性をストレージの種類と転送モデルに対応させています。
- ワーキングセットがメモリを超えるトランザクションデータベース。NVMeを選択します。データベースのトラフィックはほとんどが内部にとどまるため、従量制の転送量で通常は十分です。
- 検索クラスタまたは分析インデックス。ファイルシステムキャッシュに十分なメモリを備えたNVMeを選択します。転送量の要件は通常、中程度です。
- ビルドサーバーまたはCIサーバー。NVMeを選択します。転送量の見積もりには、依存関係とアーティファクトのダウンロードを含めます。
- キャッシュされるWebサイトまたはステートレスなAPI層。SATAまたはSAS SSDで十分です。公開トラフィックが多い場合や急増する場合は、転送量無制限を選択します。
- ファイル配信、ストリーミングのオリジン、ミラー。大容量のSSDと転送量無制限のポートを選択します。スループットの上限はネットワークで決まるため、NVMeの効果はわずかです。
- バックアップ先またはアーカイブ。容量を最優先します。保持期間に合わせてサイジングしたSSDまたはネットワークブロックストレージを使い、リストア時のトラフィックもカバーする転送条件を選びます。
- 1台のマシン上の混在ワークロード。データ層にはNVMeを選択するか、層ごとにサーバーを分けて、それぞれに必要なストレージと転送のモデルを割り当てます。
契約前に、このチェックリストを確認してください。
- 現在の監視データからボトルネックを特定します:レイテンシ、スループット、CPU、ネットワーク。
- fioでランダムリード、fsync、シーケンシャルのテストを実行し、p99とp99.9のレイテンシを記録します。
- 時間帯を変えて再テストし、共有ホストの一貫性を確認。
- ログから月間エグレスを成長分込みで見積もり、転送量の上限またはポート速度と比較します。
- 超過料金、帯域制限、フェアユースの条件を書面で確認します。
- 主要ユーザー地域から各候補拠点までの往復時間を測定。
- データ、バックアップ、レプリカの保存国を確認。
- ハイパーバイザー、ディスクインターフェース、プランごとのI/O上限を確認。
- 別のロケーションへのバックアップを計画し、復元をテストします。
Vonahostがお手伝いできること
NVMe VPSはKVM上で稼働し、最大8 vCPU、32 GBメモリ、500 GBのNVMe、月間3〜16 TBの転送量を備え、お客様が選択したリージョンに展開します。SSD VPSはエンタープライズSSDを採用し、最大12コア、64 GBメモリ、800 GBストレージ、転送量無制限で、LinuxまたはWindowsに対応し、お客様が選択したリージョンに展開します。VPSでは足りなくなったワークロードには、ローカルNVMe(2 x 960 GB)と転送量無制限の1 Gbps専用ポートを備えたシングルテナントの専用サーバーを提供します。
すべての提案書には、構成、ロケーション、責任範囲、米ドル建ての月額料金が明記され、各サーバーの国はお客様が選択します。