9

負荷分散についてグーグル検索しましたが、見つけられるのは作業理論だけで、現時点では「簡単」な部分です。しかし、実装方法の例はありません。

負荷分散に関していくつか質問があります。

  1. 私はドメイン (example.com) を持っており、その背後には負荷分散サーバー (それをAと呼びましょう) があり、理論によれば、クライアントに A との接続を閉じ、B、サブに接続するように要求します。クライアントは、Web ブラウザーでアドレスバーに「example.com/page.html」が表示されなくなり、代わりに「B_ip_address/page.html」が表示されるようになりますか?

  2. シンプルなロードバランサーをゼロから実装するにはどうすればよいですか? 私の疑問はHTTP部分を対象としています。クライアントに送信する必要がある特定のメッセージまたはメッセージのセットがあり、クライアントが私から切断してサブサーバーに接続する必要がありますか?

  3. TCP/IP などの HTTP よりも下位レベルのプロトコルについては、ロード バランサー サーバーに接続したばかりで、要求を実行するために xxx.xxx.xxx.xxx に接続する必要があることをクライアントに伝える標準パケットはありますか? ?

  4. 最もよく使われる方法は何ですか?(1) クライアントが負荷分散サーバーに接続し、クライアントにサブサーバーの 1 つに直接接続するように要求する、または (2) 負荷分散サーバーがクライアントからサブサーバーへ、およびその逆のすべてのトラフィックのブリッジングを開始する透明な方法で?

したがって、質問 2、3、および 4 はロード バランシング プロトコルに関するものであり、最初の質問はドメイン名をロード バランサーに接続する方法と、根本的な結果についてです。

4

1 に答える 1

8

あなたのアプローチは、呼び出しを別のサーバーにリダイレクトすることによる一種の静的負荷分散です。以降のすべての呼び出しは、この別のサーバーを使用するか、リダイレクトのために再度ロード バランサーに送信されます。

実装は、システムの実装に依存します。ロード バランサーは、セッション状態のない独立した要求に最適です。それ以外の場合は、「エンド」サーバー間でセッション状態を同期する必要があります。または、共有セッション ストアを使用して、すべてのサーバーにセッション状態を提供します。

HTTP サーバーの負荷分散のためのシンプルで透過的なソリューションが存在します。nginx サーバーの負荷分散モジュールを使用できます ( http://nginx.org/en/docs/http/load_balancing.html )。これは、HTTP および HTTPS 要求に使用できます。また、負荷が増加した場合は、追加のサーバーで動的に拡張される場合があります。nginx 構成を編集して、サーバーを再起動する必要があります。これは、既存の接続に対して透過的です。また、nginx はドメインまたはホスト名の変更に問題を引き起こしません。

他のプロトコルには、クライアントとサーバーによるサポートが必要です。専用のデバイスがクライアントとサーバーの間にある場合、ロード バランシングは透過的に行われます。または、通信プロトコルが接続リダイレクトをサポートしている必要があります。

編集: ロード バランシングは、DNS ラウンド ロビンでも実装できます。各 DNS ルックアップ コールは、同じドメイン名の別の IP アドレスを返します。クライアントは IP を選択し、このサーバーに接続します。別のクライアントは次の IP を使用できます。アドレスバーの名前はいつも同じです。

例:

Non-authoritative answer:
Name:    www.google.com
Addresses:  2a00:1450:4001:80f::1010
      173.194.116.209
      173.194.116.210
      173.194.116.212
      173.194.116.211
      173.194.116.208

Non-authoritative answer:
Name:    www.google.com
Addresses:  2a00:1450:4001:80f::1010
      173.194.116.210
      173.194.116.212
      173.194.116.211
      173.194.116.208
      173.194.116.209

Non-authoritative answer:
Name:    www.google.com
Addresses:  2a00:1450:4001:80f::1010
      173.194.116.212
      173.194.116.211
      173.194.116.208
      173.194.116.209
      173.194.116.210

IP アドレスの範囲がローテーションします。ほとんどの HTTP ロード バランサーは、nginx やその他のリバース プロキシ実装のような透過的なロード バランサーとして機能します。リダイレクト ロード バランサーは、ローテクな実装だと思います。

TCP/IP はプロトコルではありません。これは、特定の通信プロトコルを実装してデータを転送するために使用されるトランスポート層です。一方、TCP/IP 自体はネットワーク コンポーネントのプロトコルです。しかし、アプリケーションではありません。https://en.wikipedia.org/wiki/OSI_modelを確認できます。

于 2015-07-28T18:53:39.550 に答える