翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
PERF04-BP04 ロードバランシングを使用して複数のリソースにトラフィックを分散する
トラフィックを複数のリソースやサービスに分散させ、ワークロードがクラウドの伸縮性を活用できるようにします。また、ロードバランシングを使用して暗号化ターミネーションをオフロードし、パフォーマンスと信頼性を向上させ、トラフィックを効率的に管理およびルーティングすることもできます。
一般的なアンチパターン:
-
ロードバランサーの種類を選択する際にワークロードの要件を考慮していない。
-
パフォーマンスの最適化のためにロードバランサー機能を活用していない。
-
ワークロードがロードバランサーなしで直接インターネットに公開されている。
-
既存のロードバランサーを介して、すべてのインターネットトラフィックをルーティングしている。
-
汎用TCPロードバランシングを使用し、各コンピューティングノードにSSL暗号化を処理させます。
このベストプラクティスを活用するメリット: ロードバランサーは、単一のアベイラビリティーゾーンまたは複数のアベイラビリティーゾーンにおけるアプリケーショントラフィックのさまざまな負荷を処理し、ワークロードの高可用性、自動スケーリング、効率的な使用を可能にします。
このベストプラクティスを活用しない場合のリスクレベル: 高
実装のガイダンス
ロードバランサーは、ワークロードのエントリポイントとして機能し、そこからコンピューティングインスタンスやコンテナなどのバックエンドターゲットにトラフィックを分散して使用率を改善します。
適切なロードバランサーの種類を選択することが、アーキテクチャを最適化するうえでの最初のステップとなります。まず、プロトコル (TCP、、HTTP、TLSまたは など WebSockets)、ターゲットタイプ (インスタンス、コンテナ、サーバーレスなど)、アプリケーション要件 (長時間実行接続、ユーザー認証、スティッキーなど)、配置 (リージョン、ローカルゾーン、Outpost、ゾーン分離など) などのワークロード特性を一覧表示します。
AWS は、ロードバランシングを使用するための複数のモデルをアプリケーションに提供します。Application Load Balancer はHTTP、 および HTTPSトラフィックのロードバランシングに最適で、マイクロサービスやコンテナなどの最新のアプリケーションアーキテクチャの配信をターゲットとした高度なリクエストルーティングを提供します。
Network Load Balancer は、極端なパフォーマンスが必要なTCPトラフィックのロードバランシングに最適です。超低レイテンシーを維持しながら 1 秒あたり数百万件ものリクエストを処理することができ、突発的、または変動しやすいトラフィックパターンを処理するために最適化されています。
Elastic Load Balancing
適切なロードバランサーを選択したら、ロードバランサーの機能を活用して、バックエンドが必要とするトラフィック処理のための労力を削減できます。
例えば、Application Load Balancer (ALB) と Network Load Balancer (NLB) の両方を使用して、SSL/TLS 暗号化オフロードを実行できます。これは、CPU集中的なTLSハンドシェイクがターゲットによって完了されるのを防ぎ、証明書管理を向上させる機会です。
ロードバランサーで SSL/TLS オフロードを設定すると、バックエンドに暗号化されていないトラフィックを配信し、バックエンドリソースを解放し、クライアントの応答時間を改善しながら、クライアントとの間でトラフィックを暗号化する責任が生じます。
Application Load Balancer は、ターゲットでサポートすることなく、HTTP/2 トラフィックを処理できます。この簡単な決定により、HTTP/2 はTCP接続をより効率的に使用するため、アプリケーションの応答時間を改善できます。
アーキテクチャを定義する際は、ワークロードのレイテンシー要件を考慮する必要があります。例えば、レイテンシーの影響を受けやすいアプリケーションがある場合、非常に低レイテンシーを実現する Network Load Balancer を使用するよう決定することができます。AWS Local Zones
レイテンシーの影響を受けやすいワークロードに関して考慮すべきもう 1 つの点は、クロスゾーン負荷分散です。クロスゾーン負荷分散を使用すると、各ロードバランサーノードは許可されたすべてのアベイラビリティーゾーン内の登録済みターゲットにトラフィックを分散します。
ロードバランサーと統合された自動スケーリングを使用します。パフォーマンス効率に優れたシステムの重要な側面の 1 つに、バックエンドリソースのサイズの適切な設定があります。これを実現するには、バックエンドターゲットリソースのロードバランサー統合を利用できます。Auto Scaling グループと統合したロードバランサーを使用することで、受信トラフィックに対応して、必要に応じてターゲットがロードバランサーに追加されたり削除されたりします。ロードバランサーは、コンテナ化されたワークロードのために Amazon ECS および Amazon EKS と統合することもできます。
実装手順
-
トラフィック量、可用性、アプリケーションのスケーラビリティなど、ロードバランシングの要件を定義します。
-
アプリケーションに適したロードバランサータイプを選択します。
-
HTTP/HTTPS ワークロードには Application Load Balancer を使用します。
-
Network Load Balancer は、 TCPまたは で実行される非HTTPワークロードに使用しますUDP。
-
両方の製品の機能を活用する場合は、両方の (ALB のターゲットとして) NLB
の組み合わせを使用します。例えば、 IPs の静的 を からのHTTPヘッダーベースのルーティングNLBとともに使用する場合やALB、HTTPワークロードを に公開する場合などですAWS PrivateLink。 -
ロードバランサーの完全な比較については、ELB「 製品比較
」を参照してください。
-
-
可能であれば SSL/TLS オフロードを使用します。
-
と統合されたApplication Load Balancer とNetwork Load Balancer の両方を使用して、HTTPS/TLS リスナーを設定しますAWS Certificate Manager
。 -
コンプライアンス上の理由から暗号化が必要な end-to-endワークロードもあります。この場合は、ターゲットで暗号化を許可する必要があります。
-
セキュリティのベストプラクティスについては、SEC「09-BP02 転送中の暗号化の強制」を参照してください。
-
-
適切なルーティングアルゴリズムを選択します ( のみALB)。
-
ルーティングアルゴリズムは、バックエンドターゲットの使用状況に変化をもたらし、パフォーマンスへの影響を左右します。例えば、 ALBには、ルーティングアルゴリズム の 2 つのオプションがあります。
-
最小未処理リクエスト: アプリケーションのリクエストの複雑性が異なる場合や、ターゲットの処理能力が異なる場合に、バックエンドターゲットへのロードバランシングを改善するために使用します。
-
ラウンドロビン: リクエストとターゲットが同様の場合、またはリクエストをターゲット間で均等に分散する必要がある場合に使用します。
-
-
クロスゾーンまたはゾーン分離を検討します。
-
レイテンシーの改善とゾーンの障害ドメイン対策として、クロスゾーンをオフ (ゾーン分離) で使用します。ではデフォルトでオフになっておりNLB、 ALBではターゲットグループごとにオフにできます。
-
可用性と柔軟性の向上のために、クロスゾーンをオンにします。デフォルトでは、 のクロスゾーンがオンになっておりALB、 ではNLBターゲットグループごとにオンにできます。
-
-
HTTP ワークロードのHTTPキープアライブを有効にします ( のみALB)。この機能を使用すると、ロードバランサーはキープアライブタイムアウトの有効期限が切れるまでバックエンド接続を再利用できるため、HTTPリクエストとレスポンスタイムが向上し、バックエンドターゲットのリソース使用率も低下します。Apache と Nginx でこれを行う方法の詳細については、「Apache を使用するための最適な設定とは」またはNGINX「」を参照してくださいELB。
-
ロードバランサーのモニタリングをオンにします。
-
Application Load Balancer および Network Load Balancer のアクセスログを有効にしてください。
-
考慮すべき主なフィールドALBは
request_processing_time
、、request_processing_time
、および ですresponse_processing_time
。 -
考慮すべき主なフィールドNLBは
connection_time
と ですtls_handshake_time
。 -
必要な際にログをクエリできるように準備を整えておきます。Amazon Athena を使用して、ALBログとNLBログの両方をクエリできます。
-
TargetResponseTime
の ALBなど、パフォーマンス関連のメトリクスのアラームを作成します。
-
リソース
関連ドキュメント:
関連動画:
関連する例: