質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

ロードバランサー

ロードバランサー【負荷分散装置】は、複数のサーバへアクセス要求を分散する装置です。 要求を分散することで各サーバが快適な応答速度を保つことを目的としており、 アクセスの多い大規模サイト等は、この装置により 複数のサーバに負荷を分散する事で安定な運用が可能です。

Q&A

解決済

1回答

8070閲覧

ロードバランサーのコネクションと、セッションについて

nagi2011

総合スコア17

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

ロードバランサー

ロードバランサー【負荷分散装置】は、複数のサーバへアクセス要求を分散する装置です。 要求を分散することで各サーバが快適な応答速度を保つことを目的としており、 アクセスの多い大規模サイト等は、この装置により 複数のサーバに負荷を分散する事で安定な運用が可能です。

1グッド

0クリップ

投稿2020/03/29 06:01

ロードバランサーのコネクションと、セッションが理解できていないため、ご教示いただけないでしょうか。
どの製品についてというよりも、一般的な動作についてです。

例えば、クライアントから、Webサーバ宛てに何らかのデータ更新依頼があった場合、

①クライアントからLBへ接続
→この時点で、コネクションが生まれる?
(セッションとしては何をもつ?)
②LBからWebサーバへ接続
③WebサーバからLBにレスポンスを戻す
④LBからクライアントへレスポンスを戻す
→この時点で、コネクションが切断される?
(セッションも同時に消える?)

クライアントから複数の同時アクセスが発生した場合、
そのアクセス1つ毎に、コネクションと、セッションが生まれると考えて良いのでしょうか。

mit0223👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず用語を定義しましょう。

コネクション:TCPの接続を指します。一般的にはクライアントからサーバへの接続になりますが、ロードバランサからWebサーバへもコネクションがはられます。

セッション:Webサーバとブラウザの間での接続維持情報。一般的には、サーバ側でセッションオブジェクトにユーザIDなどの情報を保持し、そのIDをCookie に紐づけてクライアント側に覚えさせる。

この言葉の定義に従うと

①クライアントからLBへ接続

→この時点で、コネクションが生まれる?
(セッションとしては何をもつ?)

はい、クライアントからLBへのコネクションが生まれます。セッションはまだありません。

②LBからWebサーバへ接続

①のあと、接続がすぐに行われるわけではありません。クライアントから最初のリクエストが送られてきてから LBからWebサーバへの接続が行われます。
というのは、LBの仕様でリクエストパケットの内容に応じて、複数の Webサーバのうち、どこに接続するのかを決める場合があるからです。

また、LBからWebサーバへのコネクションは他のクライアントが利用していたものが再利用される場合があります。その場合は、新たに接続する必要はありません。

③WebサーバからLBにレスポンスを戻す

このとき、HTTP 1.1 ではコネクションをすぐに切らずに一定時間維持します。そして、そのコネクションが再利用されずに一定時間が経過すると破棄されます。

④LBからクライアントへレスポンスを戻す

→この時点で、コネクションが切断される?

このときも、HTTP 1.1 ではコネクションをすぐに切らずに一定時間維持します。そして、そのコネクションが再利用されずに一定時間が経過すると破棄されます。

クライアントから複数の同時アクセスが発生した場合、

そのアクセス1つ毎に、コネクションと、セッションが生まれると考えて良いのでしょうか。

いえ、クライアントからLBへのコネクションとLBからWebサーバへのコネクションは1対1に対応するものではありません。一般的にはクライアントからLBへのコネクションの数よりもLBからWebサーバへのコネクションのほうが少ないです。
これによって、Webサーバのスレッド数が少なくてもクライアントからの複数の同時アクセスに対応しやすくなります。
たとえば、1万台のクライアントから同時にアクセスがあってもロードバランサのキューに滞留させ、Webサーバは100個くらいのスレッドで処理させることが可能です。この場合、LBからWebサーバへの接続が再利用されるので、コンテキストスイッチが減少し、全体のスループット性能が上がります。

つまり、LBがクライアントからの接続を受け付けて待ち行列を管理してくれるので Webサーバはビジネスロジックに専念できるというわけです。

Webサーバのセッションはアプリケーションにログインするときなどに生成されます。セッション情報をWebサーバ側に保持する場合は、LBが異なるWebサーバにリクエストを振り分けると困るので、スティッキーセッションなどの技術を使用して、一つのクライアントは毎回同じWebサーバにリクエストが送られるようにします。

単なるホームページの配信などステートレスなアプリであれば、セッションはありません。

投稿2020/03/29 08:27

編集2020/03/29 08:30
mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nagi2011

2020/03/29 08:31

非常に丁寧に分かりやすく説明して頂き、ありがとうございました。 おかげさまで、あやふやな知識が、正しく整理できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問