プログラマでありたい

おっさんになっても、プログラマでありつづけたい

結構知らないAmazon EBSの細かい話。主にEBSのネットワークの構造について

 先日、EBS(Elastic Block Store)のとある状況下での挙動について正確なところが知りたくて、改めて調べていました。その中で、AWSマイスターシリーズ ReloadedのEBS版を見つけたのですが、これが良い資料でした。今までEBSのネットワーク部分についてどういう構造になっているのか、正確に把握しませんでした。資料を読むことにより構造が解り、ボトルネックが発生した時にどう対処すればよいのか、より掴みやすくなりました。簡単にまとめてみたいと思います。

EBSの全体像



 まずはEBSの基本構造です。当たり前といえば当たり前ですが、EBSはEC2ではなくその下のレイヤーのハイパーバイザにアタッチされます。アタッチ後にOSから認識させるという形になります。また接続の方式としてはネットワーク型ですが、利用者はネットワークを全く意識せずとも使えるようになっています。(SecurityGroupの設定もスルー)そして、EBSはAZ内に配置され、内部的には冗長化されています。この為、OS側で複数のEBSを使ってRaid1等の冗長化しても、あまり意味がないよという話につながります。

EBSのネットワーク構造。通常のEC2インスタンスとEBS-Optimizedインスタンスの違い



 何となく速くなるのだろうなぁと思っていたものの、全く原理が解らないのがEBS最適化インスタンス(EBS-Optimized Instance)です。AWSの公式ページを見ても、下記の通りの説明でスループット保証をしますよと書いているものの、結構謎でした。

EBS 最適化インスタンス

少額の、時間単位の追加料金をお支払いいただくだけで、特定の Amazon EC2 インスタンスタイプを EBS 最適化インスタンスとして起動できます。EBS 最適化インスタンスは、Amazon EC2 と Amazon EBS の間で所定のスループットを実現するものであり、使用されるインスタンスタイプに応じて 500 Mbps または 1000 Mbps を選択できます。プロビジョンド IOPS ボリュームは、EBS 最適化インスタンス、または高ストレージ I/O 要件があるアプリケーションのクラスターネットワークをサポートするインスタンスと併せて使用することを推奨します。

 今回の資料を読んで、初めて腑に落ちました。要は、ネットワークをEBS用と通常用に分けますよという話です。パフォーマンス測定をしたことがある人は解ると思いますが、実はEBSのIOPSは物理ディスクのIOPSではなくネットワークの帯域によって制限されてるのです。その証拠にインスタンスタイプのネットワーク帯域が同じクラスであれば、ほぼ同じIOPSが出るようになっています。


 また常々エフェメラルディスクへのアクセスは無料で、EBSのI/Oは課金なのは何故かと思っていたのですが、ようやく理解できました。ディスクのI/Oじゃなくてネットワークの使用に対してお金を払っていたのですね。


 ちなみに、EBS-Optimizedインスタンスで確保される帯域は以下のとおりです。
この辺りが解ると、理論値が計算できますね。

インスタンスタイプ 帯域
m1.large 500 Mbps
m1.xlarge 1000 Mbps
m2.2xlarge 500 Mbps
m2.4xlarge 1000 Mbps
m3.xlarge 500 Mbps
m3.2xlarge 1000 Mbps
c1.xlarge 1000 Mbps

まとめ



 私が、ほほぉと思った所だけをピックアップしています。網羅的な内容ではないので、是非本家のマイスタシリーズを読んでください。Provisioned IOPSについても、時間を作って書きたいなぁと思います。
 しかしまぁ、ほぼ全てのサービスに対して、日本語で図解入りの資料があるというのは、結構幸せですね。


See Also:
AWSのEBS Provisioned IOPSからEBSについて妄想する
Amazon Elastic Load Balancing (ELB)の内部構造および拡張・障害時の動き


参照:
AWSマイスターシリーズ: Elastic Block Store(EBS)
Amazon Web Services ブログ: 【AWS発表】EBS最適化インスタンスとして起動できるEC2インスタンスタイプを新たに4つ追加