最近の投稿
人気のページと投稿
Twitter アップデート
- 変にGbEにせずに100M NICにしよう 11 hours ago
- むかしあんなに沢山あったカニは捨てたんだよな。。。 12 hours ago
- ビックカメラのPCIにぶっさすNICが売っているのでしょうか。面倒でもアキバに行った方がいい気もしますが、明日荷物があんのよね。。 12 hours ago
- 今日買ってくるんだった。 12 hours ago
- 誰かNICあまってないかな。。PCIのやつ。。 12 hours ago
AWS, Content Delivery Network and Debian
鯖管のメモ帳: AWSのELBでHealthyHostCountが0になるという記事の中で
■AWSのELBとApacheを使う際の注意点
・Timeoutは120以上が推奨
・ApacheのKeepAliveは有効にすべし。ELBとの接続効率があがる。
という形ですでにやるべきことは書いてあるのが、なぜそうなるか。。(いそがしい人は後は読まなくてok!)
根本的な理由としては、ELBはTCPを単にリレーしているのではなくて、アプリケーションレイヤのプロキシであることによるものが大きい。ELBはバックエンドのEC2との間で無通信の場合でも60秒はセッションを維持する。
ELBはTCP Persistent Connectionを提供し、webサーバとの間のTCPセッションをつかいまわすことによってTCPのハンドシェイク時間を削減して高速化している。
webサーバのTimeoutを60秒より短かくするとどうなるか。どうかするとあわれなELBはwebサーバから切られたことを知らず、TCPセッションを使おうとして失敗することもある。折角ハンドシェイクをとばして高速化できるチャンスを逃してしまうことになる。
じゃあなんでELBでないフツーのサイトやフツーのロードバランサで構成するwebサイトにおいて「KeepAliveを無効にして、Timeoutは短かく(たとえば5秒)しよう」という言説が流れているのか。
これは、クライアントがずっとコネクションをはりっぱなしにする傾向があるから。
HTTP keep-alive connection timeouts « FastMail.FM Weblog というすばらしい記事によると、
といった具合。ほとんどのwebサイトにおいては、いくら通信が高速化されるとはいえ100秒も通信維持されても困ることばかりだろう。
「数千数万のクライアントからのコネクションを維持したままだとサーバのメモリを食って死んでしまう」→「ならば、そんなクライアントとは手を切るぜ」→「そのためには..」という常識がうまれた。
ELBはトラフィックが増えれば自在にリソースを変更するすぐれもの。そもそもELBがTCPのセッションを維持するのにどんだけメモリを食っていようが、そんなことはユーザの知ったことではない。そこが普通のロードバランサとは違う。
ELBをサーバとクライアントの間において、コネクションを維持したらどうなる? クライアントががんばって用意しているHTTP keepaliveはELBとの間で維持して、サーバはELBとのコネクションだけを考えればいいから、高速化する。
というわけで、ELBを使わない手はないし、その機能を生かすためにwebサーバはTCP keepaliveを有効にしてTimeoutを120秒にするのがいいのでした。
ピンバック:6月15日の注目記事 | Javable.Jp