皆さんは、ストレージを使っているでしょうか。私は、パソコンに入っているSSDやHDD、NAS、Google DriveやDropboxなど様々なストレージを利用しています。ただ、そこにどんな技術が使われているかはあまり意識したことがなく、興味を持ったのでこの本を購入してみました。
結果、ややハード寄りですが、ソフトとハードをうまいこと組み合わせて使っていることが分かって面白かったです。その中で、重要と感じたポイントや、少し詳細に調べてみたことを記録しておこうと思います。
目次
どんな本?
2023年8月に発売された、ストレージの仕組みを解説している本です。ブロックストレージ、ファイルストレージ、オブジェクトストレージ全て記載されていますが、メインはブロックストレージです。また、仕組みだけでなく著者の経験によるベストプラクティスや、最近のストレージのCloud Native化についても言及されておりためになります。ストレージの種類やプロトコルについて、なんとなく単語レベルで聞いたことがあるくらいの認識でしたが、この本で体系的に整理できてとても良かったです。
重要と感じたポイント
全体の中で、chapter1, 2のストレージの仕組み、chapter5のベストプラクティスの部分が個人的に特に参考になったと感じたので、その中から重要そうなポイントをピックアップしてみました。
接続インターフェース(マザーボードとドライブ間)
接続インターフェースの代表例としてSAS、SATA、NVMeが紹介されています。SAS/SATAはHDDと共に進化してきたインターフェースであり、NVMeはSSDの登場に伴い登場したインターフェースとのことでした。ちなみに、SASはSCSI(スカジー)系のインターフェース、SATAはATA(アタ)系のインターフェースらしいです。
このインターフェースの規格については、まさに「名前は聞いたことあるけど体系的に知らない」知識の代表でした。SATAケーブルなどをよくわからずつないだことがありましたが、HDDのインターフェースの名前だったんだなと腑に落ちました。
これについては、もう少し調査して内容整理したので後述します。
接続インターフェース(サーバーとストレージ間)
こちらは、PC内のマザーボードとドライブ間の話ではなく、サーバーとストレージ間の話です。いわゆる外付けのストレージ接続ですね。こちらで使われる通信にはデータ自体の読み書きを行う処理のデータプレーンと、ボリューム作成/削除などメタ的な操作を行うコントロールプレーンの2つがあります。
ブロックストレージ向けのデータプレーンのプロトコルとして、FCP(Fibre Channel Protocol)、iSCSI、NVMe-oF(NVMe over Fablics)の3つが紹介されています。FCP/iSCSIは、SCSIの命令セットをネットワーク上で使用できるプロトコルです。前者のFCPは光ファイバーケーブルの専用ネットワークを使い、後者のiSCSIはTCP/IPのネットワークで使えるところが違いです。iSCSIの方が、現在よく使われるネットワークで使えるので、安価に使えます。
よく考えると内蔵ディスクと外付けディスクでは通信プロトコルが違うのは当たり前ですが、意識したことのない差でした。そしてそれが内蔵ディスクの方のプロトコルをネットワーク上で使えるように拡張したものであるというのも、面白いポイントでした。
RAIDとミラーリング
ディスクの冗長化の方法であるRAID(RAID0/RAID1/RAID1+0/RAID5)と、ストレージの冗長化の方法であるミラーリングが紹介されています。RAIDはハードディスクなどのドライブ障害の対策であり、ミラーリングはストレージ自体の個体障害、データセンターなどのサイト障害の対策になります。この時、サイト障害対策のミラーリングは長距離となるので、ミラーは非同期になります。
RAID、基本情報を受けるときに覚えて、それ以降はあやふやなままでした。冗長化のうちの1つの手法である、と捉えると理解が進みますね。また、考え方は分散処理に出てくるレプリケーションとパーティションと似ている概念ですよね。このあたりは、分野が異なっても概念というか考え方は共通していて、面白いです。
スループットとIOPS
性能監視の際の指標値として、単位時間当たりのデータ転送量であるスループットと、1秒間に読み書きできる回数のIOPS(Input/Output Per Second)が紹介されています。前者はデータの転送量、後者は読み書き回数に着目した性能の指標値です。ワークロードによって、重視するものは異なります。
AWSのブロックストレージサービスであるEBSにも、Provisioned IOPS SSDボリュームと、スループット最適化 HDDボリュームが存在しています。この違いがより理解できました。
接続インターフェースについてもう少し調べてみた
SAS、SATA、NVMeなどの接続インターフェースについて、もう少し調べてみて自分なりにまとめてみました。 SSDのインターフェースと、HDDのインターフェースで分けて記載します。
SSDのインターフェース
この書籍と、いくつかのWebサイトを見てオリジナルでまとめたのが以下の図です。オリジナルの図なので、もし誤りがあった場合はご指摘いただけると助かります。
書籍に出ていたように、SSDのインターフェースはNVMeとSATAが代表的な2つです。ただ、調べてみると、それぞれ通信プロトコル、接続規格、接続端子のサイズ規格というレイヤーの異なる規格に分かれているようです。そして、NVMeとPCIe、AHCIとSATAはセットのようですが、接続端子のサイズ規格はいくつか種類に分けられるようです。
参考に、価格.comのSSD製品一覧で、それぞれの対応SSDの個数を調べてみました(2024年1月15日時点)。
サイズ規格 \ 接続規格 | PCIe | SATA |
---|---|---|
M.2 | 572 件 | 110 件 |
2.5 インチ | 37 件 | 357 件 |
mSATA | 0 件 | 40 件 |
PCIeはM.2、SATAは2.5インチが多いですね。ただ、PCIeの2.5インチや、SATAのM.2もあることはあるようです(PCIeの2.5インチについては、数が少なかったので上図では省略しています)。M.2だから速い!と思って買うのではなく、ちゃんとPCIe(NVMe)対応のM.2 SSDであることまで確認した方が良いですね。
HDDのインターフェース
HDDの方は、SSDのように通信プロトコル/接続規格/接続端子のサイズ規格のレイヤーに分かれた説明がネットでもありませんでした。あったのはインターフェースとしての歴史的な経緯で、以下の2つの系譜です。
ATA (IDE) となっているのは、実質同じものを指しているからです。IDEという規格を、ANSIがATAという規格に標準化したとのことでした。
SASはSATAより高速らしいですが、おそらく私が買ったことあるPCに入っているのはすべてSATAだったと思います。SATAとSASでは端子から異なるので(SCSIとATAも異なりますが)、ぜひ秋葉原かどこかで実物を見たいですね。
こんなにある!HDDの種類 – バックアップ・データ復旧 | GUARDIAN+R
EC2+EBSの接続を確認してみた
さて、ここまでいろいろ調べると、実際にやってみたくなるのが人のサガ。書籍では記載がありませんでしたが、AWSのサービスEC2+EBSでどのようなインターフェースで接続されているのかを確認してみます。
EC2インスタンスにEBSをアタッチした後に、EC2インスタンス上でフォーマットとマウントを実行します。こちらは、書籍に記載のコマンドと大体同じでした。ただ、書籍ではiSCSIのプロトコル(コマンド)を使用してアタッチしていましたが、EC2+EBSではコンソールかAWS CLIでアタッチするのでどのインターフェースで接続されているのかがよくわかりません。
そこで、PCIデバイスの情報を表示する lspci コマンドを実行してみます。すると、以下のように表示されました。
sh-4.2$ lspci -nn | grep memory 00:04.0 Non-Volatile memory controller [0108]: Amazon.com, Inc. Device [1d0f:8061] 00:1f.0 Non-Volatile memory controller [0108]: Amazon.com, Inc. Device [1d0f:8061]
この最後のカッコ[ ]の後半4桁がDevice IDを表すらしく、8061はNVMe EBS Controllerを表すそうです。つまり、プロトコルとしてNVMeを利用していることが分かりますね。
EC2から見るとマザーボードとドライブ間のインターフェースであるNVMeとして認識されていそうですが、よく考えてみるとEC2とEBSは直接物理的につながっているわけではなくネットワークを通してつながっているはずです。EBSのBlackBeltを見ると、やはり実体はネットワーク接続型ストレージのようですが、ユーザはネットワークを意識する必要はないそうです。
https://d1.awsstatic.com/webinars/jp/pdf/services/20190320_AWS-BlackBelt-EBS.pdf p.12より
おわりに
この書籍をきっかけに、ストレージについて興味を持って調べることができました。何気なく使っているストレージですが、中身の仕組みを調べだすととても面白いですね。クラウドサービスでも、ストレージのどの種類なのか、どのプロトコルが使えるのかなど意識してみてみると、より理解が深まりそうだなと思いました。ストレージやネットワークなど、基礎知識をしっかり学習するのは重要ですね。
参考
記事内に張ったリンク以外に、参考にしたページを載せておきます。
・Dell Technologies の方のインフラ基礎のスライド資料
https://japancatalog.dell.com/c/wp-content/uploads/20221021_beginners.pdf