コンテンツにスキップ

システム

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. システム

システムとは

ソフトウェア (OS、ミドルウェア、アプリケーション) とハードウェアの要素と合わせたグループのこと。

software


構成要素の関係性

ユーザーの操作による命令が、ソフトウェアを経由して、ハードウェアに伝わるまでを以下に示す。

ソフトウェアとハードウェア


02. Web システム

Web システムとは

システムのうちで、特に Web 技術に関するもののこと。

ハードウェアとしての Web サーバー/App サーバー/DB サーバーと、Web に関するソフトウェアからなる。

近年は、仮想環境を使用して Web システムのハードウェア部分を作成することが多い。

そのため、Web/App/DB サーバーではなく、仮想 Web/App/DB 環境と呼ぶほうが適切かもしれない。

web-server_app-server_db-server


Web システムのミドルウェア

▼ Web サーバー、App サーバーが必要な場合

Nginx または Envoy を使用する場合で考えるとする。

経路 Java の一例 PHP の一例 Python の一例
リバースプロキシ Envoy、Nginx Envoy、Nginx Envoy、Nginx
⬇️⬆️ ⬇️⬆️ ⬇️⬆️ ⬇️⬆️
Web サーバー Nginx Nginx Nginx
⬇️⬆️ ⬇️⬆️ ⬇️⬆️ ⬇️⬆️
App サーバー Apache Tomcat なし Uvicorn
⬇️⬆️ ⬇️⬆️ ⬇️⬆️ ⬇️⬆️
DB サーバー MySQL、PostgreSQL MySQL、PostgreSQL MySQL、PostgreSQL

▼ Web サーバー、App サーバーが不要な場合

Go、JavaScript、では Web サーバーと App サーバーがいらない。

経路 Go、JavaScript の場合
リバースプロキシ Envoy、Nginx
⬇️⬆️ ⬇️⬆️
Web サーバー なし
⬇️⬆️ ⬇️⬆️
App サーバー なし (Go、JavaScript のアプリケーションのみ)
⬇️⬆️ ⬇️⬆️
DB サーバー MySQL、PostgreSQL


02-02. フォワード/リバースプロキシサーバー

フォワード/リバースプロキシサーバーとは

クライアントと Web サーバーの間にあり、Web サーバーへのロードバランシングやキャッシュ作成を担う。


Web サーバーとの違い

Web サーバーとは異なり、静的ファイル (例:html ファイル、css ファイル、画像、動画、メールなど) を直接的に提供できない。

一方で、Web サーバーはロードバランシングが苦手である。


能力

▼ ロードバランシング

フォワードプロキシサーバーとリバースプロキシサーバー

サーバー名 処理
フォワードプロキシサーバー 特定のクライアントのアウトバウンド通信を、不特定多数の宛先にロードバランシングする。
リバースプロキシサーバー 不特定のクライアントからのインバウンド通信を、特定の Web サーバーにロードバランシングする。また、ロードバランサーのように負荷分散もできる。

▼ 静的コンテンツのキャッシュ作成

以前に Web サーバーが返却した静的コンテンツのキャッシュを作成する。

プロキシサーバーのキャッシュ能力

サーバー名 処理
フォワードプロキシサーバー クライアント側にて、ロードバランシングのレスポンスのキャッシュを作成する。
リバースプロキシサーバー サーバー側にて、ロードバランシングのレスポンスのキャッシュを作成する。

▼ SSL/TLS 終端

リバースプロキシを SSL/TLS 終端として、HTTP プロトコルで Web サーバーにリクエストをロードバランシングする。


配置場所

▼ 物理サーバーの場合

フォワードプロキシサーバーはプロバイダの会社に、リバースプロキシサーバーはリクエスト先の社内ネットワークに配置されている。

proxy-server

▼ クラウド上の場合

クラウドの場合も、仮想環境が作成されるのみで、配置場所は同じである。

各 CDN が提供する DNS (例:Akamai なら <ドメイン名>.edgekey.net、AWS なら <自動発行されるランダム文字列>.cloudfront.net) を、ドメインレジストリのレコードに登録する。

この DNS からエッジサーバーの IP アドレスを正引きできる。

  • Akamai
  • Amazon CloudFront
  • CDNetworks
  • Cloudflare
  • Fastly


02-03. Web サーバー

Web サーバーとは

静的コンテンツを返却するミドルウェア (例:Apache、Nginx など) を稼働させるためのサーバーのこと。

また、Web サーバーかつ App サーバーのミドルウェアとして動作する (例:NGINX Unit) がインストールされていることもある。


能力

▼ 静的コンテンツのレスポンス

ブラウザから静的コンテンツのみのリクエストがあった場合、静的コンテンツをレスポンスする。

App サーバーにはリクエストを送信しない。

経路 処理の内容
リバースプロキシ ロードバランシング、静的コンテンツのキャッシュ
⬇️⬆️ ⬇️⬆️
Web サーバー 静的コンテンツの返却
⬇️⬆️
App サーバー
⬇️⬆️
DB サーバー

▼ 静的 + 動的コンテンツのレスポンス

静的コンテンツと動的コンテンツの両方のリクエストがあった場合、App サーバーに動的コンテンツのリクエストを送信する。

App サーバーからレスポンスを受け取り、ブラウザにレスポンスを実行する。

経路 処理の内容
リバースプロキシ ロードバランシング、静的コンテンツのキャッシュ
⬇️⬆️ ⬇️⬆️
Web サーバー 静的コンテンツの返却
⬇️⬆️ ⬇️⬆️
App サーバー 動的コンテンツの返却
⬇️⬆️
DB サーバー

▼ SSL/TLS 終端

Web サーバーを SSL/TLS 終端として、HTTP プロトコルで App サーバーにリクエストをロードバランシングする。


02-04. App サーバー

App サーバーとは

動的コンテンツを返却するミドルウェア (例:PHP なら PHP-FPM、Java なら Apache Tomcat) を稼働させるためのサーバーのこと。


能力

▼ 動的コンテンツのレスポンス

Web サーバーから動的コンテンツのリクエストがあった場合、プログラミング言語を言語プロセッサーで翻訳し、DB サーバーにクエリを送信する。

DB サーバーからのレスポンスを受け取り、Web サーバーに動的なコンテンツのレスポンスを実行する。

経路 処理の内容
リバースプロキシ ロードバランシング、静的コンテンツのキャッシュ
⬇️⬆️ ⬇️⬆️
Web サーバー 動的コンテンツの返却
⬇️⬆️ ⬇️⬆️
App サーバー 動的コンテンツの返却
⬇️⬆️ ⬇️⬆️
DB サーバー DB レコードの返却


02-05. DB サーバー

DB サーバーとは

DB 管理システムを稼働させるためのサーバーのこと。