Webアプリケーションの3層構造
Webアプリケーションはユーザインターフェースとなるプレゼンテーション層(Webサーバーが担う)、業務処置を行うアプリケーション層(APサーバーが担う)、データ処理や保管を行うデータ層(DBサーバーが担う)の3層構造となっている。
https://qiita.com/mk185/items/e914683410fd4ecaf0af
- WEBサービスとWEB3層構造について
- Web技術の基本 ~Webアプリケーションの構造~
- なぜ、Webサーバが必要か説明できますか?
- ミドルウェア(Web、AP、DB)について知ろう
-
Webアプリケーションの全体像を掴む
- Webアプリケーション構成の歴史についての章が面白い。
- サーバーとは?WEB3層構造におけるサーバーの種類
- Viewがレンダリングされるまでの技術とその理解 / Aaron Patterson - YouTube
Webサーバー・アプリケーションサーバー
Webサーバーとアプリケーションサーバーの違い・分離する理由
Webサーバーに対しては、不特定多数から多くの接続をされることがあります。その際にAPサーバーでリクエストを捌くと不十分な場合が多いということなんですね。
https://qiita.com/yCroma/items/e46476e2ac7c372bb2a3
webサーバーは複数のアプリケーションを一度に処理したり、
アセットを素早くレンダリングしたり、リクエストごとに発生する多くの処理をさばいたりしてくれます。
https://qiita.com/gen10717913/items/a2620579e61449acae3e
- Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳)
- なぜrailsの本番環境ではUnicorn,Nginxを使うのか? ~ Rack,Unicorn,Nginxの連携について ~【Ruby On Railsでwebサービス運営】
- なぜAPサーバーをWebサーバーとして利用しないのか
- WebサーバーとAPサーバの分離について
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
- Apache
- Nginx
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
- 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を普通に使ったほうがパフォーマンスが良い場合があるという検証結果を出している。
-
Pumaの本当の力を引き出す
- 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におけるサーバー構築
- 構成図を作ってインフラの勉強 AWS+Rails+Nginx+Unicorn
- UnicornとNginxの概要と違い
- RailsアプリケーションのAWSによる公開|unicorn + nginx
- 基本的なシステム構成図を理解するためのAWS基礎をまとめてみた#オーソドックスなアーキテクチャ
WIP: 構成図作ってみたい。