## 定義 データを k 個のデータシャードと m 個のパリティシャードに分割し、任意の k 個のシャードがあればデータを復元できるようにする前方誤り訂正技法。k-of-(k+m) 符号とも表現される。ストレージシステムでは冗長性の確保に広く使われ、レプリケーション(n 個の完全コピー)に比べてストレージオーバーヘッドを大幅に削減できる。(Source: 一般的な定義; [[@2023__ATC__On-demand Container Loading in AWS Lambda]]) ## キャッシュシステムでの応用 通常イレイジャーコーディングはストレージの耐障害性確保に使われるが、AWS Lambda の L2 キャッシュでは**テールレイテンシ削減**のために使っている点が特徴的である([[@2023__ATC__On-demand Container Loading in AWS Lambda]])。 **Lambda の 4-of-5 スキーム**: - キャッシュミス時: ワーカーがオリジン(S3)からチャンクを取得後、5 本のイレイジャー符号化ストライプを 5 ノードに分散アップロード - キャッシュヒット時: 5 ノード全てにリクエストを送り、最初に届いた 4 ストライプで即座に再構成(残り 1 つの遅延・障害は無視) - ストレージオーバーヘッド: 25%(5/4 = 1.25x) - リクエスト数増加: 25%(5 リクエスト / 4 必要なストライプ) **EC-Cache との類似**: EC-Cache (OSDI 2016, Rashmi et al.) は同様の発想をクラスタキャッシュに適用した先行研究。 **レプリケーションとの対比**: | 手法 | テールレイテンシ | ストレージコスト | ヒット率低下(ノード障害時) | |------|----------------|----------------|--------------------------| | レプリケーション(n=2) | 良好 | 2x | あり(該当ノードのデータ) | | 4-of-5 イレイジャーコーディング | 良好 | 1.25x | なし(k+1 ノードが稼働していれば復元可能) | **定常作業(Constant Work)との関係**: 再試行(retry)に依存するテールレイテンシ対策はメタ安定障害モードを誘発する。イレイジャーコーディングは成功時と失敗時で同じ量の作業(5 ノードへのリクエスト)を行うため、この問題を回避する。[[メタ安定障害]]参照。 ## 横断的知見 - イレイジャーコーディングをキャッシュシステムのテールレイテンシ削減に使うのは EC-Cache (OSDI'16) と Lambda が代表例。ストレージ(S3・HDFS 等)での耐障害性確保とは目的が異なる点が興味深い。(Source: [[@2023__ATC__On-demand Container Loading in AWS Lambda]]) - 1000 チャンクを取得する起動では、キャッシュの 99.9 パーセンタイルレイテンシを 63% の確率で経験する。このことから、単一ノードの高速化だけでなくシステムレベルのテール管理が重要になる。(Source: [[@2023__ATC__On-demand Container Loading in AWS Lambda]]) ## 未解決の問い - k-of-(k+m) のパラメータ選択(k と m の比率)はどのように最適化するか?Lambda は 4-of-5 を選んでいるが、異なる障害モデルや負荷パターンで最適値は変わるか? - イレイジャーコーディングのパリティ計算コスト(Lambda では AVX/NEON で 10x 高速化が必要だった)は他のシステムでも課題になるか? ## 関連 - [[@2023__ATC__On-demand Container Loading in AWS Lambda]] — L2 キャッシュでの 4-of-5 実装の詳細 - [[コンテナ起動高速化]] — テールレイテンシが問題になる文脈 - [[メタ安定障害]] — 再試行に依存しないための定常作業原則 ## 出典 - Rashmi et al. "EC-Cache: Load-Balanced, Low-Latency Cluster Caching with Online Erasure Coding." OSDI 2016. - Brooker et al. "On-demand Container Loading in AWS Lambda." USENIX ATC 2023.