現在の位置: ホーム> 最新記事一覧> Nginx ロード バランシング 公平なアルゴリズムの原則と実践ガイド

Nginx ロード バランシング 公平なアルゴリズムの原則と実践ガイド

M66 2025-10-22

Nginx ロード バランシングとフェア アルゴリズムの概要

分散システムでは、負荷分散はサービスの安定性と高いパフォーマンスを確保するための重要なリンクです。高性能 Web サーバーおよびリバース プロキシ サーバーとして、Nginx はさまざまな負荷分散アルゴリズムをサポートしています。その中で、Fair アルゴリズムは重みベースの分散スケジューリング戦略です。

公正なアルゴリズムの原則

Fair アルゴリズムの中心的な考え方は、各サーバーの負荷が相対的にバランスを保つように、サーバーの重みに従ってリクエストを割り当てることです。実装手順は次のとおりです。

  • 各サーバーの重みに基づいてサーバー リストを生成します。
  • リクエストが到着すると、現在の重みが最も高いサーバーが処理のために選択されます。
  • リクエストの処理後、サーバーの重みから合計重みの最大公約数を減算します。
  • 更新されたサーバーリストは、次のリクエストの割り当てに使用されます。

この方法では、サーバーのパフォーマンスの違いに基づいてリクエストを合理的に割り当て、負荷分散を実現できます。

Nginx での Fair アルゴリズムの実装

Nginx はデフォルトでは直接の Fair アルゴリズムのサポートを提供しませんが、カスタム構成を通じて実現できます。次の例は、Nginx で公平アルゴリズムを構成する方法を示しています。

 http {
    上流のバックエンド {
        公平;
        サーバー backend1.example.com の重いみ = 3;
        サーバー backend2.example.com 重いみ = 2;
        サーバー backend3.example.com 重いみ = 1;
    }

    サーバー {
        80を匂いいてください。
        サーバー名前 example.com;

        位置/{
            proxy_pass http://バックエンド;
        }
    }
}

設定では、サーバーリストは上流ディレクティブを通じて定義され、各サーバーの重みはweightを通じて設定されます。重みが大きいサーバーは、より多くのリクエストを処理し、リソースを最大限に活用します。

Fair アルゴリズムのコード例

Fair アルゴリズムをより直観的に理解するために、Python 実装の例を以下に示します。

数学をインポート

サーバー = [
    {'名前前': 'backend1.example.com', '体重い': 3},
    {'名前前': 'backend2.example.com', '体重い': 2},
    {'名前前': 'backend3.example.com', '体重い': 1},
】

total_weight = sum(server['weight'] サーバー内部のサーバーの場合)
gcd = math.gcd(*[server['weight'] サーバー内部のサーバーの場合])

サーバー内部のサーバーの場合:
    サーバー['今の体重い'] = サーバー['体重い']

True の場合:
    best_server = なし
    ベストウェイト = 0

    サーバー内部のサーバーの場合:
        サーバー['今の体重い'] += サーバー['体重い']
        サーバー['current_weight'] > best_weightの場合:
            best_server = サーバー
            best_weight = サーバー['current_weight']

    best_server['current_weight'] -= total_weight

    print('リクエストの送信先: %s' % best_server['name'])

このコードでは、サーバーの現在の重みを計算することにより、リクエストを処理するために最も適切なサーバーが動的に選択され、負荷分散を実現するために割り当てのたびに重みが更新されます。

要約する

Fair アルゴリズムは、サーバーのパフォーマンスに基づいてリクエストを合理的に割り当て、システムの安定性と効率を向上させることができる重みベースの負荷分散戦略です。 Nginx 構成と簡単なコード例を通じて、開発者は公平アルゴリズムを柔軟に実装し、実際のサーバーのパフォーマンスに応じて重みを調整して、最適なシステム パフォーマンスを実現できます。