コンテンツにスキップ

システム

はじめに

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


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、Node.js、ではwebサーバーとappサーバーがいらない。

経路 Go、Node.jsの場合
リバースプロキシ Envoy、Nginx
⬇︎⬆︎ ⬇︎⬆︎
webサーバー なし
⬇︎⬆︎ ⬇︎⬆︎
appサーバー なし (Go、Node.jsのアプリのみ)
⬇︎⬆︎ ⬇︎⬆︎
dbサーバー MySQL、PostgreSQL


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

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

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


能力

▼ ロードバランシング

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

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

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

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

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

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

▼ SSL終端

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


配置場所

▼ 物理サーバーの場合

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

proxy-server

▼ クラウド上の場合

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

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

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

  • Akamai
  • AWS CloudFront
  • CDNetworks
  • Cloudflare
  • Fastly


02-03. webサーバー

webサーバーとは

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

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


能力

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

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

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

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

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

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

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

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

▼ SSL終端

webサーバーをSSL終端として、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管理システムを稼働させるためのサーバーのこと。