負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現されます。ハードウェア デバイスを通じて実現される負荷分散は、効果が高く、効率が高く、パフォーマンスが安定していますが、コストが比較的高くなります。ソフトウェアを通じて実装される負荷分散は、主に分散アルゴリズムの選択とプログラムの堅牢性に依存します。負荷分散アルゴリズムにも多くの種類があり、最も一般的なものは、静的負荷分散アルゴリズムと動的負荷分散アルゴリズムの 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. テストデータ2. ヌル値による不便3. スペース、空の値、null をどのように判断すれば...
効果は以下のとおりです。 コードは次のとおりです (クリックすると展開してソース コードが表示されま...
目次1. サーバーの状態を確認します。 2. ルートパスワードを変更します。 3. mysqlser...
目次1. 需要背景2. 最適化計画3. 具体的な実施3.1 フロントエンドコード3.2 背景コード4...
目次挿入バッファとは何ですか?挿入バッファのトリガー条件は何ですか?なぜ一意のインデックスにできない...
この記事では主に、リクエストを転送したり、静的リソース ファイルにアクセスしたりする nginx の...
サイト上のページを表示するためのリクエストがサーバーに送信されると(たとえば、ユーザーがブラウザでペ...
1. 背景Youzan の各 OLTP データベース インスタンスには、実行時間が特定のしきい値を超...
この記事では、トークンログイン認証を実装するためのVUEの具体的なコードを例として紹介します。具体的...
負荷分散を理解するには、まずフォワード プロキシとリバース プロキシを理解する必要があります。注記:...
この記事では、例を使用して、MySQL で複数テーブルの関連統計を実装する方法について説明します。ご...
「私たちは次の一連のモバイル製品を HTML5 で作成しています。」 「ええ、最近は多くの人が Ap...
HTML で CSS を使用する 3 つの方法: 1. インラインスタイル: 要素のスタイル属性を通...
この記事では、参考までに、虫眼鏡のJavaScriptオブジェクト指向実装の具体的なコードを紹介しま...
この記事の例では、ボールのスライドとクロスの効果を実現するためのVueの具体的なコードを共有していま...