(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-13
(45)【発行日】2024-09-25
(54)【発明の名称】データを符号化及び復号化する方法及び装置
(51)【国際特許分類】
H03M 13/47 20060101AFI20240917BHJP
G06F 3/06 20060101ALI20240917BHJP
G11B 20/18 20060101ALI20240917BHJP
【FI】
H03M13/47
G06F3/06 305C
G11B20/18 532B
G11B20/18 572F
(21)【出願番号】P 2020555866
(86)(22)【出願日】2019-04-10
(86)【国際出願番号】 EP2019059119
(87)【国際公開番号】W WO2019197482
(87)【国際公開日】2019-10-17
【審査請求日】2022-03-15
(32)【優先日】2018-04-13
(33)【優先権主張国・地域又は機関】FR
(73)【特許権者】
【識別番号】510229496
【氏名又は名称】アンスティテュ・ミーヌ・テレコム
(74)【代理人】
【識別番号】110001173
【氏名又は名称】弁理士法人川口國際特許事務所
(72)【発明者】
【氏名】バッコーシュ,ハナ
(72)【発明者】
【氏名】ブーカテム,ナディア
【審査官】吉江 一明
(56)【参考文献】
【文献】特表2018-507462(JP,A)
【文献】国際公開第2016/052665(WO,A1)
【文献】Cheng Huang et al.,Erasure Coding in Windows Azure Storage,USENIX,2013年04月11日,https://www.usenix.org/system/files/conference/atc12/atc12-final181_0.pdf
【文献】Cheng Huang et al.,Pyramid Codes: Flexible Schemes to Trade Space for Access Efficiency in Reliable Data Storage Systems,PROC. SIXTH IEEE INTERNATIONAL SYMPOSIUM ON NETWORK COMPUTING AND APPLICATIONS 2007,2007年07月01日,https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-2007-25.pdf
(58)【調査した分野】(Int.Cl.,DB名)
H03M 13/47
G06F 3/06
G11B 20/18
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
(k,r)個のデータを符号化する方法であって、
- 初期データaを同一サイズのk個のデータブロックa
iに分割するステップ(302)と、
- 前記k個のデータブロックa
iをデータブロックのr-1個の接続されていない部分集合S
j
(1≦j≦r-1)にグループ化するステップ(304)と、
- 各部分集合S
j毎に、前記部分集合S
jに割り当てられたデータブロックの一次結合として定義される一次関数g
j(a)を生成するステップ(606)と、
- 前記k個のデータブロックa
iの一次結合としての一次パリティ関数f
0(a)、及び各二次パリティ関数f
j(a)が前記一次パリティ関数f
0(a)と一次関数g
j(a)の和として定義されるr-1個の二次パリティ関数を含むr個のパリティ関数を生成するステップ(604)とを含む方法。
【請求項2】
前記r個のパリティ関数を生成するステップ(308)が、r個の符号化ベクトルを生成するステップ(306)を含み、前記符号化ベクトルが、
- k個の一次符号化係数c
0,1~c
0,kを含む一次符号化ベクトルC
0と、
- 各二次符号化ベクトルがk個の二次符号化係数c
j,1~c
j,kを含むr-1個の二次符号化ベクトルC
j(1≦j≦r-1)とを含む、請求項1に記載の方法。
【請求項3】
各一次符号化係数c
0,iが非ゼロ乱数に対応し、二次符号化係数c
j,iが前記データブロックa
iが前記部分集合S
jに属するか否かに応じて非ゼロ乱数又はゼロ乱数に対応している、請求項2に記載の方法。
【請求項4】
前記一次関数g
j(a)を生成するステップが、k個のデータブロック(a
1,...,a
k)及び前記二次符号化ベクトルC
jの前記k個の二次符号化係数c
j,1~c
j,kから一次結合を生成するステップを含む、請求項3に記載の方法。
【請求項5】
k=10且つr=4である、請求項1~4のいずれか1項に記載の方法。
【請求項6】
k+r個のデータを記憶する方法であって、k個のシステム化記憶装置N
i,i∈{1,..,k}にk個のデータブロックa
i、及びr個のパリティ記憶装置N
i,i∈{k+1,..,k+r}に、r個のパリティ関数であって請求項1~5のいずれか1項に記載のデータ符号化方法に従い取得されたr個のパリティ関数を記憶するステップを含む少なくとも1個のステップを含む方法。
【請求項7】
請求項1~5のいずれか1項に記載のデータ符号化方法のステップの実行に適した手段を含む、データ符号化装置。
【請求項8】
k個のデータブロックa
iをk個のシステム化記憶装置N
i,i∈{1,..,k}に、及びr個のパリティ関数f
j(a)をr個のパリティ記憶装置N
i,i∈{k+1,..,k+r}に記憶している複数の記憶装置のうち1個の記憶装置のコンテンツを再構築する方法であって、前記k個のデータブロックa
i及びr個のパリティ関数が、請求項1~5のいずれか1項に記載の方法に従い取得され、前記再構築方法が少なくとも以下を含むステップ、すなわち、
- 前記コンテンツを再構築する前記記憶装置がシステム化又はパリティ記憶装置であるか否かを判定するステップ(710)と、
- 前記装置がシステム化記憶装置N
i,i∈{1,..,k}である場合、
- 前記装置のデータブロックがどのデータ部分集合S
jに属するかを判定し(716)、
- 前記パリティ記憶装置N
k+1及びN
k+1+jに記憶されている前
記パリティ関数
f
j
(a)を取得し(718)、
- 前記部分集合S
jに関連付けられた前記一次関数g
j(a)を計算し(720)、
- ブロックa
i以外の前記部分集合S
jのデータブロックを取得して(722)、
- 前記システム化記憶装置N
i,i∈{1,..,k}のコンテンツを再構築するステップ(724)と、
- 前記装置がパリティ記憶装置N
i,i∈{k+1,..,k+r}である場合、前記記憶装置を識別する添え字iを判定して(726)、
- 前記添え字iがk+1に等しい場合、
・添え字i=k+2の前記パリティ記憶装置に記憶されてい
る二次パリティ関数f
1(a)及び部分集合S
1の前記データブロックa
iを取得し(728)、
・前記部分集合S
1に関連付けられた一次関数g
1(a)を計算して(730)前記一次パリティ関数f
0(a)を復号化して、
・添え字i=k+1の前記パリティ記憶装置のコンテンツを再構築するステップと(732)、
- 前記添え字iがk+1よりも大きい場合、
・添え字i=k+1の前記パリティ記憶装置に記憶されている前記一次パリティ関数f
0(a)及び部分集合S
i-k+1の前記データブロックa
iを取得し(734)、
・前記部分集合S
i-k+1に関連付けられた一次関数g
i-k+1(a)を計算して(736)二次パリティ関数f
i-k+1(a)を復号化して、
・添え字i>k+1の前記パリティ記憶装置のコンテンツを再構築するステップ(738)とを含む方法。
【請求項9】
前記パリティ関数を取得するステップが、対応する記憶装置からデータ収集装置にデータを転送するステップを含む、請求項8に記載の方法。
【請求項10】
i∈{1,..,k}であるシステム化ノードiを再構築すべく前記部分集合S
jに関連付けられた前記一次関数g
j(a)を計算するステップが
、パリティ記憶装置N
k+1+jに記憶されている前記二次パリティ関数から前記パリティ記憶装置N
k+1に記憶されてい
る一次パリティ関数を減算するステップを含む、請求項8又は9に記載の方法。
【請求項11】
i=k+1であるパリティノードiを再構築すべく前記部分集合S
1に関連付けられた前記一次関数g
1(a)を計算するステップが、前記部分集合S
1のデータブロック及
び符号化ベクトルC
1から一次結合を生成するステップを含み、i∈{k+2,..,k+r}であるパリティノードiを再構築すべく前記部分集合S
jに関連付けられた前記一次関数g
j(a)を計算するステップが、前記部分集合S
jのデータブロック及
び二次符号化ベクトルC
jから一次結合を生成するステップを含む、請求項8~10のいずれか1項に記載の方法。
【請求項12】
前記システム化記憶装置
N
i
の前記コンテンツを再構築するステップが、前記一次関数g
j(a)から前記データブロックa
iを復号化するステップを含む、請求項8~11のいずれか1項に記載の方法。
【請求項13】
i=k+1である前記パリティ記憶装置の前記コンテンツを再構築するステップが、前記計算された一次関数g
1(a)から添え字i=k+1の前記パリティ記憶装置の前記二次パリティ関数を復号化するステップを含み、i>k+1である前記パリティ記憶装置の前記コンテンツを再構築するステップが、前記計算された一次関数g
i-k+1(a)から添え字i>k+1の前記パリティ記憶装置の前記二次パリティ関数を復号化するステップを含む、請求項8~11のいずれか1項に記載の方法。
【請求項14】
k個のデータブロックa
iをk個のシステム化記憶装置N
i,i∈{1,..,k}に、及びr個のパリティ関数f
j(a)をr個のパリティ記憶装置N
i,i∈{k+1,..,k+r}に記憶している複数の装置のうち1個の記憶装置のコンテンツを再構築する装置であって、前記k個のデータブロック及びr個のパリティ関数が請求項1~5のいずれか1項に記載の方法に従い取得され、前記装置が、記憶装置のコンテンツを再構築する請求項8~13のいずれか1項に記載の方法のステップの実行に適した手段を含む装置。
【請求項15】
プログラムを含むコンピュータプログラムであって、前記プログラムが、請求項1~5のいずれか1項に記載の方法のステップを実行可能にする符号命令を含み、及び/又は前記プログラムがコンピュータ上で実行された場合に請求項8~13のいずれか1項に記載の方法のステップを実行可能にする符号命令を含むコンピュータプログラム。
【請求項16】
請求項7及び/又は請求項14に記載の少なくとも1個の装置を含むASIC又はFPGA型の集積回路。
【請求項17】
分散記憶システムにおける請求項8~13のいずれか1項に記載のコンテンツ再構築方法の使用であって、前記分散記憶システムが請求項1~5のいずれか1項に記載の符号化方法に従い符号化されたデータを記憶可能な複数のデータ記憶ノードを含む使用。
【請求項18】
ローカル記憶システムにおける請求項8~13のいずれか1項に記載のコンテンツ再構築方法の使用であって、前記ローカル記憶システムが請求項1~5のいずれか1項に記載の符号化方法に従い符号化されたデータを記憶可能なデータ記憶ディスクを含む使用。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ記憶システム及びそのようなシステムにおける故障管理の一般的な分野に関する。より具体的には、本発明は、故障の発生後に記憶システムの修復に必要となるデータ読み込み/書き込み動作の最適化、及び転送されるデータ量の最適化を可能にする、データの符号化及び復号化方法及び装置に関する。
【背景技術】
【0002】
近年、ソーシャルネットワーク、電子メール、ファイル共有、及びビデオ共有等のアプリケーションの利用に起因してデジタルデータの量が顕著に増大している。従って、オンラインサービスを提供する企業は、数十ペタバイト(1PB=1015バイト)のデータ量を管理する必要がある。毎年指数的に増大し続けるこれらのデータ量を高い信頼性で記憶する必要がある。
【0003】
分散記憶システム(DSS)は、開放的で信頼性の高い記憶ソリューションを提供すべく昨今広く利用されている。これらのアーキテクチャは、
図1に示すように、データが分散して記憶されている複数の記憶ノード(110、112、114)を含んでいる。1個の記憶ノードは1個(112)又は複数個の記憶装置(110、114)を含んでいてよい。複数の記憶装置を含むノードの各記憶装置自体を記憶ノードと表記する。一般に、記憶装置は記憶ディスクである。コントローラ(102)は、通信ネットワーク(104)に結合されたコンピュータ(106)から受信したリクエストに基づくディスクの読み込み/書き込み動作を含むノードからの/ノードへの通信の管理を可能にする。
【0004】
今日、ディスク、装置又は記憶ノードの故障は稀でなく、数千個のノードについて毎日平均数十回もの故障が報告されるのは普通である。分散記憶システムは、1個又は複数個のノード或いは記憶装置又はディスクが故障した場合に、データの保護を保証しなければならない。
【0005】
データの信頼性及び利用可能性を保証すべく、標準的な実装において、故障時に消失したデータを取り出し可能にすべくデータの冗長性に基づくソリューションが組み込まれている。
【0006】
記憶システムに信頼性を付与することを可能にするいくつかの方法を以下に列挙する。
【0007】
複製は、最も広く利用されている方法の1つである。これは、複数の記憶ノードに跨る同一のデータブロックを複製するものである。一般に、同一のデータブロックはn個の異なるノードに記憶されているため、n-1件の故障に耐えられるようになる。実際、各データブロックは3個の異なるノードに記憶されているため、2件の故障に耐えることが可能になる。たとえ複製が良好な故障耐性を提供するにせよ、3個のノードの場合に複製が200%と推定される記憶オーバーヘッドが生じる短所がある。
【0008】
消去符号。このアプローチは、公知のリードソロモン(RS)符号の使用に基づいている。各データファイルは、k個のデータブロックに分割され、これにr個のパリティ機能ブロックが追加されてk+r個のデータブロックが生成され、且つタームコードRS(k,r)が用いられる。k+r個のデータブロックは、k+r個の異なるノードに記憶され、このうちk個のノードはk個の元ブロックを記憶し、r個のパリティノードはr個のパリティ機能ブロックを記憶する。符号RS(k,r)は二つの基本的特性を有している。すなわち、k+r個のブロックのうち任意のk個のデータブロックが元のデータを再生成するのに充分であり、故障の種類に依らずr件の故障に耐えられる。実際には、符号RS(10,4)の場合、各データファイルは10個のブロックに分割されて4個のパリティ機能ブロックが生成されるため、4件の故障まで耐えることが可能になる。RS符号は、複製と比較してより良好な記憶効率を提供し、符号RS(10,4)について記憶オーバーヘッドが40%と評価される。
【0009】
データ記憶システムにおいて、故障時には、データの再構築は、冗長ノードに記憶されているデータの読み込み、次いでネットワーク内で「プロバイダ」とも呼ばれるデータを供給しているノードから「新参者」とも呼ばれる新たな記憶ノードへのデータの転送を伴う。単一ノードの故障発生時において、複製の場合は単一のプロバイダだけが必要とされる場合も、符号RS(k,r)の場合にk個のプロバイダが必要となり、次いでk個のプロバイダからのネットワークを介したデータの転送が含まれる。単一の故障の修復は従って、数百テラバイト(TB)の読み込み及び送信を伴う可能性がある。また、帯域幅の観点からの修復及び読み出し/書き込みコストも顕著になり得る。
【0010】
以下に列挙するいくつかのソリューションは、修復フェーズ中に必要とされる帯域幅、すなわち「帯域幅修復」を削減するものである。
【0011】
再生成符号は一例である。文献「Network coding for distributed storage systems」,Alexandros G Dimakis,P Brighten Godfrey,Yunnan Wu,Martin J Wainwright,and Kannan Ramchandran,IEEE Transactions on Information Theory 56(9):4539-4551,2010に記述されているような主要なアイディアは、各ノードが、自身が利用できるデータブロックからのデータの一次結合を生成するものである。各プロバイダノードから転送されるデータの量は従って、各ノードに記憶されているデータの量よりも少なく、そのため修復に必要な帯域幅が削減される。しかし、再生成符号に関して、新ノードで取り出される情報は転送されたデータの一次結合であり、従って必ずしも消失したデータブロックに等しい訳ではない。
【0012】
正確な再生成符号が、消失したものと全く同一のデータブロックを取り出すために提案されている。文献「Optimal exact-regenerating codes for distributed storage at the MSR and MBR points via a product-matrix construction」,Rashmi,Korlakai Vinayak,Nihar B.Shah, and P.Vijay Kumar,IEEE Transactions on Information Theory 57(8):5227-5239,2011に示すような主要なアイディアは、干渉アラインメントの概念を用いて不要なデータブロックを除去するものである。たとえ正確な再生成符号は修復用の帯域幅を大幅に削減可能にするにせよ、ディスク入出力(「I/Oオーバーヘッド」)のコストは最適化されない。実際に、単一の故障を修復するには、正確な再生成符号は全ての読み出し対象ノードに記憶されている全てのデータが読み込まれることを必要とする。
【0013】
修復帯域幅及びディスク入出力双方のコストを削減するためのソリューションが提案されている。
【0014】
例えば、文献「Hierarchical codes:How to make erasure codes attractive for peer-to-peer storage systems」,Alessandro Duminuco and Ernst Biersack,P2P’08,8th IEEE International Conference on Peer-to-Peer Computing,pages 89-98に示すような階層的符号を用いる主要なアイディアは、元の符号よりも小さい符号から特定のパリティ関数を階層的に生成するものである。階層的符号(k,r)は、単一の故障を修復するために
【数1】
(k/r-1の整数部分)~k個のデータブロックを読んでダウンロードする必要がある。しかし、階層的符号は従来のRS符号の全てのプロパティを維持する訳ではない。実際、階層的符号(k,r)はr件の故障のいずれにも耐えられない。従って同じ冗長性でも信頼性が低いことが分かる。
【0015】
ヒッチハイカ符号は、RS符号と同じ特性を維持して、帯域幅及びディスクの入出力の観点から低いコストで故障の修復を実行可能にする符号である。「A hitchhiker’s guide to fast and efficient data reconstruction in erasure-coded data centers」,KV Rashmi,Nihar B Shah,Dikang Gu,Hairong Kuang,Dhruba Borthakur,and Kannan Ramchandran,ACM SIGCOMM Computer Communication Review,44(4):331-342,2015に記述されている主要なアイディアは、単一の故障の修復に必要なデータブロックの個数を削減するものである。ヒッチハイカアプローチは、同一構造(k,r)を有する2個のRSサブ符号を考慮する。第2の符号及び第1の符号に依存する特定のパリティ関数は、第2のRSサブ符号内で生成される。これらのインターリーブされたパリティ関数によりデータブロック修復のために読み込まれて転送されるデータの量が削減可能になる。ヒッチハイカ符号(10,4)により、修復帯域幅及びディスクの入出力コストの30%~35%が削減可能になる。
【0016】
以下の参照文献に帯域幅を削減するデータ符号化方法が提案されている。
- Cheng Huang et al.:「Erasure Coding in Windows Azure Storage」,USE-NIX,11 April 2013(2013-04-11),pages 1-12,XP061013941。このLRC(k,l,r)法は、記憶ノードに記憶されるローカルパリティ関数の生成に基づいている。しかし、LRC符号はローカルパリティ関数の追加的な記憶に起因して記憶オーバーヘッドをもたらす。
- Cheng Huang et al.:「Pyramid Codes:Flexible Schemes to Trade Spaces for Access Efficiency in Reliable Data Storage systems」,Proc.Sixth IEEE International Symposium on Network Computing and Applications 2007,IEEE,1 July 2007(2007-01-07),pages 79-86,XP031119281,ISBN:978-0-7695-2922-6。この方法はLRC方法の代替方式を提案している。しかし、LRC符号と同様に、ピラミッド符号は、従来の消去符号及びバビロン符号と比較して記憶オーバーヘッドをもたらす。
【0017】
これらのアプローチでは、従来の消去符号と同じ記憶効率を維持しながら帯域幅の削減を可能にするヒッチハイカ符号、再生成符号、及び階層的符号とは逆に、従来の消去符号と同じ記憶効率が得られない。
【0018】
新たな消去符号の定義に基づいて上で述べた方法とは逆に、Blaum Marioらによる特許出願US2016/211869A1号が提案するソリューションは、目的関数として異なる符号間で切り替え可能な複数の消去符号が組み込まれた動的記憶システムを提案している。当該システムは、ファイルの参照頻度の関数として修復帯域幅の削減又は記憶オーバーヘッドの削減のどちらかを決定する。当該システムは特に2個の符号すなわち(上述の)LRC及び「プロダクト符号」(PC)をサポートする。
【0019】
1個以上のデータ記憶要素の故障に際して消失又は損傷したデータを、従来の消去符号と同じ記憶効率を維持しながら再構築するデータ符号化/復号化ソリューションに対するニーズがあり、且つ修復帯域幅コスト及びディスク入出力コストの観点から高まっている。
【0020】
更に、SSD(固体ドライブ)ディスクの出現に伴い、記憶要素は益々高速化しており、各ディスクは読み出しモードで毎秒数十ギガバイトを生成することができる。記憶要素を接続するインターフェースのビットレートは従って特に重要であり、記憶システムのボトルネックとなる。従って、再構築に際して交換されるフローの削減が特に重要である。従って、故障の後で記憶システムを修復する際に転送されるデータの量の最適化を可能にするソリューションに対するニーズがある。
【0021】
本発明は、上述の各種のニーズについて述べる。
【先行技術文献】
【特許文献】
【0022】
【文献】米国特許出願公開第2016/211869号明細書
【非特許文献】
【0023】
【文献】「Network coding for distributed storage systems」,Alexandros G Dimakis,P Brighten Godfrey,Yunnan Wu,MartinJ Wainwright,and Kannan Ramchandran,IEEE Transactions on Information Theory 56(9):4539-4551,2010
【文献】「Optimal exact-regenerating codes for distributed storage at the MSR and MBR points via a product-matrix construction」,Rashmi,Korlakai Vinayak,Nihar B.Shah, and P.Vijay Kumar,IEEE Transactions on Information Theory 57(8):5227-5239,2011
【文献】「Hierarchical codes:How to make erasure codes attractive for peer-to-peerstorage systems」,Alessandro Duminuco and Ernst Biersack,P2P’08,8th IEEE International Conference on Peer-to-Peer Computing,pages 89-98
【文献】「A hitchhiker’s guide to fast and efficient data reconstruction in erasure-coded data centers」,KV Rashmi,Nihar B Shah,Dikang Gu,Hairong Kuang,Dhruba Borthakur,and Kannan Ramchandran,ACM SIGCOMM Computer Communication Review,44(4):331-342,2015
【文献】Cheng Huang et al.:「Erasure Coding in Windows Azure Storage」,USE-NIX,11 April 2013(2013-04-11),pages 1-12,XP061013941
【文献】Cheng Huang et al.:「Pyramid Codes:Flexible Schemes to Trade Spaces for Access Efficiency in Reliable Data Storage systems」,Proc.Sixth IEEE International Symposium on Network Computing and Applications 2007,IEEE,1 July 2007(2007-01-07),pages 79-86,XP031119281,ISBN:978-0-7695-2922-6
【発明の概要】
【発明が解決しようとする課題】
【0024】
本発明は、転送されるデータの量、及び故障の後で記憶システムの修復に必要とされる読み込み/書き込み動作を最適化可能にするデータ符号化及び復号化方法及び装置を提案することにより、公知の技術の限界を克服することを目的とする。
【課題を解決するための手段】
【0025】
有利には、本発明は、記憶効率及びk+r件の故障のうちr個の全てに耐えられる信頼性の特性を維持しながら、修復帯域幅及びディスク入出力コストの両方を削減可能にする。
【0026】
本発明の1つの目的はデータ符号化方法に関するものである。特に(k,r)個のデータを符号化する方法を提案し、方法は、
- 初期データaをk個のデータブロックaiに分割するステップと、
- k個のデータブロックをデータブロックのr-1個の部分集合Sjにグループ化するステップと、
- 各部分集合Sj毎に、前記部分集合Sjに割り当てられたデータブロックの一次結合として定義される一次関数gj(a)を生成するステップと、
- k個のデータブロックaiの一次結合としての一次パリティ関数f0(a)、及び各二次パリティ関数fj(a)が一次パリティ関数f0(a)と一次関数gj(a)の和として定義されるr-1個の二次パリティ関数を含む、r個のパリティ関数を生成するステップとを含んでいる。
【0027】
修復帯域幅及びディスク入出力コストの両方を削減するソリューションを提案する。
【0028】
例えば、文献「Hierarchical codes:How to make erasure codes attractive for peer-to-peer storage systems」,Alessandro Duminuco and Ernst Biersack,P2P’08,8th IEEE International Conference on Peer-to-Peer Computing,pages 89-98に示すような階層的符号を用いる主要なアイディアは、元の符号よりも小さい符号から特定のパリティ関数を階層的に生成するものである。階層的符号(k,r)は、単一の故障を修復するために
【数2】
(k/r-1の整数部分)~k個のデータブロックを読んでダウンロードする必要がある。しかし、階層的符号は従来のRS符号の全てのプロパティを維持する訳ではない。実際、階層的符号(k,r)はr件の故障のいずれにも耐えられない。従って同じ冗長性でも信頼性が低いことが分かる。
【0029】
ヒッチハイカ符号は、RS符号と同じ特性を維持して、帯域幅及びディスクの入出力の観点から低いコストで故障の修復を実行可能にする符号である。「A hitchhiker’s guide to fast and efficient data reconstruction in erasure-coded data centers」,KV Rashmi,Nihar B Shah,Dikang Gu,Hairong Kuang,Dhruba Borthakur,and Kannan Ramchandran,ACM SIGCOMM Computer Communication Review,44(4):331-342,2015に記述されている主要なアイディアは、単一の故障の修復に必要なデータブロックの個数を削減するものである。ヒッチハイカアプローチは、同一構造(k,r)を有する2個のRSサブ符号を考慮する。第2の符号及び第1の符号に依存する特定のパリティ関数は、第2のRSサブ符号内で生成される。これらのインターリーブされたパリティ関数によりデータブロック修復のために読み込まれて転送されるデータの量が削減可能になる。ヒッチハイカ符号(10,4)により、修復帯域幅及びディスクの入出力コストの30%~35%が削減可能になる。
【0030】
以下の参照文献に帯域幅を削減するデータ符号化方法が提案されている。
- Cheng Huang et al.:「Erasure Coding in Windows Azure Storage」,USE-NIX,11 April 2013(2013-04-11),pages 1-12,XP061013941。このLRC(k,l,r)法は、記憶ノードに記憶されるローカルパリティ関数の生成に基づいている。しかし、LRC符号は、ローカルパリティ関数の追加的な記憶に起因して記憶オーバーヘッドをもたらす。
- Cheng Huang et al.:「Pyramid Codes:Flexible Schemes to Trade Spaces for Access Efficiency in Reliable Data Storage systems」,Proc.Sixth IEEE International Symposium on Network Computing and Applications 2007,IEEE,1 July 2007(2007-01-07),pages 79-86,XP031119281,ISBN:978-0-7695-2922-6。この方法はLRC方法の代替方式を提案している。しかし、LRC符号と同様に、ピラミッド符号は、従来の消去符号及びバビロン符号と比較して記憶オーバーヘッドをもたらす。
【0031】
これらのアプローチでは、従来の消去符号と同じ記憶効率を維持しながら帯域幅の削減を可能にするヒッチハイカ符号、再生成符号、及び階層的符号とは逆に、従来の消去符号と同じ記憶効率が得られない。
【0032】
新たな消去符号の定義に基づいて上で述べた方法とは逆に、Blaum Marioらによる特許出願US2016/211869A1号が提案するソリューションは、目的関数として異なる符号間で切り替え可能な複数の消去符号が組み込まれた動的記憶システムを提案している。当該システムは、ファイルの参照頻度の関数として修復帯域幅の削減又は記憶オーバーヘッドの削減のどちらかを決定する。当該システムは特に2個の符号すなわち(上述の)LRC及び「プロダクト符号」(PC)をサポートする。
【0033】
1個以上のデータ記憶要素の故障に際して消失又は損傷したデータを、従来の消去符号と同じ記憶効率を維持しながら再構築するデータ符号化/復号化ソリューションに対するニーズがあり、且つ修復帯域幅コスト及びディスク入出力コストの観点から高まっていることが分かる。
【0034】
本符号化方法の代替的又は組み合わされた実施形態によれば、
- r個のパリティ関数を生成するステップは、r個の符号化ベクトルを生成するステップを含み、符号化ベクトルは、
- k個の一次符号化係数c0,1~c0,kを含む一次符号化ベクトルC0と、
- 各二次符号化ベクトルがk個の二次符号化係数cj,1~cj,kを含むr-1個の二次符号化ベクトルCj(1≦j≦r-1)とを含み、
- 各一次符号化係数c0,iは非ゼロ乱数に対応し、二次符号化係数cj,iは当該データブロックaiが部分集合Sjに属するか否かに応じて非ゼロ又はゼロ乱数に対応しており、
- 一次関数gj(a)を生成するステップは、k個のデータブロック(a1,...,ak)と二次符号化ベクトルCjの一次結合を生成するステップを含み、
- k=10且つr=4である。
【0035】
本発明のデータ符号化方法は、記憶装置の故障に続いて消失したデータを再構築する目的で複数の記憶装置にデータを分散させることに特に適している。また、k+r個のデータを記憶する方法も請求項に記載しており、方法は、k個のシステム化記憶装置Ni,i∈{1,..,k}にk個のデータブロックai、及びr個のパリティ記憶装置Ni,i∈{k+1,..,k+r}に、r個のパリティ関数であって請求項に記載のデータ符号化方法に従い取得されたr個のパリティ関数を記憶するステップを含む少なくとも1個のステップを含んでいる。
【0036】
本発明はまた、請求項に記載のデータ符号化方法のステップを実行する手段を含むデータ符号化装置も対象とする。
【0037】
本発明の別の目的は、請求項に記載の符号化方法により符号化されたデータを記憶する装置のコンテンツを再構築又は複製する方法に関する。特に、k個のデータブロックaiをk個のシステム化記憶装置Ni,i∈{1,..,k}に、及びr個のパリティ関数fj(a)をr個のパリティ記憶装置Ni,i∈{k+1,..,k+r}に記憶している複数の記憶装置のうち1個の記憶装置のコンテンツを再構築する方法を請求項に記載しており、前記k個のデータブロック及びr個のパリティ関数は、請求項に記載のデータ符号化方法に従い取得され、当該再構築方法は少なくとも以下を含むステップ、すなわち、
- コンテンツを再構築する記憶装置がシステム化又はパリティ記憶装置であるか否かを判定するステップと、
- 前記装置がシステム化記憶装置Ni,i∈{1,..,k}である場合、
- 前記装置のデータブロックがどのデータ部分集合Sjに属するかを判定し、
- パリティ記憶装置k+1及びk+1+jに記憶されている一次及び二次パリティ関数を取得し、
- 部分集合Sjに関連付けられた一次関数gj(a)を計算し、
- ブロックai以外の部分集合Sjのデータブロックを取得して、
- 前記システム化記憶装置Ni,i∈{1,..,k}のコンテンツを再構築するステップと、
- 前記装置がパリティ記憶装置Ni,i∈{k+1,..,k+r}である場合、前記記憶装置を識別する添え字iを決定して、
- 添え字iがk+1に等しい場合、
・添え字i=k+2のパリティ記憶装置及び部分集合S1のデータブロックaiに記憶されている二次パリティ関数f1(a)を取得し、
・部分集合S1に関連付けられた一次関数g1(a)を計算して一次パリティ関数f0(a)を復号化して、
・添え字i=k+1の前記パリティ装置のコンテンツを再構築するステップと、
- 添え字iがk+1よりも大きい場合、
・添え字i=k+1のパリティ記憶装置及び部分集合Si-k+1のデータブロックaiに記憶されている一次パリティ関数f0(a)を取得し、
・部分集合Si-k+1に関連付けられた一次関数gi-k+1(a)を計算して二次パリティ関数fi-k+1(a)を復号化して、
・添え字i>k+1の前記パリティ装置のコンテンツを再構築するステップとを含んでいる。
【0038】
コンテンツ再構築方法は、記憶装置の故障に続いて消失したデータのコンテンツの再構築に特に適している。
【0039】
再構築方法の代替的又は組み合わされた実施形態によれば、
- パリティ関数を取得するステップは、対応する記憶装置からデータ収集装置にデータを転送するステップを含み、
- i∈{1,..,k}であるシステム化ノードiを再構築すべく部分集合Sjに関連付けられた一次関数gj(a)を計算するステップは、記憶装置Nk+1+jに記憶されている二次パリティ関数から記憶装置Nk+1に記憶されている一次パリティ関数を減算するステップを含み、
- i=k+1であるパリティノードiを再構築すべく部分集合S1に関連付けられた一次関数g1(a)を計算するステップは、部分集合S1のデータブロック及び符号化ベクトルC1から一次結合を生成するステップを含み、
- i∈{k+2,..,k+r}であるパリティノードiを再構築すべく部分集合Sjに関連付けられた一次関数gj(a)を計算するステップは、部分集合Sjのデータブロック及び符号化ベクトルCjから一次結合を生成するステップを含み、
- 前記システム化記憶装置のコンテンツを再構築するステップは、一次関数gj(a)からデータブロックaiを復号化するステップを含み、
- i=k+1である前記パリティ記憶装置iのコンテンツを再構築するステップは、計算された一次関数g1(a)から添え字i=k+1の前記パリティ記憶装置の二次パリティ関数を復号化するステップを含み、
- i>k+1である前記パリティ記憶装置iのコンテンツを再構築するステップは、計算された一次関数gi-k+1(a)から添え字i>k+1の前記パリティ装置の二次パリティ関数を復号化するステップを含んでいる。
【0040】
本発明はまた、k個のデータブロックaiをk個のシステム化記憶装置Ni,i∈{1,..,k}に、及びr個のパリティ関数fj(a)をr個のパリティ記憶装置Ni,i∈{k+1,..,k+r}に記憶している複数の装置のうち1個の記憶装置のコンテンツを再構築する装置も対象としており、前記k個のデータブロック及びr個のパリティ関数は請求項に記載の符号化方法に従い取得され、装置は、記憶装置のコンテンツを再構築する請求項に記載の方法のステップを実行する手段を含んでいる。
【0041】
本発明は、ASIC又はFPGA型の集積回路等のハードウェア及び/又ソフトウェア要素に組み込まれていてよい。
【0042】
本発明はまた、請求項に記載の符号化方法のステップを実行可能にする符号命令を含む、及び/又は前記プログラムがコンピュータ上で実行された場合に請求項に記載のコンテンツ再構築方法のステップを実行可能にする符号命令を含むコンピュータプログラムにも関する。
【0043】
本発明は、請求項に記載の符号化方法及び/又はコンテンツ再構築方法を実行する符号命令を含むプログラムが記憶されているプロセッサ可読記憶媒体として入手可能であってよい。
【0044】
請求項に記載のコンテンツ再構築方法の有利な使用の1つは、請求項に記載の符号化方法に従い符号化されたデータを記憶可能な複数のデータ記憶ノードを含む分散記憶システムである。
【0045】
請求項に記載のコンテンツ再構築方法の別の有利な使用は、請求項に記載の符号化方法に従い符号化されたデータを記憶可能なデータ記憶ディスクを含むローカル記憶システムである。
【0046】
本発明の異なる態様及び利点を、以下の図面を参照しながら本発明の好適であるが非限定的な実装例の記述を精査することにより明らかになろう。
【図面の簡単な説明】
【0047】
【
図1】一実施形態において本発明を実装可能にする分散システム環境を示す。
【
図2】本発明の一実施形態におけるデータの記憶の表現を示す。
【
図3】一実施形態における本発明の符号化方法のステップを示す。
【
図4】本発明の原理による、一次符号化ベクトルの生成を示す。
【
図5】本発明の原理による、二次符号化ベクトルの生成を示す。
【
図6】本発明の原理による、一次パリティ関数及び二次パリティ関数の生成を示す。
【
図7a】本発明の原理によるシステム化パリティノードの再構築ステップを示す。
【
図7b】本発明の原理によるシステム化パリティノードの再構築ステップを示す。
【
図7c】本発明の原理によるシステム化パリティノードの再構築ステップを示す。
【
図8】異なる符号の性能レベルを比較する表である。
【発明を実施するための形態】
【0048】
以下の記述全体にわたり、表現「記憶ノード」は一般的な意味で用いられ、単一のディスクであるか、又はノードを形成する一群の記憶装置であるかに依らず、記憶実体を表記する。記述する本発明の複数の実施形態は、本発明を実装可能にする環境の一例に過ぎない
図1に示す分散記憶システムの任意の変型例に適用できる。従って、本例は限定的でなく、記述する原理は、ファイルに又はオブジェクトに基づくか否かに依らず、クラウドシステム、データセンター、分散ファイルシステム等の、分散型であるか否かに依らない記憶システムが組み込まれた他の任意の環境にも適用できる。本発明はまた、「ディスクアレイ」等の非分散記憶システムに適用できる。更に、初期データから導出されたデータを記憶する記憶ノードを「システム化ノード」と呼び、パリティ関数を記憶する記憶ノードを「パリティノード」と呼ぶ。
【0049】
本発明の原理を分かり易くすべく、符号(k=10,r=4)の特定の例について最初に符号化方法を記述し、次いで任意の符号(k,r)に一般化される。
【実施例】
【0050】
符号(10,4)の例に関する符号化方法の記述
図2に、符号k=10及びr=4の例に基づく、本発明の符号化方法の適用によるデータの記憶の表現を示す。以下の記述において、本発明の符号化ステップは、表現「バビロン符号」又は「バビロン符号化」により表すことができる。初期データaがk=10個の部分(200)又はa
i,i∈{1,..,10}と表記するデータブロック(a
1,...,a
10)に分割され、これにデータ(a
1,...,a
10)の一次結合であって以下にf
0(a),f
1(a),f
2(a),f
3(a)又はf
0(a)及びf
j(a),j∈{1,2,3}と表記するr=4個のパリティブロック又はパリティ関数f
0,f
1,f
2及びf
3が追加される。パリティ関数f
0(a)は一次パリティ関数と呼ばれ、パリティ関数f
j(a)は二次パリティ関数と呼ばれる。一次及び二次パリティ関数は、本発明のバビロン符号化(202)により生成されて記憶ノード(204)に記憶される。
【0051】
システム化データブロックa1~a10は(N1~N10)と表記する10個の対応するシステム化記憶ノード(206)に記憶され、一次f0(a)及び二次f1(a)、f2(a)、f3(a)パリティ関数は、N11~N14と表記する4個の対応するパリティ記憶ノード(208)に記憶される。
【0052】
図3に、符号(k=10,r=4)の一実施形態における本発明の符号化方法(300)のステップを示す。本方法は第1のステップ(302)において初期データaを10個のデータブロック(a
1,...,a
10)に分割し、次いで次ステップ(304)において3個のデータ部分集合(S
1,S
2,S
3)を生成可能にする。各データ部分集合は、生成された10個のブロックからの異なるデータブロックを含んでいる。一実施形態において、2個の部分集合(S
1,S
2)は各々3個のデータブロックを含み、第3の部分集合(S
3)は4個のデータブロックを含んでいる。第1の部分集合S
1は、初期データから取得された先頭3ブロック(a
1,a
2,a
3)を含み、第2の部分集合S
2は次の3ブロック(a
4,a
5,a
6)を含み、最後の部分集合S
3は残った最後の4ブロック(a
7,a
8,a
9,a
10)を含んでいる。
【0053】
次のステップ(306)において、本方法は、4個のパリティノードに対応する長さ(k=10)の4個の符号化ベクトルを生成可能にする。C0~C4と表記された符号化ベクトルは、一次符号化ベクトルC0及び3個の二次符号化ベクトルC1、C2、C3に対応している。
【0054】
図4及び5に、本発明の原理による符号化ベクトルの生成ステップを詳述する。
【0055】
図4に、一実施形態における一次符号化ベクトルC
0(400)の生成を示す。一次符号化ベクトルC
0は、10個の一次符号化係数c
0,1~c
0,10を含み、各一次符号化係数c
0,i(402-i)が非ゼロ乱数(404-i)に対応している。
【0056】
図5に、一実施形態(500)における二次符号化ベクトルC
j(1≦j≦3)の生成を示す。各二次符号化ベクトルC
jは、10個の二次符号化係数c
j,1~c
j,10を含んでいる。
【0057】
ベクトルCjを生成すべく、本方法は各ブロックai毎に、ブロックaiが部分集合Sjに属するか否かを調べる(504-i)。結果が肯定的な場合(yes分岐)、本方法は係数cj,iに対し非ゼロ乱数(506-i)を関連付けられるようにする。ブロックaiが部分集合Sjに属しない(no分岐)場合、本方法は係数cj,iに対しゼロ乱数(508-i)を関連付けられるようにする。
【0058】
例えば、符号化ベクトルC1を生成するために、本方法は各データブロックa1,a2,..a10が部分集合S1に属するか否かを調べる。データブロックa1,a2,a3は部分集合S1に属するため、本方法は従って係数c1,1,c1,2及びc1,3に対して非ゼロ乱数を生成する。データブロックa4,...,a10はS1に属しないため、本方法は係数c1,4...c1,10に関連付けられたゼロ乱数を生成する。
【0059】
従って、部分集合S1に対して、本方法は(c1,1,c1,2,c1,3,0,0,0,0,0,0,0)に等しい符号化ベクトルC1を生成可能にし、ここでc1,1、c1,2及びc1,3は非ゼロ乱数である。
【0060】
部分集合S2に対して、本方法は(0,0,0,c2,4,c2,5,c2,6,0,0,0,0)に等しい符号化ベクトルC2を生成可能にし、ここでc2,4、c2,5及びc2,6は非ゼロ乱数である。
【0061】
部分集合S3に対して、本方法は(0,0,0,0,0,0,c3,7,c3,8,c3,9,c3,10)に等しい符号化ベクトルC3を生成可能にし、ここでc3,7、c3,8,c3,9及びc3,10は非ゼロ乱数である。
【0062】
図3に戻り、符号化ベクトルの生成ステップの後、本方法は、一次パリティ関数f
0(a)及び3個の二次パリティ関数f
1(a)、f
2(a)及びf
3(a)を含むデータブロック(a
1,...,a
10)の一次結合として4個のパリティ関数を生成する(308)ことを可能にする。
【0063】
図6に、本発明の原理による一次パリティ関数f
0(a)及び二次パリティ関数f
j(a)j∈{1,2,3}の生成を詳述する。一次パリティ関数(602)は10個のデータブロック(a
1,...,a
10)の一次結合であり、パリティノードN
11に記憶されている。各データブロックa
iには一次符号化ベクトルC
0(400)の符号化係数c
0,iが関連付けられている。一次パリティ関数f
0(a)は、次式のように書くことができる。
- f
0(a)=c
0,1*a
1+c
0,2*a
2+c
0,3*a
3+c
0,4*a
4+c
0,5*a
5+c
0,6*a
6+c
0,7*a
7+c
0,8*a
8+c
0,9*a
9+c
0,10*a
10
ここで係数c
0,1,c
0,2,...,c
0,10は非ゼロ乱数である。
【0064】
図6に示すように、3個の二次パリティ関数f
j(a)(1≦j≦3)(604)を生成するために、本方法は最初に3個の一次関数g
j(a)(1≦j≦3)(606)を生成する。各一次関数g
j(a)は、10個のデータブロック(a
1,...,a
10)と符号化ベクトルC
j(1≦j≦3)(500)の一次結合である。
【0065】
一次関数g1(a)は10個のデータブロック(a1,...,a10)と符号化ベクトルC1の一次結合により得られ、次式のように書くことができる。
- g1(a)=c1,1*a1+c1,2*a2+c1,3*a3
【0066】
一次関数g2(a)は10個のデータブロック(a1,...,a10)と符号化ベクトルC2の一次結合により得られ、次式のように書くことができる。
- g2(a)=c2,4*a4+c2,5*a5+c2,6*a6
【0067】
同様に、一次関数g3(a)は10個のデータブロック(a1,...,a10)と符号化ベクトルC3の一次結合により得られ、次式のように書くことができる。
- g3(a)=c3,7*a7+c3,8*a8+c3,9*a9+c3,10*a10
【0068】
関数gj(a)(1≦j≦3)が生成されたならば、本方法は二次パリティ関数f1(a)、f2(a)及びf3(a)を生成可能にする。二次パリティ関数f1(a)は、一次パリティ関数f0(a)と一次関数g1(a)の和により得られ、次式のように表すことができる。
- f1(a)=f0(a)+g1(a)
【0069】
同様に、二次パリティ関数f2(a)は一次パリティ関数f0(a)と一次関数g2(a)の和により得られ、次式のように表すことができる。
- f2(a)=f0(a)+g2(a)
【0070】
同様に、二次パリティ関数f3(a)は一次パリティ関数f0(a)と一次関数g3(a)の和により得られ、次式のように表すことができる。
- f3(a)=f0(a)+g3(a)
【0071】
二次パリティ関数f1(a)、f2(a)、f3(a)は、各パリティノードN12、N13及びN14(208)に記憶されている。
【0072】
有利には、一次関数g1(a)、g2(a)、g3(a)及び一次パリティ関数f0(a)は、互いに一次独立であるように生成される。更に、これらの関数の任意の2個の和も他の関数とは一次独立である。最後に、有利には、全てのデータブロックが一次独立であるため、バビロン符号は同じ特性をRS符号として維持する。
【0073】
図7a~7cに、本発明の原理による、故障を検知して、システム化ノード及びパリティノードのコンテンツを再構築するステップを示す。
【0074】
図7aに示すように、本方法は、記憶システムの故障の検知に関する、故障の件数(704)を示す情報が利用できるときに開始される(702)。故障の件数が5以上である場合、修復方法は動作不可能なことがあり、システムに不具合がある(706)と考えられる。故障の件数が2~4である場合、故障した2、3又は4個のノードは、消去符号又はリードソロモン型の公知の修復方法(708)に従い再構築することができる。
【0075】
バビロン符号による請求項に記載の方法は、ローカル又は分散記憶システムの単一の記憶ノードが故障した場合に機能する。修復ステップは、他の記憶ノード内で、故障したノードに含まれていた消失データを取得して、新規な記憶ノードを同じデータで再構築可能にする。本方法は、故障が検知された後で、故障していた(710)ノードの性質、すなわちシステム化ノード又はパリティノードのいずれであるかを判定する。
【0076】
本発明の原理の理解を容易にすべく、且つ限定することなく、本再構築方法について最初に符号(k=10,r=4)の特定の例を挙げて記述し、次いで任意の符号(k,r)に一般化する。
【0077】
符号(10,4)を用いる記憶システムの例に関する本発明の復号化方法の記述
故障がシステム化ノードN
i,i∈{1,..,10}、すなわちデータブロックa
iを記憶しているノードに関係している場合、再構築(712)は
図7bに記述する方法のステップにより行われる。
【0078】
故障がパリティノードN
i,i∈{
11,..,
14}、すなわちパリティ関数を記憶しているノードに関係している場合、再構築(714)は
図7cに記述する方法のステップにより行われる。
【0079】
図7bに、本発明のシステム化ノードの再構築ステップを示す。
【0080】
本方法を説明するために、ノードN1に位置するブロックa1が消失していて再構築する必要があると仮定する。第1のステップ(716)において、本方法は、故障したノードNiのデータaiが属するデータの部分集合Sj,j∈[1,2,3]を判定可能にする。本例では、データブロックa1はデータ(a1,a2,a3)を含む部分集合S1に属する。次のステップ(718)において、本方法はノードN11に記憶されている一次パリティ関数f0(a)のデータの取得、及びノードN12に記憶されている識別された部分集合S1の添え字に対応する二次パリティ関数f1(a)のデータの取得を可能にする。表現「データを取得する」を用いて記憶ノードからデータ収集装置へのデータ転送動作を表す。データ収集装置は、ノードの再構築方法を実行可能な汎用記憶システムコントローラに組み込まれていてよい。データの取得はまた、記憶ノード及びデータ収集装置のメモリ要素との間の読み出し/書き込み動作を含んでいる。
【0081】
データ収集ステップの後で、本方法は、取得されたデータからデータS1の部分集合に関連付けられた一次関数g1(a)を計算することを可能にする(720)。一実施形態において、一次関数gj(a)は、ノードN12に位置する二次パリティ関数f1(a)からノードN11に位置する一次パリティ関数f0(a)を減算することにより得られる。
【0082】
次のステップ(722)において、本方法は、消失したブロックa1以外の部分集合S1のデータブロック(a2,a3)をロード可能にする。これらのデータを一次関数g1(a)から減算することにより、データa1が取得され、消失したデータブロックa1の一次記憶ノードN1が再構築される(724)。
【0083】
a1のノードの再構築は、10個のブロックを要する従来のRS符号とは異なり、4個のデータブロック{a2,a3,f0(a),f1(a)}だけを用いればよく、すなわち60%の節減となる。同様に、i∈{1,2,3}である任意のデータブロックaiのシステム化ノードの再構築もまた、添え字i∈{1,2,3}\{i}を有する、すなわち、故障したノードNiに対応する添え字iのデータブロック以外のデータブロックを用い、且つ一次パリティf0(a)及び二次パリティf1(a)関数のデータブロックを用いるため、4個のブロックだけを必要とする。
【0084】
i∈{4,5,6}である任意のデータブロックaiのシステム化ノードの再構築は、添え字i∈{4,5,6}\{i}を有するデータブロックを用い、且つ一次パリティf0(a)及び二次パリティf2(a)関数のデータブロックを用いるため4個のブロックを必要とする。
【0085】
i∈{7,8,9,10}である任意のデータブロックaiのシステム化ノードの再構築は、添え字i∈{7,8,9,10}\{i}を有するデータブロックを用い、且つ一次パリティf0(a)及び二次パリティf3(a)関数のデータブロックを用いるため、5個のブロックを必要とする。
【0086】
図7cに、本発明のパリティノードの再構築ステップを示す。
【0087】
ノードNi,i∈[11,14]は、一次f0(a)及び二次f1(a)、f2(a)、f3(a)パリティ関数を含んでいる。本方法は最初に、修復対象のノードが一次パリティ関数f0(a)を含むN11であるか否かを判定する(726)。yesの場合、本方法はデータf1(a)とa1、a2、a3を含む部分集合S1のデータをノードN12,N1,N2及びN3から転送する(728)ことを可能にする。次のステップ(730)において、本方法は、データa1、a2、a3を用いて一次関数g1(a)の生成、次いでパリティ関数f1(a)から一次関数g1(a)を減算することによる一次パリティ関数f0(a)の復号化を可能にする。本方法は次いでノードN11を再構築可能にする。
【0088】
ノードi,i∈{1,..,10}と同様に,N11の修復は、4個のデータブロック(f1(a),a1,a2,a3)だけを必要とする。
【0089】
ステップ(726)に戻り、修復対象のノードがi∈[12,14]のようなパリティノードNiである場合、本方法はパリティ関数f0(a)を含むノードN11のデータのロード(734)、及び部分集合Si-11のデータのロードを可能にする。次のステップ(736)において、本方法は、部分集合Si-11のデータを用いて一次関数gi-11(a)の生成、及び一次パリティ関数f0(a)と一次関数gi-11(a)の和を求めることにより、パリティ関数fi-11(a)の復号化を可能にする。本方法は次いで、ノードNi,i∈[12,14]の再構築(738)を可能にする。
【0090】
従って、二次パリティ関数f1(a)を含むノードN12を再構築すべく、本方法はノードN11のパリティ関数f0(a)及び部分集合S1のデータをロードする(ノードN1からa1、ノードN2からa2及びノードN3からa3)ことを可能にする。第1段階において、部分集合S1のデータa1、a2、a3を用いてパリティ関数g1(a)を生成する。次に、f0(a)とg1(a)の和を求めることにより、二次パリティ関数f1(a)を復号化してノードN12を再構築する。
【0091】
同様に、二次パリティ関数f2(a)を含むノードN13を再構築すべく、本方法はパリティ関数f0(a)を含むノードN11のデータ及び部分集合S2のデータのロードを可能にする。第1ステージにおいて、部分集合S2のデータa4、a5、a6を用いてパリティ関数g2(a)を生成する。次に、f0(a)とg2(a)の和を求めることにより、二次パリティ関数f2(a)を復号化してノードN13を再構築する。
【0092】
最後に、二次パリティ関数f3(a)を含むノードN14を再構築すべく、本方法はノードN11に含まれるパリティ関数f0(a)及び部分集合S3のデータをロード可能にする。第1ステージにおいて、部分集合S3のデータa7、a8、a9、a10を用いてパリティ関数g3(a)を生成する。次に、f0(a)とg3(a)の和を求めることにより、二次パリティ関数f3(a)を復号化してノードN14を再構築する。
【0093】
ノードN12及びN13の修復は、各々4個のデータブロック{f0(a),a1,a2,a3}及び{f0(a),a4,a5,a6}だけを転送すればよく、ノードN14の修復は5個のデータブロック{f0(a),a7,a8,a9,a10}の転送を必要とする点に注意されたい。
【0094】
従って、有利には、請求項に記載の再構築方法は、任意のノードi∈{1,..,14}の再構築に4又は5個のデータブロックだけを必要とする。これによりRS符号と比較して帯域幅及び入出力が50%~60%削減可能になる。
【0095】
本発明の符号化方法の一般的原理を任意の符号(k,r)について以下に記述する。
【0096】
入力としてサイズMのデータから開始して、本発明の一般的原理は、各ブロックのサイズがM/kであるk個のデータブロック(a1,...,ak)にデータを分割する。ノードNiに記憶されている各データブロックaiのサイズはm=M/kに固定されている。
【0097】
以下の表記は以下の記述に適している。
【数3】
はXの整数部を表し、
【数4】
はXの切り上げ整数部を表す。
【0098】
バビロン符号化方法は、k個のデータブロック(a
1,...,a
k)をS
j,1≦j≦r-1と表記する(r-1)個の部分集合(S
1,S
2,...,S
r-1)に分割するステップで開始される。kがr-1の倍数である場合、これらの部分集合は同一のサイズk/r-1を有している。kがr-1の倍数でない場合、先頭r-1-q個の部分集合の各々はt
f個のデータブロックを含み、残りq個の部分集合はt
c個のデータブロックを含んでいて次式が成り立つ。
【数5】
【0099】
第1の部分集合S1は、(a1,..,atf)に属するデータブロックを含んでいる。j番目の部分集合Sjは(a(j-1)tf+1,...,ajtf)に属するデータブロックを含んでいる(1≦j≦r-1)。
【0100】
本方法の第2のステップは、一次符号化ベクトルC0及びr-1個の二次符号化ベクトルCj(1≦j≦r-1)を含んでいるr個の符号化ベクトルを生成する。
【0101】
一次符号化ベクトルC0は、各一次符号化係数c0,iが非ゼロ乱数に対応するk個の符号化係数c0,1~c0,kを含んでいる。
【0102】
二次符号化ベクトルCjはk個の符号化係数cj,1~cj,kを含んでいる。二次符号化ベクトルCjを生成すべく、本方法は、各ブロックai毎に、ブロックaiが部分集合Sjに属するか否かを調べる。そうである場合、本方法は、係数cj,iに非ゼロ乱数を関連付けられるようにし、ブロックaiが部分集合Sjに属していない場合、本方法は係数cj,iにゼロ乱数を関連付けられるようにする。
【0103】
符号化ベクトルC0~Cr-1の構造は以下のように表される。
c0=[c0,1,c0,2,..,c0,k]
c1=[c1,1,c1,2,c1,tf,....,0,..,0]
c2=[0,..,0,c2,tf+1,..,c2,2tf,0,..,0]
...
cr-q=[0,..,0,cr-q,(r-q-1)tf+1,..,cr-q,(r-q)tc,0,..,0]
cr-q+1=[0,..,0,cr-q+1,(r-q)tc+1,..,cr-q+1,(r-q)tc,0,..,0]
...
cr-1=[0,..,..,..,0,cr-1,rtc+1,..,cr-1,k]
【0104】
符号化ベクトルの生成ステップの後、本方法は、データ(a1,...,ak)の一次結合であって、一次パリティ関数f0(a)及びr-1個の二次パリティ関数f1(a),..,fr-1(a)を含むr個のパリティ関数を生成可能にする。
【0105】
一次パリティ関数は、k個のデータブロック(a1,...,ak)の一次結合であって、添え字k+1、Nk+1のパリティノードに記憶されている。各データブロックaiには一次符号化ベクトルC0の符号化係数c0,iが関連付けられている。一次パリティ関数f0(a)は、次式のように書くことができる。
- f0(a)=c0,1*a1+c0,2*a2+......c0,k*ak
ここに係数c0,1,c0,2,...,c0,kは非ゼロ乱数である。
【0106】
r-1個の二次パリティ関数fj(a)(1≦j≦r-1)を生成すべく、本方法は最初にr-1個の一次関数gj(a)(1≦j≦r-1)の全てを生成可能にする。各一次関数gj(a)は、k個のデータブロック(a1,...,ak)と符号化ベクトルCj(1≦j≦r-1)の一次結合である。一次関数gj(a)(1≦j≦r-1)が生成されたならば、本方法は、一次パリティ関数f0(a)を一次関数gj(a)に加算することにより二次パリティ関数fj(a),1≦j≦r-1が得られるように、二次パリティ関数f1(a),f2(a)...fr-1(a)を生成可能にする。
- fj(a)=f0(a)+gj(a)
【0107】
本発明の符号化により生成されたデータブロック及びパリティ関数は、ローカル又は分散記憶システムの記憶ノードに記憶される。k個のデータブロック(a1,...,ak)は、k個のシステム化ノードNi,i∈{1,..,k}に記憶され、パリティ関数により得られたr個のパリティブロックの各々は、以下の表に示すようにパリティノードNi,i∈{k+1,..,k+r}に記憶されている。
【0108】
【0109】
有利には、一次関数gj(a),1≦j≦r-1及び一次パリティ関数f0(a)は互いに一次独立であるように生成される。更に、これらの関数のうち任意の2個の和もまた他の関数とは一次独立である。最後に、有利には、全てのデータブロックが一次独立であり、バビロン符号はRS符号と同じ特性を維持している。
【0110】
本発明の再構築方法の一般的原理を以下に任意の符号(k,r)について記述する。再構築方法は、記憶システムの故障の検知に関する情報が利用可能な場合に開始される。本方法はノードのコンテンツを複製すべく開始することができる。故障発生時の再構築方法は、ローカル又は分散記憶システム内の単一の記憶ノードが故障した場合に機能する。修復ステップは、他の記憶ノード内で、故障したノードに含まれていた消失データの取得、及び同じデータを用いた新たな記憶ノードの再構築を可能にする。
【0111】
故障が検知された場合、本方法は故障したノードの性質、すなわちシステム化ノード又はパリティノードのいずれであるかを判定する。
【0112】
故障がシステム化ノードNi,i∈{1,..,k}、すなわちデータブロックaiを記憶しているノードに関する場合、再構築は以下に記述するケース1に従い行われる。
【0113】
故障がパリティノードNi,i∈{k+1,..,k+r}、すなわちパリティ関数を記憶しているノードに関する場合、再構築は以下に記述するケース2に従い行われる。
【0114】
- ケース1:ノードNi,i∈{1,..,k}の再構築
ノードNiに記憶されているai∈Sj且つ(1≦j<r)であるデータai(1≦i≦k)の修復を考慮するに、本方法は最初に添え字k+1のノードN(k+1)及び添え字k+1+jのノードN(k+1+j)に含まれるデータを転送可能にする。次に、添え字k+1のノードN(k+1)に記憶されているデータf0(a)を、添え字k+1+jのノードN(k+1+j)に記憶されているデータfj(a)から減算して、部分集合Sjに関連付けられた一次関数gj(a)を復旧する。本方法は次いで、部分集合Sj\{ai}の(すなわちデータブロックai以外の)データを転送可能にする。一次関数gj(a)の使用により、消失したデータaiが復号化可能になる。aiの再構築に必要なデータブロックの個数は従って、iが先頭(r-1-q)個の部分集合に属する場合、(tf+1)である。iが最後のq個の部分集合に属する場合、必要なデータブロックの総数は(tc+1)である。
【0115】
- ケース2:ノードNi,i∈{k+1,..,k+r}の再構築
前のケースと同様に、ノードNi(k+1<i≦k+r)を再構築すべく、本方法は添え字k+1のノードN(k+1)に記憶されているデータf0(a)及び部分集合Si-k+1に位置するデータを転送可能にする。一次関数gi-k+1(a)は部分集合Si-k+1のデータから得られる。次に、復号化は、一次関数f0(a)及び一次関数gi-k+1(a)を用いて二次関数fi-k+1(a)(実際には、fi-k+1(a)=f0(a)+gi-k+1(a))を取得することにより実行される。(i-k+1)が先頭(r-1-q)個のブロックに属するならば、修復に(tf+1)個のデータブロックを必要とする点に注意されたい。(i-k+1)∈{r-q,..,r-1}ならば、修復に(tc+1)個のブロックを必要とする。
【0116】
一次パリティ関数f0(a)を含む添え字k+1のノードNk+1の特定のケースの場合、本方法は一次関数g1(a)を生成すべく第1の部分集合S1を転送可能にする。本方法は次いで、二次パリティ関数f1(a)を含む添え字k+2のノードNk+2からデータを転送可能にする。二次パリティ関数f1(a)から一次関数g1(a)を減算することにより、一次パリティ関数f0(a)を復号化する(実際には、f0(a)=f1(a)-g1(a))。(tf+1)個のデータブロックを用いることにより、一次パリティ関数f0(a)を含む添え字k+1のノードNk+1のデータが取得される。
【0117】
一般に、再構築/修復のために転送及び読み出されるデータの平均値は、ノードの種類に依らず次式で与えられる。
【数6】
【0118】
記述が値r≧3を例として挙げている点に注意されたい。値r=1の場合、バビロン符号は従来のRS符号として機能する。値r=2の場合、データは2個の部分集合S
1及びS
2に分割され、S
1は先頭t
s個のブロックを含み、S
2は最後のk-t
s個のブロックを含み、ここで
【数7】
である。
【0119】
有利には、本発明の方法は再構築の処理に全てのノードを使用しなくて済むようにする。更に、再構築に寄与するノードは計算を実行する必要がなく、単に自身のコンテンツを復号化動作が実行されるデータ収集器に転送するだけでよい。データ収集器は、故障したノードを代替する新たな記憶ノードであってよい。
【0120】
更に有利には、バビロン符号化方法により、k個のノードのデータブロックの全てが再構築に必要な行列に基づく方法と比較して再構築時間が削減される。
【0121】
図8は、異なる既知の符号の結果を本発明のバビロン符号により得られた結果と比較する性能レベルの比較表である。表(800)において、第1列は比較された符号、すなわちRS、再生器、精密再生器、階層的、ヒッチハイカ、及びバビロンの一覧を示す。
【0122】
全ての符号に対して、(k=10,r=4)の構成を用いて符号化された同一サイズMバイトのファイルを考察した。
【0123】
異なるパラメータ、すなわち修復に要する平均帯域幅(806)、ディスク入出力(808)及び故障耐性(810)に対して同一の記憶効率(71%)の列(804)の各符号について評価が行われた。帯域幅及びディスク入出力は、元ファイルのサイズMに対するパーセンテージとして表されている。表内のパーセンテージは、システム化ノード及びパリティノードの修復を考慮しながら計算された。
【0124】
結果は以下の通りである。
- RS符号の場合、単一の故障の修復にMバイトの読み出し及び転送を要する。これはファイルの下のサイズの100%に等しい。
- 同一記憶効率の場合、再生器符号及び精密再生器符号が必要とする帯域幅が計算された。故障の修復に用いる帯域幅は平均32.5%に等しい。しかし、ディスク入出力は最適化されていない。単一の故障を修復するには、再生器符号は、ノードに記憶されている全てのデータが転送される前に読み込まれることを必要とする。
- 階層的符号は、帯域幅及びディスク入出力の両方を最適化する。ネットワーク内で読み込まれて転送されるデータの量は33.57%に等しい。しかし、階層的符号はRS符号と同レベルの故障耐性を維持しない。実際、階層的符号を用いてどの4件の故障にも耐えられない。
- ヒッチハイカ符号は、RS符号と同レベルの故障耐性を維持しながら、帯域幅及びディスク入出力の両方の最適化を可能にする。この場合、読み込まれて転送されるデータの量は76.42%に等しい。
- バビロン符号は、単一の故障を帯域幅及びディスク入出力の両方の観点から修復するのに元ファイルのサイズの平均43.57%を必要とする。バビロン符号はまた、14個のノードのうち任意の4件の故障に耐えられるようにする。
【0125】
本発明は、ハードウェア及び/又はソフトウェア要素により実装できる。本発明は、コンピュータ可読媒体上のコンピュータプログラム製品として利用可能であってよい。媒体は、電子、磁気、光学又は電磁気であってよい。一実施形態において、本方法はコンピュータにより実装される。コンピュータプログラム製品について記述され、前記コンピュータプログラムは、前記プログラムがコンピュータ上で動作した際に本方法の1個以上のステップを実行可能にする符号命令を含んでいる。一実施形態において、本発明を実装する装置は、1個以上のプロセッサで動作した際に上述の複数の実施形態の機能を実行するコンピュータプログラム(すなわち実行可能な複数の命令)により符号化されたコンピュータ可読記憶媒体(RAM、ROM、フラッシュメモリ又は他のメモリ技術、例えばディスク媒体又は他の非一時的コンピュータ可読記憶媒体)を含んでいる。本発明の実装に適したハードウェアアーキテクチャの一例として、一装置は、中央演算処理装置又はマイクロプロセッサ(CPUすなわちCentral Processing Unitの略)が接続された通信バス(当該プロセッサは「マルチコア」又は「多コア」であってよい)、本発明の実施に必要なプログラムを格納可能な読み出し専用メモリ(ROM)、上述のプログラムの実行中に生成及び変更された変数及びパラメータの格納に適したレジスタを含むランダムアクセスメモリ又はキャッシュメモリ(RAM)、データの送受信に適した通信又はI/O(入出力)インターフェースを含んでいてよい。本発明が再プログラム可能な計算機(例:FPGA回路)上にインストールされた場合、対応するプログラム(すなわち一連の命令)は着脱可能な記憶媒体(例:SDカード、又はハードディスク、例えばSSD等の大容量ストレージ)又は着脱不可能な、揮発性又は不揮発性記憶媒体に記憶することができ、記憶媒体はコンピュータ又はプロセッサにより一部又は全部が読み出し可能である。コンピュータ可読媒体は、搬送可能又は通信可能或いは移動可能又は送信可能であってよい(すなわち、2G、3G、4G、Wifi、BLE、光ファイバー又は他の通信ネットワークを介して)。動作時に、上述の機能の任意の1個を実行するコンピュータプログラムへの言及は、単一のホストコンピュータで動作するアプリケーションプログラムに限定されない。逆に、ここでは、用語「コンピュータプログラム」及び「ソフトウェア」を、本明細書に記述する技術の態様を実行させるべく1個以上のプロセッサをプログラムするのに使用できる任意の種類のコンピュータ符号(例:アプリケーションソフトウェア、ファームウェア、マイクロコード、又はウェブサービス或いはSOA等の、又はプログラムインターフェースAPIを介した他の任意の形式のコンピュータ命令)に言及すべく、一般的な意味で用いている。コンピュータ手段又はリソースは特に、恐らくピアツーピア及び/又は可視化技術と合わせて、又はこれらに従い分散(「クラウドコンピューティング」)されていてよい。ソフトウェアコードは、単一の計算装置で提供されるか又は複数の計算装置(恐らく当該装置の環境でアクセス可能)に分散されているかに依らず、任意の適当なプロセッサ(例:マイクロプロセッサ)又はプロセッサコア或いは一組のプロセッサ上で実行することができる。セキュリティ技術(暗号のプロセッサ、認証、暗号化、チップカード等)を用いてもよい。