Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency
June 12, 2021AzureのクラウドストレージサービスWindows Azure Storage(WAS) は、2008年の11月から本番運用されている。 保存できるデータの形式には、単なるファイル(Blob)だけでなく、テーブルのレコードとキューのメッセージがある。 ハードウェアの故障に備えたローカルでのレプリケーションだけでなく、地理的に離れたデータセンタにもレプリケーションを分散し、災害復旧にも備える。
WASは、大きくstroage stampとlocation serviceからなる。
下にstorage stampとlocation serviceのアーキテクチャを図示する。
storage stampはストレージノードを積んだラックからなるクラスタであり、典型的なクラスタは18のノードを積んだ10から20個のラックである。
location serivceは、アカウントのデータがどのstorage stampに保存されているかを管理する。
新しいアカウントを作成するときは、アカウントのIDを含んだURLからstorage stampのVIPを解決するようにDNSを更新する。
storage stampはstream Layer, partition layer, front-endsの3層からなる。 stream Layerは、storage stamp内でファイルを分散、複製するための分散ファイルシステムとみなすことができる。 stream layerは、高可用性を担う層であり、データの種類がオブジェクト、テーブル、キューのいずれであるかを意識せずにデータを保存、提供する。 partition layerは、stream layerと同じノードにあり、stream layerに保存されたデータの種類を解釈できる。また、トランザクションの順序を管理し、データの一貫性を守る。 front-endsはステートレスなサーバからなり、リクエストの認証と認可を担う。 Stream layerはリクエストの処理中に同期的にstorage stamp内部にレプリケーションを作成し、ハードウェアの耐障害性を高める。 Parition layerは、リクエストの処理とは非同期に、storage stamp横断のレプリケーションを作成し、災害復旧に備える。
Stream Layerのstreamは、extentとよばれる大きなデータの順序つきリストを意味する。
extentへの書き込みは追記しかできず、更新はできない。
下に、4つのextentからなるstreamを例示する。
図中の
B
はblockとよばれる読み込みと追記の最小単位であり、サイズは4MB程度である。extentは連結したblockからなる。
blockのサイズはblockごとに違ってよい。
Extentはレプリケーションの単位であり、デフォルトでは1つのstorage stampの中に3つのレプリカを作る。
extentの大きさは1GBであり、それより大きなデータを保存するときは、データを分割して、複数のextentにデータを保存する。
streamはextentを参照するポインタの順序付きリストであり、既存のstreamを連結することで新しいstreamが作られる。
追記ができるextentはstreamの末尾のものに限られる。
Stream layerはstream manager(SM)とextent node(EN)からなる。
Stream layerのアーキテクチャを以下に図示する。
SMは、新しいextentを作り、ENに割りあてる。
割り当てた後も、アクティブなextentやstreamを管理し、どのstreamからも参照されていないextentを回収する。
SMの処理は、クライアントのリクエストの処理とは非同期であり、クリティカルパス上にはない。
一方、ENは複数のディスクをもち、extentの別々のディスクにレプリカを保存する。
ENはextentとblockを管理し、これらがどのstreamに属するかを知ることはない。
Stream layerがレプリケーションで高可用性を支えるのに対し、parititon layerは一貫性を支える。
Partiton layerは下図のようにpartition manager(PM)とpartition server(PS)からなる。
Partiton layerはobject table(OT)というデータ構造を構成し、streamに保存された単なるデータを、ユーザからはBlobやテーブル、キューのように見えるようにする。
OTは、ペタバイト級のサイズであるため、OTの連続するレコードの集合であるRangePartitionに分割して管理される。
PMはOTをrange partitionとよばれる単位に分割し、各range partitionが常に1つのアクティブなPSに割り当てられ、range partitionが重複しないことを保証する。
保証にはlock serivceを使い、Paxosによって合意されたPMのリーダが選出される。
論文をこちらからダウンロードできます。 図は論文から引用されています。