永続性の落とし穴たち
データ指向アプリケーションデザイン p.245 レプリケーションと永続性 のコラムより
from トランザクション from DDIA
avashe.icon要するにここで言いたいのはストレージスタックのあらゆるところで永続性を失う可能性があるため、1つの仕組みに頼らず、様々なレベルで冗長性を持たせる仕組みを組みあわせなければならないということ
レプリカさえ増やしとけば大丈夫やろ→特定の入力に対してノードをクラッシュさせてしまうバグがソフトウェアに潜伏しておりまとめて死亡、リーダーレプリカのデータに不整合がありそれが検出できなくて汚染が広がり死亡...など
関連性のあるフォールトはすべてのレプリカをまとめて破壊し、メモリにしかないデータを失わせてしまう
関連性のあるフォールトとは、均一なシステムがまとめて死んでしまうような不具合のことで、停電や特定の入力に対してノードをクラッシュさせてしまうバグを指す
インメモリデータベースでもディスクへの書き込みが求められるのはそのため
非同期にレプリケーションされているシステムでは、リーダーが利用できなくなれば直近の書き込みは失われてしまう
フォロワーレプリカを最低1つの同期レプリケーションと1つ以上の非同期レプリケーションから構成する準同期レプリケーションを採用すれば、この問題を避けつつ非同期レプリケーションの利点をある程度受けられる
突然電源が切断されると、SSDは本来保証すべきことが保証できないことが知られている(fsyncの動作なども保証されない)
https://www.usenix.org/conference/fast13/technical-sessions/presentation/zheng
またディスクのファームウェアが悪さする事例もある
https://laur.ie/blog/2015/06/ssds-a-gift-and-a-curse/
https://www.algolia.com/blog/engineering/when-solid-state-drives-are-not-that-solid
ストレージエンジンとファイルシステムの間のやりとりは追跡が難しいバグに繋がることがあり、クラッシュ後ディスク上のファイルを破損させることがある
https://www.usenix.org/conference/osdi14/technical-sessions/presentation/pillai
https://utcc.utoronto.ca/~cks/space/blog/unix/FileSyncProblem
ディスク上のデータは検出されることなく徐々に破損していくことがある
https://www.usenix.org/conference/fast-08/analysis-data-corruption-storage-stack
データの整合性を走査し検出する仕組みがないと、壊れたままのデータがレプリケーション、バックアップされ、リストアやフェールオーバーが機能しなくなる可能性がある
運用開始後の4年間で30%-80%のSSDに少なくとも1つの不良ブロックが出たとする研究がある、また、磁器的なHDDは不良セクターの比率こそSSDより低いものの、完全な障害の発生率はSSDより上
https://www.usenix.org/conference/fast16/technical-sessions/presentation/schroeder
SSDは電源から切り離されると温度によっては数週間のうちにデータを失い始めることがある
https://blog.korelogic.com/blog/2015/03/24