【FAST '21】アリババのSSD型データセンターにおける相関障害と冗長化スキーム
TL;DR
Alibabaの大規模DCのデータセットに基づきSSD相関障害を分析
独立した障害ではなく、取得したデータセットに基づいた「相関障害」に焦点
ノード内障害およびラック内障害は無視できない割合が短時間で発生
トレース駆動形シミュレーションを介して、冗長スキームの信頼性を比較検討
r-way replication: Rep($ r)
Read-Solomon Coding: RS($ k, m)
Local Reconstruction Coding: LRC($ k, l, g)
→RS(10,4)が最も優れた結果
本文
本論文の興味深い点は「相関障害」に焦点を当てている点だ。一般に、データセンターのラックには複数のノードが存在し、各ノードには1つ以上のSSDが接続されている。本論文のデータセットには、3万ラック20万ノードに渡るログが含まれている。このような構成下において、同一のラック内、ノード内で発生する障害を「相関障害」とし、分析を行っている。下図は、ラック内障害およびノード内障害が発生する時間間隔と、その発生率をプロットしたものである。驚くべきことに1分以下の間隔で、ノード内で10.0%、ラック内で14.4%の障害が発生していることがわかる。また、同一ラック内、ノード内に同じモデルのドライブを同時期に導入することにもよって、相関障害が起こりやすい環境になる。
https://gyazo.com/66eb68d8dfbf098dabe569029f3596ad
(論文中より引用)
論文中でも年間平均故障率は1.16%と記載されており、「ディスクは壊れる」という前提のもと冗長化スキームを検討する必要がある。既存研究では各ディスクで独立して障害が発生するモデルが使われることが多いが、先述の通り現実のデータセンターでは相関障害が無視できない頻度で発生する。そこで本論文ではReplicationとerasure codingの冗長化スキームとして、以下3つを比較検討している(各技術の詳細は補足に記載)。
r-way replication: Rep($ r)
$ r-1チャンクの障害を許容
Rep(2)とRep(3)を検討
従来の分散ファイルシステムはRep(3)
Read-Solomon Coding: RS($ k, m)
$ m個のチャンク障害を許容
以下3つを検討
RS(6,3)
Google ColossusやQuantcast File Systemで採用
RS(10,4)
Facebookで採用
RS(12,4)
Azureで採用
Local Reconstruction Coding: LRC($ k, l, g)
$ g+1チャンクの障害を許容
単一チャンクの障害を$ k/lの障害のないチャンクから再構築
LRC(12,2,2)を検討
Azureで採用
RS(12,4)と同じ冗長性だが、許容できるのは3つのチャンク障害と4つのチャンク障害の一部のみ
検討結果はシミュレーションによる結果が以下図として示されている。縦軸は、回復不可能な損失が発生する確率: Probability of data loss (PDL)と、ストレージ容量に正規化された回復不可能なデータ損失の量: Normalized magnitude of data loss (NOMDL)となっている。いずれも値が小さいほうが優れたもので、RS(10, 4)が最も優れた結果となった。
https://gyazo.com/dd4b0d7a7ec164b6b113a940b35f9bee
最後に内容をまとめる。本論文はAlibabaのデータセンターの実測に基づくSSD障害を調査している。現実の障害は独立して発生するもの以上に「相関障害」を考慮する必要があり、冗長化にはRS(10, 4)が有効であることを示している。論文では、冗長化したチャンクを同一スコープに配置しないといった注意点も述べられているため、詳細が気になった場合は、原論文を参照してほしい。(文責・恩田) 補足
ドライブ特性4つの影響要因も行っており、drive modelsとageの影響が大きい
drive models
lithography
基盤にレーザーなどで回路パターンを焼き込む手法
age
capacity
https://gyazo.com/4d406b5e1739b4e8b8cd8a17450f243f
https://gyazo.com/5dd02841846e97b242a680453223e958
冗長化スキーム
r-way replication: Rep($ r)
データチャンクごとに$ r>1の正確なチャンクコピーを作成
Read-Solomon Coding: RS($ k, m)
$ k個のデータチャンクのcoding groupごとに、$ m個のパリティチャンクをエンコード
Local Reconstruction Coding: LRC($ k, l, g)
$ k個のデータチャンクのcoding groupごとに、$ k/kデータチャンクのサブグループをローカルパリティチャンクにエンコード。$ k個すべてのデータチャンクを$ g個のグローバルパリティチャンクにエンコード
RSとLRC
RS
Replicationよりオーバーヘッドが小さい
失われたチャンクの再構築に$ k個の無事なチャンクにアクセスするのでrepair bandwidthが大きい
LRC
$ k/lの無事なチャンクで再構築できる