##はじめに
ざっくりと理解している程度を記事を書くことで理解度をあげることが目的。
railsのアプリ想定の話になります。
##Webサーバとアプリケーションサーバとはなにか?
Webサーバとは、ブラウザからのリクエストにHTMLやCSSを表示する動きをするサーバの事。
詳しく解説していた記事を一部拝借。
Webサーバとは、Web3層構造の場合フロントエンドにある、ユーザーと直接やりとりを行うサーバです。
Webサーバには2つの役割があります。
ユーザーが操作するクライアントソフトウェア(Webブラウザなど)からの要求に応じて、ネットワークを通じてHTMLなどの静的Webコンテンツファイルを送信すること。
もう一つが、中間層にあるアプリケーションサーバに動的コンテンツを要求し、返ってきた結果を送信することです。
ただしWeb2層構造の場合は、Webサーバがアプリケーションサーバの役割も兼ねます。
Web3層構造は**「WEBサーバー」「アプリケーションサーバー(APサーバー)」「DBサーバー」**の3つの構造になっている形
処理の流れをわかりやすく求めた記事がありました。
- WEBサーバー
↓:クライアントからの要求(リクエスト)をAPサーバーに伝える。
↑:ブラウザが理解できる静的HTMLを返す(レスポンス)。
- APサーバー
↓:・WEBサーバーからのリクエストに沿って、DBにデータを要求する。
・ブラウザから受け取ったデータを元に処理する
↑: ・DBから受け取ったデータを、WEBサーバーに渡す。
・処理結果をWEBサーバーに渡す。
- DBサーバー
↓:APサーバーからのリクエストに沿ってデータを検出する。
↑:抽出したデータをAPサーバーに渡す。
簡単に言えば、
Webサーバは静的HTMLを返す
アプリケーションサーバは、処理を要求する。
大半のアプリケーションは、Webサーバを使わずに使用することが出来るそう。
じゃ、なぜWebサーバを使用するのか?
webサーバーは複数のアプリケーションを一度に処理したり、
アセットを素早くレンダリングしたり、リクエストごとに発生する多くの処理をさばいたりしてくれます。
サーバを分けることで、処理の速さを上げてるってことですね!
##Webサーバの種類
####Apache(アパッチ)
全世界のおよそ40% のWebサーバーはApacheが占めているそうです。
オープンソースであり、Apacheで扱うことのできる機能が豊富。
さらに、LinuxやUNIX、WindowsやMac OSなど、ユーザーの環境を選ばない点も魅力。
また、Apacheはマルチプロセッシングモジュールを採用しており、1つのスレッドごとに新しいプロセスを起動する方式です。動的なコンテンツの処理に適しており、CGIやPHPなどに向いている。
※MPM は (Multi Processing Module) の略で、Webブラウザからのリクエストを Apache がどのように並行処理するか、という部分の処理をモジュール化したものです。
####Nginx(エンジンエックス)
Nginxはキャッシュサーバー不要でHTMLや画像などをキャッシュできるので、静的コンテンツを扱うのに適したWebサーバーといえます。シングルスレッドを採用しており、1つのプロセスが複数の処理を行ないます。
※シングルスレッドとは、プログラムの処理が単一に行われることです。それに対して、マルチスレッドというものもありまして、こちらは同時にいくつもの処理が行われます。
大容量のデータを処理することを想定して開発されているため、アクションが起こったときに処理を行なうイベント駆動型を取り入れています。メモリを効率的に使用できるので、処理速度が非常に高速な点が魅力。
処理能力や同時接続数などの負荷への耐久力は、Apacheよりも高いといわれています。
####IIS(アイアイエス)
IISはWindows用のWebサーバー機能です。Microsoft社が提供しているため、Windowsに特化しています。ApacheやNginxと違い、IISはOSSではありません。
IISはWindowsベースなので、情報表示においてグラフィックを多用しているので、直感的に操作可能なGUIである点も大きなメリット。
Linuxなどのようにコマンドを扱う必要がなく、直感的に開発を行なうことができます。また、ApacheやNginxに比べて日本語のマニュアルが充実。
##アプリケーションサーバの種類
####Unicorn
プロセス上で動作するサーバで、masterプロセスとworkerプロセスがある.
masterプロセスがアプリケーションのソースコードを保持しこれをforkしたworkerプロセス群が実際のリクエストを処理ソースコードをロードするのがmasterプロセスのみであるため起動が早い。
デプロイ時のダウンタイムがない。
######Unicronの弱点
スロークライアント(リクエストが遅いクライアント) に弱い。
スロークライアントが来た場合、workerが待ちのまま止まってしまうという特徴がある。
そのためNginxなどリバースプロキシを挟んで、スロークライアントをバッファしてもらう必要がある。
これは、Unicornの不具合というより仕様。Unix哲学の「一つのことをうまくやる」に沿って作られているため。スロークライアントのバッファは、リバースプロキシに任せるように作られている。
NginxとUnicornの組み合わせが多い理由はこの辺にあるのかもしれないですね!
####puma
pumaはスピードと並列性を追求しており、ユーザーからのリクエスト受け取りとアプリケーションサーバへ処理を投げるのが速い。
処理をスレッド単位で溜めて、それをマルチに実行することです。(スレッドは処理の単位)
要するに、pumaは処理を小さな単位で分けて同時実行しているから速いということです。
イメージの通り速いって感じですね!
##まとめ
特長をかいつまんで、まとめてみました。
間違っている箇所があれば教えてください。
なぜ、この技術を使うのかまで理解して使用することを意識して行きましょう!