26
Cr ator’s Night 2012/01/20 事業創造室(NPLab) 加藤寛之 Friday, January 20, 12

20110120CreatorsNight_僕とErlangと時々Load Balancer

Embed Size (px)

DESCRIPTION

2011/1/20のCreators' Nightで使用された資料。 Erlangを使用した簡易load balancerを作ってみた。

Citation preview

Page 1: 20110120CreatorsNight_僕とErlangと時々Load Balancer

Cr ator’s Night2012/01/20

事業創造室(NPLab) 加藤寛之

Friday, January 20, 12

Page 2: 20110120CreatorsNight_僕とErlangと時々Load Balancer

< みなさん、こんばんみー

Friday, January 20, 12

Page 3: 20110120CreatorsNight_僕とErlangと時々Load Balancer

今日のお題

僕とErlangと時々Load Balanc r

Friday, January 20, 12

Page 4: 20110120CreatorsNight_僕とErlangと時々Load Balancer

< 今日はちゃんとコード書いたよ!

Friday, January 20, 12

Page 5: 20110120CreatorsNight_僕とErlangと時々Load Balancer

本題に入る前に・・・思い出して下さい

天下一なるはや配信性能会

Friday, January 20, 12

Page 6: 20110120CreatorsNight_僕とErlangと時々Load Balancer

過ぎ去った思い出達

Friday, January 20, 12

Page 7: 20110120CreatorsNight_僕とErlangと時々Load Balancer

その中でも、C言語で書かれたNginxと遜色ない結果を残した

Erlang

製のWebサーバー達

こいつらFriday, January 20, 12

Page 8: 20110120CreatorsNight_僕とErlangと時々Load Balancer

でもマイナー言語だよ?( ́,_ゝ`)プッ

Friday, January 20, 12

Page 9: 20110120CreatorsNight_僕とErlangと時々Load Balancer

てか、言語的に キモイし( ́,_ゝ`)プッ

Friday, January 20, 12

Page 10: 20110120CreatorsNight_僕とErlangと時々Load Balancer

いいえ、Erlangはできる子です

今日はその一端をご紹介します

Friday, January 20, 12

Page 11: 20110120CreatorsNight_僕とErlangと時々Load Balancer

ということで

Erlang Load Balancer= erlproxy

を作ってみた

Friday, January 20, 12

Page 12: 20110120CreatorsNight_僕とErlangと時々Load Balancer

復習 : Load Balancerって何ぞ?

ユーザーいっぱい

1台のマシンじゃ無理

じゃ、複数マシン使おう

Q. どうやって複数のマシンに振り分ける?Friday, January 20, 12

Page 13: 20110120CreatorsNight_僕とErlangと時々Load Balancer

復習 : Load Balancerって何ぞ?

ユーザーいっぱい

1台のマシンじゃ無理

じゃ、複数マシン使おう

Q. どうやって複数のマシンに振り分ける?

そこでLoad

Balancerで

Friday, January 20, 12

Page 14: 20110120CreatorsNight_僕とErlangと時々Load Balancer

復習 : Load Balancerって何ぞ?

受け取ったリクエストを後ろのサーバーに右から左へ受け流す

ユーザーからのリクエストを受けとる

後ろのサーバーから返ってきたデータをユーザーに返す

Friday, January 20, 12

Page 15: 20110120CreatorsNight_僕とErlangと時々Load Balancer

比較対象巷で使われている代表的な

オープンソースのLoad Balancer達

いづれも大規模サイトで導入実績のある素晴らしいソフトウェアです

Friday, January 20, 12

Page 16: 20110120CreatorsNight_僕とErlangと時々Load Balancer

尚、今回は正に「右から左へ受け流す」

性能の測定です。エンジニア用語で言うとL4 Load Balancingです。

Friday, January 20, 12

Page 17: 20110120CreatorsNight_僕とErlangと時々Load Balancer

用意した環境

・・・ 後ろのサーバー32台

測定するソフトウェア

測定ツール

Friday, January 20, 12

Page 18: 20110120CreatorsNight_僕とErlangと時々Load Balancer

指標 : Req/sec

= 1秒間にどれだけのリクエストをさばけるか。数値が大きい程よい。

同時アクセス数を10, 50, 100, 200, 300, 400, 500に変えて10,000リクエストずつ投げるテストを100回繰り返してみました。

Friday, January 20, 12

Page 19: 20110120CreatorsNight_僕とErlangと時々Load Balancer

さて、その結果は?

Friday, January 20, 12

Page 20: 20110120CreatorsNight_僕とErlangと時々Load Balancer

惨敗です(́・ω・`)

だが待って欲しい!

Friday, January 20, 12

Page 21: 20110120CreatorsNight_僕とErlangと時々Load Balancer

コード量(≒ソフトウェアの複雑さ)で比較すると・・・

Haproxy : 225,047行 Nginx : 122,830行 erlproxy : 375行

Friday, January 20, 12

Page 22: 20110120CreatorsNight_僕とErlangと時々Load Balancer

更にテストが完走した比率で比較すると・・・

Friday, January 20, 12

Page 23: 20110120CreatorsNight_僕とErlangと時々Load Balancer

つまり、理論性能ではHaproxyやNginxには勝てない

でも

少ないコード量で高負荷時でも安定的な配信を実現可能

Friday, January 20, 12

Page 24: 20110120CreatorsNight_僕とErlangと時々Load Balancer

ほら、Erlang素敵でしょ?

Friday, January 20, 12

Page 25: 20110120CreatorsNight_僕とErlangと時々Load Balancer

1> if:format(“~p~n”, [“Thanks!”]).“Thanks!”ok2>

source : https://github.com/devkato/erlproxy

Friday, January 20, 12

Page 26: 20110120CreatorsNight_僕とErlangと時々Load Balancer

尚、布教活動のため今回のスライドの全てのページに

Erlangのロゴが隠れています。

全部見つけられたかな?Friday, January 20, 12