翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
静的 .NET Framework アプリケーションの動的スケーリングをサポートする
概要:
アプリケーションにクラウドを使用する主な利点の 1 つは、伸縮性、つまり需要に基づいてコンピューティングをスケールインまたはスケールアウトする機能です。これにより、ピーク時の使用量に合わせてプロビジョニングするのではなく、必要なコンピューティングキャパシティに対してのみ支払うことができます。オンライン小売業者が通常の何倍ものトラフィック (例えば、数分以内に数千パーセント
レガシー .NET ウェブアプリケーション (IIS で実行されている ASP.NET Framework アプリケーションなど) をクラウドに持ち込む場合、アプリケーションのステートフルな性質上、負荷分散されたサーバーファームを迅速にスケーリングすることは困難または不可能な場合があります。ユーザーセッションデータは、通常、ASP.NET セッション状態
これは運用上困難であることが判明しています。キャパシティを増やす必要がある場合は、意図的にサーバーをプロビジョニングして追加する必要があります。これは時間のかかるプロセスになる場合があります。パッチ適用や予期しない障害が発生した場合にノードをサービス停止にすると、エンドユーザーエクスペリエンスに問題が発生し、影響を受けるノードに関連付けられているすべてのユーザーの状態が失われる可能性があります。これにより、うまくいっても、ユーザーは再度ログインする必要が出てきます。
ASP.NET アプリケーションのセッション状態を一元化し、Auto Scaling ルールをレガシー ASP.NET アプリケーションに適用することで、クラウドの伸縮性を活用でき、場合によってはアプリケーションの実行時にコスト削減を活用できます。例えば、コンピューティングのスケーラビリティによりコストを削減できますが、リザーブドインスタンスの使用量
2 つの一般的な手法には、セッション状態プロバイダーとして Amazon DynamoDB
次の図は、セッション状態プロバイダーとして DynamoDB を使用するアーキテクチャを示しています。
次の図は、セッション状態プロバイダーとして ElastiCache (Redis OSS) を使用するアーキテクチャを示しています。
コストへの影響
本番アプリケーションのスケーリングの利点を判断するには、実際の需要をモデル化することをお勧めします。このセクションでは、サンプルアプリケーションをモデル化するために次のように仮定します。
-
ローテーションに追加および削除されるインスタンスは同一であり、インスタンスサイズのバリエーションは導入されません。
-
アプリケーションの高可用性を維持するために、サーバー使用率が 2 つのアクティブサーバーを下回ることはありません。
-
サーバーの数は、トラフィックに合わせて直線的にスケールされます (つまり、トラフィックが 2 倍になると、コンピューティングも 2 倍必要になります)。
-
トラフィックは 1 か月にわたって 6 時間単位でモデル化され、1 日内の変動と、1 日の 10 倍のトラフィックという 1 回の異常なトラフィックピーク (プロモーションセールなど) が含まれます。週末トラフィックは、基本使用率に基づいてモデル化されます。
-
夜間トラフィックは基本使用率でモデル化され、平日トラフィックは 4 倍の使用率でモデル化されます。
-
リザーブドインスタンスの料金では、1 年間の前払いなしの料金が使用されます。通常の日中の料金ではオンデマンド料金を使用し、バースト需要ではスポットインスタンス料金を使用します。
次の図は、このモデルがピーク時の使用のためにプロビジョニングするのではなく、.NET アプリケーションで伸縮性を活用する方法を示しています。これにより、約 68% のコスト削減になります。
セッション状態ストレージメカニズムとして DynamoDB を使用する場合は、次のパラメータを使用します。
Storage: 20GB Session Reads: 40 million Session Writes: 20 million Pricing Model: On demand
このサービスの推定月額コストは、1 か月あたり約 35.00 USD です。
セッション状態ストレージメカニズムとして ElastiCache (Redis OSS) を使用する場合は、次のパラメータを使用します。
Number of Nodes: 3 Node size: cache.t4g.medium Pricing Model: 1y reserved
このサービスの推定月額コストは、1 か月あたり約 91.00 USD です。
コスト最適化の推奨事項
最初のステップは、レガシー .NET アプリケーションにセッション状態を実装することです。ステートストレージメカニズムとして ElastiCache を使用している場合は、 AWS デベロッパーツールブログの ASP.NET セッションストアとして ElastiCache
アプリケーションが最初に InProc セッションを使用する場合は、セッションに保存する予定のすべてのオブジェクトをシリアル化できることを確認してください。これを行うには、SerializableAttribute 属性を使用して、インスタンスがセッションに保存されるクラスを修飾します。例えば、次のようになります。
[Serializable()] public class TestSimpleObject { public string SessionProperty {get;set;} }
さらに、.NET MachineKey は使用中のすべてのサーバー間で同じである必要があります。これは通常、インスタンスが共通の Amazon マシンイメージ (AMI) から作成された場合です。例えば、次のようになります。
<machineKey validationKey="some long hashed value" decryptionKey="another long hashed value" validation="SHA1"/>
ただし、ベースイメージが変更された場合は、同じ .NET マシンイメージ (IIS またはサーバーレベルで設定可能) で設定されていることを確認することが重要です。詳細については、Microsoft ドキュメントの「SystemWebSectionGroup.MachineKey Property
最後に、スケーリングイベントに応じて Auto Scaling グループにサーバーを追加するメカニズムを決定する必要があります。これを行うには、いくつかの方法があります。Auto Scaling グループの EC2 インスタンスに .NET Framework アプリケーションをシームレスにデプロイするには、次の方法をお勧めします。
-
EC2 Image Builder
を使用して、完全に設定されたサーバーとアプリケーションを含む AMI を設定します。その後、この AMI を使用して、Auto Scaling グループの起動テンプレートを設定できます。 -
AWS CodeDeploy
を使用してアプリケーションをデプロイします。CodeDeploy では、Amazon EC2 Auto Scaling と直接統合できます。これにより、アプリケーションのリリースごとに新しい AMI を作成する代わりに別の方法が提供されます。
その他のリソース
-
「Create images with EC2 Image Builder」(EC2 Image Builder ドキュメント)
-
Visual Studio Team Services AWS CodeDeploy を使用した .NET ウェブアプリケーションのデプロイ
(AWS 開発者ツールブログ)