Azure Storage には、3 つの種類の BLOB ストレージが用意されています。ブロック BLOB、追加 BLOB、およびページ BLOB です。 ブロック BLOB はブロックで構成され、テキストまたはバイナリ ファイルの格納と大きいファイルの効率的なアップロードに最適です。 追加 BLOB もブロックで構成されますが、追加操作用に最適化されているため、ログ記録シナリオに最適です。 ページ BLOB は 512 バイトのページ (合計で最大 8 TB) で構成され、頻繁なランダムの読み取り/書き込み操作のために設計されています。 ページ BLOB は、Azure IaaS ディスクの基盤です。 この記事では、ページ BLOB の機能とメリットに重点を置いて説明します。
ページ BLOB は 512 バイトのページの集まりであり、任意の範囲のバイトの読み取り/書き込みを行うことができます。 そのため、ページ BLOB は、仮想マシンとデータベースの OS やデータ ディスクのような、インデックスに基づくスパース データ構造の格納に最適です。 たとえば、Azure SQL DB は、そのデータベースの基になる永続的ストレージとしてページ BLOB を使用します。 さらに、ページ BLOB は、範囲を基にした更新を含むファイルにもよく使用されます。
Azure のページ BLOB の重要な機能は、その REST インターフェイス、基礎をなすストレージの耐久性、および Azure へのシームレスな移行機能です。 これらの機能については、次のセクションで詳しく説明します。 さらに、Azure のページ BLOB は、現時点では次の 2 種類のストレージでサポートされています。Premium Storage と Standard Storage。 Premium Storage は、特に一貫したハイ パフォーマンスと待機時間の短縮を必要とするワークロード向けに設計されているため、Premium ページ BLOB をハイ パフォーマンスのストレージ シナリオに最適なものにします。 Standard ストレージ アカウントは、待機時間の影響を受けないワークロードを実行する場合はコスト効率に優れています。
制限
ページ BLOB は ホット アクセス層のみを使用できます。 クール 層または アーカイブ 層は使用できません。 アクセス層の詳細については、BLOB データのホット、クール、アーカイブ アクセス層に関するページをご覧ください。
サンプル ユース ケース
Azure IaaS ディスクから始まるページ BLOB のユース ケースをいくつか次に示します。 Azure のページ BLOB は、Azure IaaS の仮想ディスクのプラットフォームのバックボーンです。 Azure の OS とデータ ディスクは両方とも仮想ディスクとして実装され、そこでデータは Azure Storage プラットフォームで永続化され、その後、パフォーマンスを最大にするために仮想マシンに配信されます。 Azure ディスクは HYPER-V VHD 形式で永続化され、Azure Storage にページ BLOB として格納されます。 ページ BLOB は、Azure IaaS VM の仮想ディスクを使用するだけでなく、現時点で SQL データの格納のためにページ BLOB を使用している Azure SQL DB サービスなどの PaaS と DBaaS のシナリオも実現して、データベースの高速でランダムな読み取り/書き込み操作を可能にします。 もう 1 つの例として、コラボレーション用のビデオ編集アプリケーションの共有メディアへのアクセスに PaaS サービスを使用している場合は、ページ BLOB によってメディア内のランダムな場所への高速アクセスが可能になります。 また、複数のユーザーが同じメディアを高速かつ効率的に編集したりマージしたりできるようにもなります。
Azure Site Recovery、Azure Backup のようなファースト パーティの Microsoft サービスと、多くのサード パーティの開発者は、ページ BLOB の REST インターフェイスを使用して、業界をリードするイノベーションを実装しています。 Azure に実装されている固有のシナリオの一部を、次に示します。
- アプリケーションをターゲットにした増分スナップショットの管理:アプリケーションは、ページ BLOB のスナップショットと REST API を利用して、コストがかかるデータの重複を発生させずに、アプリケーションのチェックポイントを保存できます。 Azure Storage では、ページ BLOB のローカル スナップショットがサポートされています。このスナップショットは、BLOB 全体のコピーを必要としません。 これらのパブリック スナップショット API では、スナップショット間でのデルタへのアクセスとコピーも可能です。
- オンプレミスからクラウドへのアプリケーションとデータのライブ マイグレーション:オンプレミスの VM の実行を続けながら、オンプレミス データをコピーし、REST API を使用して Azure のページ BLOB に直接書き込みます。 ターゲットへの同期が完了したら、そのデータを使って Azure VM へすばやくフェールオーバーできます。 このようにして、最小限のダウンタイムで VM と仮想ディスクをオンプレミスからクラウドに移行できます。これは、VM の使用を続けている間にバックグラウンドでデータの移行が行われて、フェールオーバーに必要なダウンタイムが短縮されるためです (数分)。
- SAS ベースの共有アクセス。コンカレンシー制御のサポートによる複数のリーダーと単一のライターのようなシナリオを実現できます。
アンマネージド ディスクは廃止される予定です。詳細については、「2025 年 9 月 30 日までに Azure アンマネージド ディスクを移行する」を参照してください。
価格
ページ BLOB で提供されるストレージの種類には、それぞれ独自の価格モデルがあります。 Premium ページ BLOB はマネージド ディスクの価格モデルに従いますが、標準ページ BLOB は、使用されたサイズと各トランザクションに対して課金されます。 詳細については、Azure ページ BLOB の価格ページを参照してください。
ページ BLOB の機能
REST API
ページ BLOB を使用した開発を開始するには、「ページ BLOB を 使用した開発」を参照してください。 例として、.NET 用ストレージ クライアント ライブラリを使用してページ BLOB にアクセスする方法について見てみましょう。
次の図は、アカウント、コンテナー、およびページ BLOB の全体的な関係を示しています。
指定したサイズの空のページ BLOB を作成する
最初に、コンテナーへの参照を取得します。 ページ BLOB を作成するには、GetPageBlobClient メソッドを呼び出してから、PageBlobClient.Create メソッドを呼び出します。 作成する BLOB の最大サイズを渡します。 サイズは 512 バイトの倍数にする必要があります。
long OneGigabyteAsBytes = 1024 * 1024 * 1024;
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
var blobContainerClient =
blobServiceClient.GetBlobContainerClient(Constants.containerName);
var pageBlobClient = blobContainerClient.GetPageBlobClient("0s4.vhd");
pageBlobClient.Create(16 * OneGigabyteAsBytes);
ページ BLOB のサイズを変更する
ページ BLOB のサイズを作成後に変更するには、Resize メソッドを使用します。 要求するサイズは 512 バイトの倍数でなければなりません。
pageBlobClient.Resize(32 * OneGigabyteAsBytes);
ページ BLOB にページを書き込む
ページを書き込むには、PageBlobClient.UploadPages メソッドを使用します。
pageBlobClient.UploadPages(dataStream, startingOffset);
これにより、最大 4MB の連続した一連のページを書き込むことができます。 書き込み先のオフセットは、512 バイト境界で開始し (startingOffset %512 = = 0)、512 境界 - 1 で終了する必要があります。
連続した一連のページに対する書き込み要求が Blob サービスで成功し、耐久性と回復性を確保するためにレプリケートされると、その書き込みはコミットされ、成功がクライアントに返されます。
次の図は、2 つの個別の書き込み操作を示しています。
- 長さ 1024 バイトのオフセット 0 で開始する書き込み操作
- 長さ 1024 のオフセット 4096 で開始する書き込み操作
ページ BLOB からページを読み取る
ページを読み取るには、PageBlobClient.Download メソッドを使用して、ページ BLOB から一定範囲のバイトを読み取ります。
var pageBlob = pageBlobClient.Download(new HttpRange(bufferOffset, rangeSize));
これにより、BLOB 全体、または BLOB 内の任意のオフセットから始まるバイトの範囲をダウンロードすることができます。 読み取る場合、オフセットは 512 の倍数で開始する必要はありません。 NUL ページからバイトを読み取ると、サービスが 0 バイトを返します。
次の図は、オフセットが 256 で範囲のサイズが 4352 の読み取り操作を示しています。 返されるデータはオレンジ色で強調表示されています。 NUL ページの場合はゼロが返されます。
まばらにしかデータが格納されていない BLOB がある場合は、ゼロ バイトのデータ転送にかかる料金を回避し、ダウンロードの待機時間を短縮するために、有効なページ範囲だけをダウンロードすることをお勧めします。
データに裏付けられているページを確認するには、PageBlobClient.GetPageRanges を使用します。 その後、返される範囲を列挙し、各範囲内のデータをダウンロードできます。
IEnumerable<HttpRange> pageRanges = pageBlobClient.GetPageRanges().Value.PageRanges;
foreach (var range in pageRanges)
{
var pageBlob = pageBlobClient.Download(range);
}
ページ BLOB をリースする
BLOB のリース操作は、書き込み操作と削除操作のための BLOB のロックを設定および管理します。 この操作は、ページ BLOB が複数のクライアントからアクセスされているというシナリオで、一度に 1 つのクライアントしか BLOB に書き込めないようにする場合に便利です。 たとえば、Azure ディスクは、ディスクが確実に 1 つの VM でのみ管理されるようにするために、このリース メカニズムを利用します。 ロック期間は、15 ~ 60 秒にすることも、無限にすることもできます。 詳細については、こちらのドキュメントを参照してください。
ページ BLOB は、豊富な REST API だけでなく、共有アクセス、耐久性、および強化されたセキュリティも提供します。 これらの利点については、次の段落で詳しく説明します。
同時アクセス
ページ BLOB の REST API とそのリース メカニズムにより、アプリケーションが複数のクライアントからページ BLOB にアクセスすることができます。 たとえば、ストレージ オブジェクトを複数のユーザーと共有する分散クラウド サービスをビルドする必要があるとします。 これは、複数のユーザーにイメージの大規模なコレクションを提供する Web アプリケーションである可能性があります。 これを実装するための 1 つのオプションは、接続されたディスクと VM を使用することです。 この欠点として、(i) ディスクが 1 つの VM にしか接続できない、スケーラビリティや柔軟性が制限され、リスクが増すという制約があります。 VM または VM で実行されているサービスに問題がある場合は、リースのため、リース期限が切れるか中途解約するまでイメージにはアクセスできず、(ii) IaaS VM の所有に追加のコストがかかります。
もう 1 つのオプションは、Azure Storage REST API 経由でページ BLOB を直接使用することです。 このオプションは、コストの高い IaaS VM が不要で、複数のクライアントからの直接アクセスに十分な柔軟性があり、ディスクの接続/取り外しの必要をなくすことでクラシック デプロイ モデルを簡略化し、VM 上の問題のリスクを排除します。 さらに、ランダムの読み取り/書き込み操作にディスクと同じレベルのパフォーマンスを提供します
耐久性と高可用性
Standard ストレージと Premium Storage はどちらも永続的なストレージであり、ページ BLOB データは常にレプリケートされ、持続性と高可用性が確保されます。 IaaS ディスクとページ BLOB に対してエンタープライズ レベルの持続性を一貫して提供し、業界をリードする 年間故障率ゼロを実現しました。
Standard Storage と Premium Storage のアカウントの Azure Storage の冗長性の詳細については、「Azure Storage の冗長性」と、具体的には次の 2 つのセクションを参照してください。
Azure へのシームレスな移行
独自のカスタマイズしたバックアップ ソリューションの実装に関心をお持ちのお客様と開発者には、Azure は、デルタを保持するだけの増分スナップショットも提供しています。 この機能により最初の完全コピーのコストがかからないため、バックアップのコストを大幅に削減できます。 差分データを効率的に読み取りおよびコピーする機能だけでなく、これは開発者からのさらなるイノベーションを可能にするもう 1 つの強力な機能であり、Azure でのクラス最高のバックアップとディザスター リカバリー (DR) のエクスペリエンスにつながります。 Get Page Ranges API と、DR の増分データを簡単にコピーするために使用できる Incremental Copy Blob API と共に、Blob スナップショットを使用して、Azure の VM 用の独自のバックアップまたは DR ソリューションをセットアップできます。
さらに、多くの企業では、重要なワークロードがオンプレミスのデータ センターで既に実行されています。 ワークロードをクラウドに移行する場合の主な関心事の 1 つは、データをコピーするために必要なダウンタイムの時間と、切り替え後の予期しない問題のリスクです。 多くの場合、ダウンタイムは、クラウドへの移行で致命的な問題になる可能性があります。 Azure は、ページ BLOB の REST API を使用して、重要なワークロードの中断を最小限にしてクラウドの移行を実現することで、この問題を解決します。
スナップショットを取得する方法と、スナップショットからページ BLOB を復元する方法の例については、「 増分スナップショットを使用してバックアップ プロセスを設定する」を参照してください。