負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現されます。ハードウェア デバイスを通じて実現される負荷分散は、効果が高く、効率が高く、パフォーマンスが安定していますが、コストが比較的高くなります。ソフトウェアを通じて実装される負荷分散は、主に分散アルゴリズムの選択とプログラムの堅牢性に依存します。負荷分散アルゴリズムにも多くの種類があり、最も一般的なものは、静的負荷分散アルゴリズムと動的負荷分散アルゴリズムの 2 つのカテゴリに分類されます。静的アルゴリズムは実装が比較的簡単で、一般的なネットワーク環境で比較的良好な結果を達成できます。主に、一般的なポーリング アルゴリズム、比率ベースの加重ポーリング アルゴリズム、および優先度ベースの加重ポーリング アルゴリズムが含まれます。動的負荷分散アルゴリズムは、より複雑なネットワーク環境において、より適応性が高く、効果的です。主なものとしては、タスク量に基づく最小接続優先度アルゴリズム、パフォーマンスに基づく最速応答優先度アルゴリズム、予測アルゴリズム、および動的パフォーマンス割り当てアルゴリズムがあります。 ネットワーク負荷分散技術の一般的な原則は、特定の分散戦略を使用してネットワーク負荷をネットワーク クラスターの各オペレーティング ユニットに均等に分散し、単一の高負荷タスクを複数のユニットで共有して並列処理したり、大量の同時アクセスやデータ トラフィックを複数のユニットで共有して個別に処理したりすることで、ユーザーの待機応答時間を短縮することです。 Nginx サーバーの負荷分散構成Nginx サーバーは、静的な優先度ベースの重み付けポーリング アルゴリズムを実装しています。使用される主な構成は、proxy_pass ディレクティブとupstream ディレクティブです。これらの内容は実際には非常に理解しやすいです。重要な点は、Nginx サーバーの構成が柔軟で多様であることです。負荷分散を構成しながら他の機能を合理的に統合して、実際のニーズを満たす構成ソリューションを形成する方法。 以下は基本的な例の抜粋です。もちろん、すべての構成状況を網羅することは不可能です。議論の出発点として役立つことを願っています。同時に、実際の適用プロセスでは、全員が要約してさらに蓄積することも必要です。設定時に注意が必要なポイントはコメントとして追加されます。 構成例1: すべてのリクエストに対して一般的なラウンドロビン負荷分散ポリシーを実装する次の例スニペットでは、バックエンド サーバー グループ内のすべてのサーバーの優先度がデフォルトの weight=1 に設定されており、一般的なポーリング戦略に従って順番に要求タスクを受信します。この構成は、Nginx サーバーの負荷分散を実装するための最も簡単な構成です。 www.myweb.name へのすべてのリクエストは、バックエンド サーバー グループ間で負荷分散されます。サンプルコードは次のとおりです。 ... アップストリームバックエンド #バックエンドサーバーグループを構成する { サーバー 192.168.1.2:80; サーバー 192.168.1.3:80; サーバー 192.168.1.4:80; #デフォルトの重み=1 } サーバ { 聞く 80; サーバー名 www.myweb.name; インデックス index.html index.htm; 位置 / { proxy_pass http://backend; prox_set_header ホスト $host; } ... } 設定例2: すべてのリクエストに対して重み付けラウンドロビン負荷分散を実装する「構成例 1」と比較すると、この例のフラグメントでは、バックエンド サーバー グループ内のサーバーに異なる優先度レベルが割り当てられ、重み変数の値はポーリング戦略の「重み」になります。このうち、192.168.1.2:80 はレベルが最も高く、クライアントからの要求を最も少なく受信して処理するサーバーです。192.168.1.4:80 はレベルが最も低く、クライアントからの要求を最も少なく受信して処理するサーバーです。192.168.1.3:80 は上記 2 つの中間です。 www.myweb.name へのすべてのリクエストは、バックエンド サーバー グループ内で重み付けされて負荷分散されます。サンプルコードは次のとおりです。 ... アップストリームバックエンド #バックエンドサーバーグループを構成する { サーバー 192.168.1.2:80 重み=5; サーバー 192.168.1.3:80 重み=2; サーバー 192.168.1.4:80; #デフォルトの重み=1 } サーバ { 聞く 80; サーバー名 www.myweb.name; インデックス index.html index.htm; 位置 / { proxy_pass http://backend; prox_set_header ホスト $host; } ... } 構成例3: 特定のリソースの負荷分散この例のスニペットでは、プロキシ サーバーのグループを 2 つ設定します。1 つは「videobackend」という名前で、ビデオ リソースに対するクライアント要求の負荷分散に使用され、もう 1 つはファイル リソースに対するクライアント要求の負荷分散に使用されます。 「http://www.mywebname/video/*」へのすべてのリクエストはビデオバックエンド サーバー グループに分散され、「http://www.mywebname/file/*」へのすべてのリクエストはファイルバックエンド サーバー グループに分散されます。この例は、一般的な負荷分散を実装するための構成を示しています。重み付け負荷分散の構成については、「構成例 2」を参照してください。 location /file/ {......} ブロックでは、リクエスト ヘッダーの「Host」、「X-Real-IP」、「X-Forwareded-For」ヘッダー フィールドにそれぞれクライアントの実際の情報を入力します。これにより、バックエンド サーバー グループが受信したリクエストには、Nginx サーバー情報ではなく、クライアントの実際の情報が保持されます。サンプルコードは次のとおりです。 ... アップストリームビデオバックエンド #バックエンドサーバーグループ1を構成する { サーバー 192.168.1.2:80; サーバー 192.168.1.3:80; サーバー 192.168.1.4:80; } アップストリームファイルバックエンド #バックエンドサーバーグループ2を構成する { サーバー 192.168.1.5:80; サーバー 192.168.1.6:80; サーバー 192.168.1.7:80; } サーバ { 聞く 80; サーバー名 www.myweb.name; インデックス index.html index.htm; 場所 /ビデオ/ { proxy_pass http://videobackend; #バックエンドサーバーグループ1を使用する prox_set_header ホスト $host; ... } 場所 /file/ { proxy_pass http://filebackend; #バックエンドサーバーグループ2を使用する #クライアントの実際の情報を保持 prox_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ... } } 設定例4: 異なるドメイン名の負荷分散この例のスニペットでは、異なるドメイン名の要求を受信し、これらの要求に対して負荷分散を実行するために、2 つの仮想サーバーと 2 セットのバックエンド プロキシ サーバー グループを設定します。クライアント要求ドメイン名が「home.myweb.name」の場合、サーバー server1 がそれを受信し、負荷分散のために homebackend サーバー グループに転送します。クライアント要求ドメイン名が「bbs.myweb.name」の場合、サーバー server2 がそれを受信し、負荷分散のために bbsbackend サーバー レベルに転送します。これにより、異なるドメイン名の負荷分散が実現されます。 2 つのバックエンド サーバー グループのうちの 1 つ、サーバー 192.168.1.4:80 が共有されていることに注意してください。クライアント要求に問題が発生しないようにするには、2 つのドメイン名の下にあるすべてのリソースをサーバーに展開する必要があります。サンプルコードは次のとおりです。 ... アップストリーム bbsbackend #バックエンドサーバーグループ 1 を構成する { サーバー 192.168.1.2:80 重み=2; サーバー 192.168.1.3:80 重み=2; サーバー 192.168.1.4:80; } アップストリームホームバックエンド #バックエンドサーバーグループ2を構成する { サーバー 192.168.1.4:80; サーバー 192.168.1.5:80; サーバー 192.168.1.6:80; } #サーバー1の設定を開始 サーバ { 聞く 80; server_name home.myweb.name; インデックス index.html index.htm; 位置 / { proxy_pass http://homebackend; prox_set_header ホスト $host; ... } ... } #サーバー2の設定を開始 サーバ { 聞く 80; サーバー名 bbs.myweb.name; インデックス index.html index.htm; 位置 / { proxy_pass http://bbsbackend; prox_set_header ホスト $host; ... } ... } 構成例5: URL書き換えによる負荷分散の実装まず、例 1 に基づいて変更された具体的なソース コードを見てみましょう。 ... アップストリームバックエンド #バックエンドサーバーグループを構成する { サーバー 192.168.1.2:80; サーバー 192.168.1.3:80; サーバー 192.168.1.4:80; #デフォルトの重み=1 } サーバ { 聞く 80; サーバー名 www.myweb.name; インデックス index.html index.htm; 場所 /file/ { 最後に ^(/file/.*)/media/(.*)\.*$) $1/mp3/$2.mp3 を書き換えます。 } 位置 / { proxy_pass http://backend; prox_set_header ホスト $host; } ... } 「構成 1」と比較すると、このサンプル フラグメントでは、「/file/」を含む URI の URL 書き換え機能が追加されます。たとえば、クライアントが要求した URL が「http://www.myweb.name/file/downlaod/media/1.mp3」の場合、仮想サーバーはまず場所の file/{......} ブロックを使用して、バックエンド サーバー グループに転送し、負荷分散を実現します。このように、URL 書き換え機能による負荷分散を簡単に実装できます。この構成スキームでは、目的の効果を得るために、書き換え命令内の最後のタグとブレーク タグの違いを明確に理解する必要があります。 上記の 5 つの構成例は、さまざまな状況下で Nginx サーバーに負荷分散構成を実装する基本的な方法を示しています。 Nginx サーバーの機能は構造的に増分的であるため、これらの構成に基づいて、Web キャッシュ、Gzip 圧縮テクノロジ、ID 認証、権限管理などの機能を継続的に追加できます。同時に、upstream ディレクティブを使用してサーバー グループを構成すると、各ディレクティブの機能を最大限に活用して、ニーズを満たし、効率的で安定した、機能が豊富な Nginx サーバーを構成できます。 上記は、Nginx ロード バランシングとは何か、そしてそれをどのように設定するかについての詳細です。Nginx ロード バランシングの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Vue でのルータービューコンポーネントの使用に関する詳細な説明
>>: サブセットかどうかを判断するためのMySQLメソッドの手順
1. 今日の午後、コースの要件により、Ubuntu で FTP サーバーを設定する実験を行う必要が...
退屈だったので、ループに関する簡単な演習をいくつかまとめてみました。JS を学び始めたばかりの方に役...
序文この記事では、私が手動で実装したフロントエンドの一般的な SMS 認証コード入力コンポーネントと...
目次1. バックグラウンドで実行されるジョブ2. 信号を使用してプロセスを制御する基本的なプロセス管...
この記事では、優れた Web ページのカラー マッチングの事例を 20 件集めて紹介します。これらの...
目次問題の概要問題の再現問題の拡大結論は問題の概要今日、仕事中に、DBA が突然、SQL に暗黙的な...
目次Samba サーバーの紹介Samba サーバー コンポーネントSamba サーバー関連の設定ファ...
目次1. MySQL の時刻型2. タイムゾーンを確認する3. 不正な時間値4. 厳密モード5. 事...
質問: int(1) と tinyint(1) の違いは何ですか?このような設計では、いずれにしても...
コードをコピーコードは次のとおりです。 <iframe id="myFrameId&...
目次MySQLデータベースの名前を変更する方法最初の方法: データベースの名前を変更することは非推奨...
目次問題の説明1. 基本的な解決策2. 中間的な解決策3. 高度なソリューション4. ハードコアソリ...
目次1. ワークフローを実行する2. ミラーリングの基本コマンド1. ワークフローを実行するDock...
ウェブサイトやサービスのパフォーマンスは、データベースの設計(適切な言語開発フレームワークを選択した...
効果を直接確認するために、リロード、左を閉じる、右を閉じる、その他の機能を閉じるなどの右クリック メ...