メインコンテンツにスキップ
ブログクラウドの概要ウェブサーバーの基礎

ウェブサーバーの基礎

Web_Server_Foundations_ Overview

この投稿はクラウド・コンピューティング基礎シリーズの一部です。 クラウドコンピューティング入門認定コースを受講して、さらにスキルを 高めましょう。

このコンセプトはすでにお馴染みかもしれない。クライアント/サーバー・モデルを覚えているだろうか?ウェブ・サーバーは、このモデルの構成要素であるサーバーに過ぎない。 

基本的なレベルでは、ウェブサーバーはウェブサイトやウェブアプリケーションを保存し、配信します。ウェブサーバーはハードウェアとソフトウェアで構成され、データ交換を容易にするために連携します。 

ウェブ・サーバーのハードウェア・コンポーネントとは、ウェブサイトのファイルやコンポーネントを保存する物理的または仮想的なコンピュータを指します。これには、静的なHTML文書、テキストファイル、画像、動画から、より複雑な動的スクリプトまで、あらゆるものが含まれます。例えば、ホームページに動画が掲載されているウェブサイトを訪れた場合、その動画はウェブ・サーバーのハードウェアに保存されています。

ウェブサーバーのソフトウェアコンポーネントは、ユーザーがサーバーに保存されているファイルにアクセスする方法を制御する役割を担っています。これは、インターネットに接続されているウェブブラウザやその他のデバイスから送られてくるリクエストを管理することによって行われます。ウェブサーバーにインストールされたソフトウェアにより、ウェブブラウザでウェブサイトを閲覧することができます。

まず、ウェブサーバーを動かしているコンポーネントを調べることから始めよう。

ハイパーテキスト転送プロトコル(HTTP)

HTTPは、ウェブ・サーバーがウェブサイトやウェブ・アプリケーションをユーザーに配信し、ユーザーがインターネット上のコンテンツにアクセスして閲覧できるようにする。

ウェブ・ブラウザを使ってウェブサイトにアクセスすると、ウェブ・ブラウザはそのウェブサイトをホストしているウェブ・サーバーにリクエストを送信します。このリクエストはHTTPメッセージの形式です。ウェブサーバーはリクエストを受信して処理し、要求されたリソースをハードウェアとソフトウェアのコンポーネントから取得します。

上の画像の右側では、ウェブ・サーバーがHTTPを使ってウェブ・ブラウザにメッセージを送信しているのがわかる。ウェブサイトをリクエストするには、ブラウザのアドレスバーにURLを入力します。ブラウザは、このURLをIPアドレスにマッピングします。IPアドレスは、ウェブサイトが保存されているサーバーの物理的な位置を表します。このIPアドレスにサーバーが見つかれば、ウェブ・サーバー・ソフトウェアがリクエストを受信し、要求されたウェブサイトを送り返す。つまり、ブラウザに "www.example.com "と入力すると、ウェブサーバーは "www.example.com "のウェブサイトを返すことになる。

セルフ・ホスティングとホスティング・プロバイダーの比較

ウェブアプリケーションをホスティングする場合、ホスティングプロバイダを利用するか、自宅のコンピュータに自分のサーバを立ち上げるかの選択肢があります。個人でホスティングを行うことはよくありますが、重要なサービスを提供する組織にとっては、ホスティングプロバイダーはより多くの保護を提供します。

ホスティング・プロバイダーを利用すれば、高速のサーバーとネットワークを利用することができます。ホスティング・プロバイダーはまた、変動する消費電力を確実に処理し、潜在的な障害から保護する能力を持っています。しかし、私たちが必要不可欠なサービスにホスティング・プロバイダーを利用する最大の理由は、個人情報がパブリックドメインに漏れないようにするためです。 

ウェブ・サーバー・ソフトウェア

ウェブ・サーバー・ソフトウェアは、あらゆるウェブサイトやウェブ・アプリケーションの心臓部です。ウェブ・サーバー・ソフトウェアは、インターネット上でウェブ・コンテンツをユーザーに提供するためのものです。ウェブサイトを立ち上げ、サーバーを設定する際には、それを機能させるためのソフトウェアが必要です。

ソフトウェアに関しては、Apache とNGINX という2つのソリューションが市場を独占している。ここではこの2つについて説明するが、IISやLighttpdを含む他の選択肢もあり、それぞれにユニークな利点と課題があることは注目に値する。

