目次
Google Compute Engine にNVMe接続のローカルSSDをRAIDで接続すると爆速になる
Google Compute Engine(以下、GCE)をご存知でしょうか? GCEは、Amazon EC2 や Azure仮想マシンなどと同じGoogle Cloud Platform(以下、GCP)のサーバーサービスです。GCEは2013年12月3日に正式版がリリース(2013.05.15:オープンプレビュー)されたため、他の Amazon EC2(2006.08.25:パブリックベータ)に比べるとだいぶ遅くリリースされたことになります。そのためかGCEの知名度はいまいちなのが現状です。しかし、GCPは尖ったサービスが多く、GCEにも他とは違った特徴がありました。今回は、GCEのローカルSSDについてご紹介します。
Amazon EC2 などのクラウドサーバーのディスクが遅い理由
Amazon EC2 などの一般的なクラウドサーバーは、クラウドサーバー本体のコンピュート部分と記憶ディスクとなるストレージを分けて構成しています。この様にストレージ部分を独立することで沢山の記憶容量を積めたり、冗長化によってシステムダウンを起きにくくしたり、バックアップ機能を追加したりと非常に効果が大きいです。しかし、独立したことによって、クラウドサーバー本体とストレージの間でネットワーク通信が発生してしまい、これによって読み書きの遅延が発生してしまっています。
GCEのローカルSSDは耐久性などを犠牲にして速さのみを求めた結果
GCEも標準では上記のようなGCE本体とストレージを分けたサーバー構成になります。更にGCEでは「ローカルSSD」というGCEに物理的に接続されたストレージを追加することが可能です。
GCEのローカルSSDのページを見ると赤字で書かれた以下の注意書きが目に留まります。
警告: ローカル SSD によるパフォーマンスの向上には、可用性、耐久性、柔軟性に関する一定のトレードオフがあります。このようなトレードオフのため、ローカル SSD ストレージは自動的に複製されません。インスタンスが何らかの理由で終了した場合、ローカル SSD 上のすべてのデータは失われる可能性があります。詳細は、ローカル SSD データの永続性を参照してください。
その他の説明としては気になったのが下記です。つまり、普通にGCEをシャットダウンしたら、もう二度と使えなくなるという事です。(実際にシャットダウンしてみましたが、エラーが出て再開できませんでした)
ローカル SSD を使用するインスタンスを停止し、再起動することはできません。ゲスト オペレーティング システムを介して、ローカル SSD を使用するインスタンスをシャットダウンすると、インスタンスを再起動することはできまず、ローカル SSD 上のデータは失われます。
24時間365日ノーストップで、かつデータは絶対に失われないことが当たり前とされているクラウドサービスで在り得ない仕様です。しかし、それを凌駕する性能がローカルSSDにはありました。
下記はGCEのストレージオプションのページから抜粋してきたものですが、ローカルSSD(NVMe)の読書き速度が標準永続ディスクに比べて異常なくらい速い事が分かると思います。これは、以前ブログでご紹介したNVMe接続であることが大きいと思います。そして、ローカルSSDは最大で8台までRAID 0(ストライピング)で接続可能なため、理屈ではこれの8倍近い読書き速度が期待できます。
GCEのローカルSSDの実測発表
お待たせしました。GCEのNVMe接続のローカルSSDのディスク読書きの計測結果です。
今回は下記のGCE環境でCrystalDiskMarkを使ってディスク速度を計測しました。
- マシンタイプ:vCPU x 2(メモリ 7.5GB)
- OSイメージ:Windows Server 2016
- 標準永続ディスク:SSD 50GB
- ローカルSSD:NVMe接続 375GB × 4台 (RAID 0/合計:1.5TB)
残念ながらローカルPCのNVMe接続SSD(Samsung SSD 512GB 950 PRO)には敵いませんでしたが、それでも十分に速いと思います。今回はGCPの無料トライアル枠の中に納まるようにしたため、ローカルSSDを4台にしてしまいましたが、上限の8台にした場合は倍近い読書き速度が出るかもしれません。また、前回の検証結果と比較とCrystalDiskMarkを実行するためにWindowsイメージにしてしまいましたが、ローカルSSDの説明には「ubuntuイメージの方がローカルSSDに最適なドライバが入っているため速くなる」との旨の説明がありましたので、ubuntu イメージにすると更に速くなりそうです。
GCEのローカルSSDの使い道
GCEのローカルSSDの説明には「ローカル SSD 上のすべてのデータは失われる可能性があります」と赤太字で記載されていましたが、実際のところは一般的なパソコンのSSDの品質と変わりないと思います。そのため、十分に実用に耐えられるが、ノンストップで動くサーバーや重要なデータ保存には向かないと思います。また、ローカルSSDが付いたGCEを停止/再起動した場合、GCEは二度と再開できなくなってしまうため、「GCEの環境構築後に停止して、必要な時に起動する」運用や、再起動が必要なインストールなどが伴う環境構築は行えません。
そのため、GCEのローカルSSDは、下記のような「短期間で作業が完結するディスク負荷の大きい処理」に向いていると思います。
- 大容量のETL処理
- BIツールを使った複雑な分析処理
- データベースを使ったGIS処理(PostgreSQL + PostGISなど)
この様にデータ分析の処理の中にはディスク読書きがボトルネックになっている処理が多いため、色々、活躍の場所はありそうです。しかし、いつ障害が起きても良いように、小まめなバックアップは忘れずに行う必要はあります。また、何度も同じ環境を作る必要がある場合は、インストールシェルなどを作成するなどし、環境構築作業を効率的に回せると良いかもしれません。
また、GCEはLinuxベースなら30秒程度で起動しますし、CPU数、メモリサイズ、GPU数、そして記憶ディスクを自由に設定できますので、クイックに様々なニーズにフィットしやすいと思います。