LoginSignup
4
8

More than 1 year has passed since last update.

Web3層構造と、Webサーバー・アプリケーションサーバー・Railsの関係

Last updated at Posted at 2022-01-04

Webアプリケーションの3層構造

Webアプリケーションはユーザインターフェースとなるプレゼンテーション層(Webサーバーが担う)、業務処置を行うアプリケーション層(APサーバーが担う)、データ処理や保管を行うデータ層(DBサーバーが担う)の3層構造となっている。
https://qiita.com/mk185/items/e914683410fd4ecaf0af

Webサーバー・アプリケーションサーバー

Webサーバーとアプリケーションサーバーの違い・分離する理由

Webサーバーに対しては、不特定多数から多くの接続をされることがあります。その際にAPサーバーでリクエストを捌くと不十分な場合が多いということなんですね。
https://qiita.com/yCroma/items/e46476e2ac7c372bb2a3

webサーバーは複数のアプリケーションを一度に処理したり、
アセットを素早くレンダリングしたり、リクエストごとに発生する多くの処理をさばいたりしてくれます。
https://qiita.com/gen10717913/items/a2620579e61449acae3e

C10K問題(クライアント1万台問題)

サーバーのハードウェア性能は問題ないにもかかわらず、クライアントの同時接続数が多くなるとサービスの応答が遅くなること

Webサーバー

Web サーバは「ユーザからのリクエストを一手に引き受け、静的コンテンツ (静的ページ、CSS、JavaScript など) は自分で返却し、動的コンテンツはアプリケーションサーバに HTML 生成処理を依頼する」という役割
https://qiita.com/os1ma/items/7a229585ebdd8b7d86c2#comment-80920a55c57ebfaaf223

HTTPに則り、クライアントソフトウェアのウェブブラウザに対して、HTMLやオブジェクト(画像など)の表示を提供するサービスプログラム及び、そのサービスが動作するサーバコンピュータ
https://ja.wikipedia.org/wiki/Web%E3%82%B5%E3%83%BC%E3%83%90

Railsの開発環境におけるWebサーバー

Railsアプリケーションはサーバ側で動作するアプリケーションですので別途リクエストを受けるためのWebサーバが必要となります。本場環境ではApacheなどのWebサーバと組み合わせて利用することになると思いますが、RailsにはWEBrickというWebサーバが付属しており、別途Apacheなどを用意しなくても簡単にローカル環境で動作確認を行うことができます。
https://www.javadrive.jp/rails/ini/index3.html

WEBrick is an HTTP server toolkit that can be configured as an HTTPS server, a proxy server, and a virtual-host server.
WEBrick features complete logging of both server operations and HTTP access.
https://github.com/ruby/webrick

Proxyサーバー

ユーザーがWebサイトにアクセスする際に経由するのが、フォワードプロキシ。ユーザー側が、通信の安全性を確保するために設置します。
...
対して、アクセスされるWebサイト側が設置するのは、リバースプロキシです。リバースプロキシは、外部からのアクセスを一旦受け付けるため、不正アクセスの防止が可能です。さらに、リバースプロキシはキャッシュを保持し、Webサイトの表示速度の高速化や負荷軽減にもつながります
https://cybersecurity-jp.com/column/32171

リバースProxyサーバー

リバースプロキシサーバーは内部サービスをまとめて外部に統一されたインターフェースを提供するウェブサーバーです。クライアントからのリクエストはそれに対応するサーバーに送られて、その後レスポンスをリバースプロキシがクライアントに返します。
https://github.com/donnemartin/system-design-primer/blob/master/README-ja.md

リバースプロキシとロードバランサーの違い

リバースプロキシは、クライアントのリクエストを受け取り、コンテンツのキャッシュや圧縮、セキュリティの向上などを行ってサーバーに転送・サーバーからのレスポンスをクライアントに返却するため、1台以上のサーバーがある場合メリットがある。
ロードバランサーは、複数のサーバーがある場合に各サーバーへの負荷分散を行い、クライアントに迅速にレスポンスを返却できるようにする。

アプリケーションサーバー

HTTPリクエストから動的コンテンツを生成し、レスポンスとして返す機能を持ったサーバーです。
https://qiita.com/yCroma/items/e46476e2ac7c372bb2a3

アプリケーションサーバーはあなたのRailsアプリケーションを動かしているものです
https://qiita.com/jnchito/items/3884f9a2ccc057f8f3a3

  • Unicorn
  • Puma
    • Pumaの本当の力を引き出す
      • 場合によってはUnicornを普通に使ったほうがパフォーマンスが良い場合があるという検証結果を出している。
  • Thin

Phusion Passenger

Webサーバーのモジュールとして、アプリケーションサーバーのように動作する。

Rack

WSGIとは,PythonのためのWebサーバとWebアプリケーション/フレームワーク間の標準インターフェースを定める「仕様」です。
...
RackはこのWSGIに影響されて開発された,Rubyにおけるサーバとアプリケーション/フレームワーク間のインターフェースの役割を果たすライブラリです
https://gihyo.jp/dev/serial/01/ruby/0023

アプリサーバーとアプリ間の通信仕様を定めておく(=インターフェースの標準化をしておく)ことで、
アプリサーバーとアプリケーションフレームワークの組み合わせを自由に変えることができます。
Rails専用のアプリサーバーを作る、Sinatra専用のアプリサーバーを作るっていうのは大変ですよね。
https://qiita.com/nishio-dens/items/e293f15856d849d3862b

Ruby on Railsにおけるサーバー構築

WIP: 構成図作ってみたい。

おまけ集

アプリケーションサーバー内における3層構造

AWSアーキテクチャパターン

サーバーレスアーキテクチャー

マイクロサービス(?)

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8