概要
- AWS は信頼できるサービス提供のため、 システムの正確性 を最重視
- TLA+やP言語 など形式手法の導入で、開発初期にバグ発見・性能最適化を実現
- 軽量形式手法 (プロパティベーステスト、ファジング等)も積極活用
- Fault Injection Service で障害注入テストを顧客にも提供
- メタスタビリティ など新たなシステム障害への対応も進展
AWSにおける形式手法の活用
- AWS では、信頼性・セキュリティ・耐久性・可用性のために システムの正確性 を重視
- TLA+ の利用により、開発初期で伝統的なテストでは見逃すバグを発見
- 正確性担保により、 積極的な性能最適化 も安心して実施可能
- 以前は ユニットテスト 中心だったが、今は 形式手法 を開発工程に統合
- 形式手法の活用で 開発速度 と コスト効率 を両立
TLA+とP言語の導入
- TLA+ は抽象度が高く、 数学的記述 が特徴
- 一部エンジニアには難解だったため、より親しみやすい P言語 を導入
- P言語 は状態機械ベースで、 分散システム設計 に適合
- Amazon S3やDynamoDB、Aurora等の設計検証に活用
- PObserve ツールで、テスト・本番両方で設計仕様との整合性を検証
軽量形式手法の実践
- プロパティベーステスト をAmazon S3のShardStore開発で活用
- 正確性仕様・カバレッジ指向ファジング・障害注入・最小化を組み合わせ
- 決定的シミュレーションテスト で分散システムの複雑な動作を制御して検証
- スケジューラ拡張で順序のファジングや全探索も可能
- shuttleやturmoil等のOSSとして公開
- 継続的ファジング でAuroraのデータシャーディング機能を検証
- SQLクエリやトランザクションを自動生成し、非シャーディング版と比較
- 障害注入と組み合わせて、原子性・一貫性・分離性も検証
Fault Injection Service(FIS)の提供
- 2021年 に Fault Injection Service をローンチ
- APIエラーやI/O停止等の障害を 本番環境 にも注入可能
- 顧客自身がレジリエンスや可用性を検証できる環境を提供
- Prime Day準備で733件のFISテストを実施
- 障害注入と形式仕様を組み合わせることで、 バグ発見力 を強化
メタスタビリティと新たな障害形態への対応
- 一度異常状態に陥ると通常の操作では回復しない メタスタビリティ障害 が注目
- 負荷増加→輻輳→グッドプット低下→回復不能の流れが典型
- 多くの分散システムで、タイムアウト・リトライ等で発生しやすい
- 従来の「安全性」「活性」だけでは捉えきれない新たなシステム挙動への対応が必要
まとめ
- AWS は形式手法と軽量形式手法の両輪で、 正確性・性能・開発速度 を高次元で両立
- P言語 や FIS 等の独自ツール・サービスで、社内外のエンジニアリングを支援
- 今後も メタスタビリティ 等の新しい課題に積極的に取り組む方針