Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

posted at

なぜ、Webサーバが必要か説明できますか?

はじめに

ざっくりと理解している程度を記事を書くことで理解度をあげることが目的。
railsのアプリ想定の話になります。

Webサーバとアプリケーションサーバとはなにか?

Webサーバとは、ブラウザからのリクエストにHTMLやCSSを表示する動きをするサーバの事。

詳しく解説していた記事を一部拝借。

Webサーバとは、Web3層構造の場合フロントエンドにある、ユーザーと直接やりとりを行うサーバです。
Webサーバには2つの役割があります。
ユーザーが操作するクライアントソフトウェア(Webブラウザなど)からの要求に応じて、ネットワークを通じてHTMLなどの静的Webコンテンツファイルを送信すること。
もう一つが、中間層にあるアプリケーションサーバに動的コンテンツを要求し、返ってきた結果を送信することです。
ただしWeb2層構造の場合は、Webサーバがアプリケーションサーバの役割も兼ねます。

引用元

Web3層構造は「WEBサーバー」「アプリケーションサーバー(APサーバー)」「DBサーバー」の3つの構造になっている形

処理の流れをわかりやすく求めた記事がありました。

  1. WEBサーバー

    ↓:クライアントからの要求(リクエスト)をAPサーバーに伝える。

    ↑:ブラウザが理解できる静的HTMLを返す(レスポンス)。

  2. APサーバー

    ↓:・WEBサーバーからのリクエストに沿って、DBにデータを要求する。
      ・ブラウザから受け取ったデータを元に処理する
    ↑: ・DBから受け取ったデータを、WEBサーバーに渡す。
      ・処理結果をWEBサーバーに渡す。

  3. 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は処理を小さな単位で分けて同時実行しているから速いということです。

イメージの通り速いって感じですね!

参考記事

まとめ

特長をかいつまんで、まとめてみました。
間違っている箇所があれば教えてください。

なぜ、この技術を使うのかまで理解して使用することを意識して行きましょう!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?