企業が同時実行性の高い問題を解決する場合、通常、ソフトウェアとハードウェアという 2 つの処理戦略があります。ハードウェアでは、大量のリクエストを分散するためにロード バランサが追加されます。ソフトウェア側では、2 つのソリューションを追加できます。高い同時実行性のボトルネック: データベースと Web サーバー 解決策の中で、Web サーバーのフロント層に負荷を追加するために最も一般的に使用される解決策は、nginx を使用して負荷分散を実現することです。
1. ロードバランシングの役割
1. 転送機能
特定のアルゴリズム [重み付け、ポーリング] に従って、クライアント要求をさまざまなアプリケーション サーバーに転送し、単一サーバーへの負荷を軽減し、システムの同時実行性を高めます。
2. 障害の除去
ハートビート検出を使用して、アプリケーション サーバーが現在正常に動作できるかどうかを判断し、サーバーがダウンした場合は、リクエストが自動的に他のアプリケーション サーバーに送信されます。
3. リカバリの追加
(推奨学習: nginx チュートリアル)
障害が発生したアプリケーション サーバーが動作を再開したことが検出された場合、ユーザーリクエストを処理するチームに参加してください。
2. Nginx は負荷分散を実装します
また、2 つの Tomcat を使用して、ポート番号 8080 と 8081# を持つ 2 つのアプリケーション サーバーをシミュレートします。
##1. Nginx の負荷分散戦略Nginx のアップストリームは現在、分散アルゴリズムをサポートしています:1)、ポーリング - 順番に 1:1 処理リクエスト (デフォルト)
各リクエストは時系列に 1 つずつ異なるアプリケーション サーバーに割り当てられ、アプリケーション サーバーがダウンした場合は自動的に削除され、残りのアプリケーション サーバーは引き続きポーリングされます。2)、重み - 最大値を設定できます
重みを構成し、ポーリング確率を指定します。重みはアクセス率に比例します。これは、次の場合に使用されます。アプリケーションサーバーのパフォーマンスが平均的な状況では良くありません。3)、ip_hash アルゴリズム
各リクエストは、アクセスされた IP のハッシュ結果に従って割り当てられるため、各訪問者はアプリケーション サーバーへの固定アクセス権を持ち、セッションの共有問題を解決できます。 2. Nginx の負荷分散および分散戦略を構成する これは、アップストリーム パラメーターに追加されたアプリケーション サーバー IP の後に、次のような指定パラメーターを追加することで実現できます:upstream tomcatserver1 { server 192.168.72.49:8080 weight=3; server 192.168.72.49:8081; } server { listen 80; server_name 8080.max.com; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://tomcatserver1; index index.html index.htm; } }パス 上記の構成が実現できます Web サイト
8080.max.com にアクセスすると、proxy_pass アドレスが設定されているため、すべてのリクエストはまず nginx リバース プロキシ サーバーを通過し、リクエストが宛先ホストに転送されると、サーバーは tomcatsever1 のアップストリーム アドレスを読み取り、配布ポリシーを読み取り、tomcat1 の重みを 3 に設定します。これにより、nginx はほとんどのリクエストをサーバー 49 上の tomcat1 に送信します。ポート 8080; より小さい番号がサーバー 49 の tomcat1 (ポート 8080) に送信されます; tomcat2 は条件付き負荷分散を実現します。もちろん、この条件はサーバー 1 と 2 のハードウェア インデックス処理要求能力です。
upstream myServer { server 192.168.72.49:9090 down; server 192.168.72.49:8080 weight=2; server 192.168.72.49:6060; server 192.168.72.49:7070 backup; }1 のその他の設定) down は、前のサーバーが一時的に負荷に参加しないことを意味します2 ) Weightデフォルトは 1 です。重量が大きいほど、負荷の重量も大きくなります。 3) max_fails許可されるリクエスト失敗のデフォルト値は 1 です。最大数を超えると、proxy_next_upstream モジュールによって定義されたエラーが返されます。4) failed_timeout max_fails 回の失敗後の一時停止時間。 5) バックアップ 他のすべての非バックアップ マシンがダウンしているかビジー状態の場合、バックアップ マシンを要求します。したがって、このマシンの圧力は最も少なくなります。
3. Nginx を使用した高可用性
Web サイトの高可用性を実現することに加えて、同じサービスを公開し、負荷分散を追加するために n 台の複数のサーバーを提供することも意味します。サーバーはリクエストを分散して、各サーバーが高い同時実行性の下で比較的飽和したリクエストを処理できるようにします。同様に、負荷分散サーバーがハングアップした場合に後続のアプリケーション サーバーが中断され、動作できなくなることを防ぐために、負荷分散サーバーも高可用性である必要があります。 高可用性を実現するソリューション: 冗長性を追加します。上記の単一障害点を回避するには、n 個の nginx サーバーを追加します。4. 概要
要約すると、ロード バランシングは、さまざまなソフトウェア ソリューションであってもハードウェア ソリューションであっても、主に特定のルールに従って多数の同時リクエストを分散します。 . 異なるサーバーに処理させることで、特定のサーバーに対する瞬間的な負荷が軽減され、Web サイトの同時並行性が向上します。著者は、nginx がロード バランシングに広く使用されている理由は、その柔軟な構成によるものであると考えています。nginx.conf ファイルは、仮想サーバーを作成する nginx、リバース プロキシ サーバー、またはこの記事で紹介する nginx のいずれであっても、ほとんどの問題を解決します。負荷分散は、ほとんどの場合、この構成ファイルで実行されます。サーバーは nginx のセットアップと実行のみを担当します。さらに、軽量であり、より良い結果を得るために多くのサーバー リソースを占有する必要はありません。以上が負荷分散を実現するために Nginx を構成する (写真)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。