Apache

Apacheは、eコマースサイトやフォーラムなどの動的コンテンツのホスティングに最適な、広く使用されているウェブサーバーソフトウェアです。Windows、macOS、Linuxなど、複数のプラットフォーム上で動作します。1995年頃から存在しており、最も古く、最も広く利用されているウェブサーバーの1つです。 

Apache は、HTTP、HTTPS、FTPを含む様々なウェブプロトコルを扱うことができ、Windows、Linux、macOSを含む多くの異なるオペレーティングシステム上で実行することができます。ダイナミックコンテンツのサポート、認証、キャッシュなどの追加機能を追加できる様々なモジュールを備えており、高度なカスタマイズが可能です。特に、動的コンテンツをサーバーコンポーネントから独立してサーバー内で処理するように構築されています。 

Apache は1コネクション・プロセス・モデルです。ワンコネクション・パー・プロセス・モデルは、ウェブサーバーを構築するための伝統的なアプローチで、各クライアント接続は別々のプロセスまたはスレッドによって処理されます。このプロセスまたはスレッドは、クライアントの接続を管理し、 接続がクローズされるまでクライアントのリクエストを処理する責任を負います。Apache はこのモデルを採用しているため、同時接続リクエスト数がプロセス数を超えると、サーバーのパフォーマンスが著しく低下します。

Apache の主な特徴の1つは、1つのサーバー上で複数のバーチャルホストをサポートする能力で、ウェブサイトが独自の設定を維持しながらリソースを共有できる。Apache はまた、非常に拡張性が高く、多くの開発者コミュニティが機能を拡張するための追加モジュールやプラグインを作成し、保守している。

NGINX

一方 NGINX(エンジンXと発音)は、画像や動画のような静的コンテンツの配信に最適化されており、大量のクライアント同時接続を処理する能力で人気がある。NGINX は、ウェブ上でのコンテンツ配信を改善する能力で高く評価されている。 

NGINX は、非同期のイベント駆動モデルを使って作られている。これらのコンセプトについて少し説明しよう。 

ウェブサーバー、ネットワーク通信、データベース管理など、システムが多数の同時リクエストを処理する必要がある場合、非同期モデルを使用する。非同期プログラミングモデルを使用することで、これらのシステムはより優れたパフォーマンスとスケーラビリティを実現し、ブロッキングやフリーズのリスクを減らすことができる。

イベント駆動型モデルは、あらかじめ決められた一連のステップに従うのではなく、システム内のイベントによって駆動される。

そのため、非同期かつイベント駆動型のモデルを持つことで、システムは他のタスクの処理をブロックすることなく、複数のタスクやイベントをまとめて処理することができる。

そのアーキテクチャ上、NGINX 、PHPのような動的コンテンツを処理することはできません。実行するためには、外部のプロセッサに渡さなければならない。このため、NGINX は静的コンテンツ、リバースプロキシ、ロードバランシング、メールプロキシ、HTTPキャッシングにより適している。NGINX は Linux システムにも推奨される。

NGINX とApache の併用

NGINX とApache を併用することが多い。そうすることで、それぞれのサーバーの長所を活かしつつ、その限界を克服することができる。

Apache とNGINX を統合する最も一般的な方法の一つは、上の画像にあるように、Apache の前にNGINX を置いて、すべての着信 HTTP リクエストを処理することである。 この構成では、入ってくる HTTP リクエストをすべてNGINX に向け、 は動的コンテンツへのリクエストをApache にリレーし、静的コンテンツへのリクエストはそれ自身で処理します。

Apache の前にNGINX を置くことで、NGINXの非同期、イベントドリブンモデルによる大量の同時接続リクエストの処理能力を 利用する。これにより、Apacheのパフォーマンスを低下させる可能性のある、 リクエストを処理するために必要なオープンスレッドやプロセスの数を減らすことで、Apache の負担を軽減することができる。

NGINX 、複数のApache サーバーにリクエストを分散することができ、負荷が分散され、単一のサーバーが過負荷になるのを防ぐことができます。さらに、NGINX 、インターネットとウェブサーバー間のバッファとして機能し、攻撃から保護するレイヤーを増やすことができます。

クラウド・コンピューティング入門認定コースを受講して、クラウド・コンピューティングで成功するためのスキルを身につけましょう。


コメント 

コメントを残す

あなたのメールアドレスは公開されません。必須項目には*印がついています。