Microsoftは既存アプリケーションのクラウド移行を始めるためのベストプラクティス集、「reliable web app pattern」(RWA)を発表した。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Microsoftは2023年3月7日、既存アプリケーションのクラウド移行を始めるためのベストプラクティス集、「reliable web app pattern」(RWA)を発表した。
RWAは、Azure Well-Architected Frameworkをベースに構築されたベストプラクティス集だ。Microsoftによると、RWAは、低コストで価値の高い成果を得ることに焦点を当てた、幾つかのビジネスおよび技術的目標(セキュリティ、信頼性設計パターン、オペレーショナルエクセレンス、コスト最適化環境など)に関するガイダンスを提供するという。
Microsoftの公式ブログでは、アプリケーションの耐障害性とパフォーマンスを高めるために考慮すべきコード変更を以下のように紹介した。
クラウドのような分散システムで作業する場合、アプリケーションがエラーから確実に回復できるようにすることが重要だ。アプリケーションがサービスやネットワークリソースに接続しようとするときに発生する可能性のある過渡的な障害を予期する必要がある。
障害には、ネットワーク接続の瞬間的な喪失、ネットワークサービスの一時的な利用不能、サービスがビジー状態のときに発生するタイムアウトなどがある。このような過渡的な障害を予測し、適切に処理することで、アプリケーションの安定性と回復力を向上できる。
比較的簡単に実装できるパターンとしては、RetryパターンとCircuit-breakerパターンがある。
Retryパターンは、コードが呼び出そうとするサービスの一時的な中断を処理するための手法だ。このような中断、つまり一過性の障害は、数秒以内に解決することが期待できる。Retryパターンは、失敗したリクエストをサービスに再送することで、一過性の障害を処理する。再試行の間隔や、例外を発生させるまでの回数を設定することができる。
ほとんどのAzureサービスとそのクライアントSDKは、ビルトインのリトライメカニズムを備えている。このメカニズムを使用して、リトライパターンの実装を迅速化する必要がある。
以下は、Azure SQL DatabaseへのリクエストでRetryパターンを適用するEntity Framework Coreのビルトインメカニズムの例だ。
services.AddDbContextPool<ConcertDataContext>(options => options.UseSqlServer(sqlDatabaseConnectionString, sqlServerOptionsAction: sqlOptions => { sqlOptions.EnableRetryOnFailure( maxRetryCount: 5, maxRetryDelay: TimeSpan.FromSeconds(3), errorNumbersToAdd: null); }));
Entity Framework CoreのDbContext(この場合はConcertDataContext)を継承するクラスをASP.NET Coreの依存性注入コンテナに追加する際に、このようなコードを記述することがある。初期化オプションには、一過性のデータベースエラーが発生した場合、最大5回(maxRetryCount)再試行し、各試行間で3秒待つ(maxRetryDelay)ことを指定する仕組みが組み込まれている。
Circuit-breakerパターンはリトライパターンと併用する必要があります。Circuit-breakerパターンは、一過性でないエラーを処理する。このパターンを使用する目的は、アプリケーションがダウンしているサービスを繰り返し呼び出すのを防ぐことだ。
Circuit-breakerパターンは、Pollyで実装することができる。
アプリケーションは、データストアに保持された情報への繰り返しアクセスを改善するためにキャッシュを使用する。データストアからキャッシュにオンデマンドでデータをロードすると、パフォーマンスが向上し、キャッシュに保持されているデータと基礎となるデータストアのデータとの間で一貫性を維持するのに役立つ。
Copyright © ITmedia, Inc. All Rights Reserved.