サーバー技術
Webサーバ(Web server)とは、HTTPに則り、クライアントソフトウェアのウェブブラウザに対して、HTMLやオブジェクトの表示を提供するサービスプログラム及び、そのサービスが動作するサーバコンピュータを指す。 広義には、クライアントソフトウェアとHTTPによる通信を行うプログラム及びコンピュータを指す。
Webサーバーでの基本的な処理の流れは以下のようになる。
まず、Webサーバーは常時ネットワークに接続していて、いつでもクライアントから接損を受けられるようになっている。クライアントからデータが尊信されたら、それを受信してHTTPリクエストの解析処理にデータを渡し、解析されたリクエストに応じてリスポンスデータを返す。
具体的なウェブサーバーの動作は、以下に示すようなHTTPリクエストがあったときに
POST /index.html HTTP/1.1
Host www.examle.com
Content-Type:application/x-www-form-urlencoded
name=foo
以下のようなHTTPレスポンスを返す動作となる。
HTTP/1.1 200OK
Content-Type:text/html
Connection:close
<html>
<body>hello foo!!</body>
</html>
Webサーバーとして著名なものに、Apacheサーバーおよびnginxがある。
本ブログではこのwebサーバーに関する詳細を以下に示す。
技術トピック
Webサーバーは常時ネットワークに接続していて、いつでもクライアントから接損を受けられるようになっている。クライアントからデータが尊信されたら、それを受信してHTTPリクエストの解析処理にデータを渡し、解析されたリクエストに応じてリスポンスデータを返す。
webサーバーの特徴として、複数のクライアントからのリクエストを同時並行で行うものがある。複数リクエストの処理には大きく分けて「prefork型」と「イベント型」の2つの種類がある。
Prefork型は、OSが持つ複数のプログラム(プロセス)を高速で切り替えてあたかも並行に動いているかのように振る舞う機能を用いて、複数クライアントからのリクエストを同時並行で処理する機能となる。このときwebサーバーは複数のプロセスを生成して、一つのプロセスが一つのコネクションを処理するものとなる。プロセスの切り替えはOSがやってくれるので、Webサーバーはそれぞれのプロセスで自分が担当しているリクエストの処理だけを担当すればよい。prefork型を採用している代表的なサーバーにはApache HTTP Serverがある。
イベント駆動型では、一つのプロセスで複数のリクエストを処理するため非同期I/Oを用いる。これはネットワークやディスクへのアクセスなどCPUから見ると低速なデータのやりとりの待ち時間に別の処理を実行すると言うもので、このしくみにより高速な動作が可能となった。イベント駆動を採用している代表的なWebサーバーにnginxがある。
今回は、ApacheサーバーとLAMPのインストールと設定について、Linux、Macのケースを中心に述べる。
nginx(engine x:エンジンエックス)は、webサーバーやロードバランサ、リバースプロキシとしてニカ機を集めているソフトウェアとなる。Webサーバー、ロードバランサ、リバースプロキシは、いずれも普段ブラウザからあくせすさけるWebシステムに必須の構成要素となる。
webの世界には、CERN httpdやNCSA HTTPdといったWebサーバーが使われてきたが、いずれもApache HTTP SEver(以下Apache)に取って代わられた。その後Microsoft Internet Information Server(IIS)、LightSpeed、lighthttpdなど様々なWebサーバーが新たに開発され、使われてきた。nginxもその中の一つとなる。
ここでは”サーバー技術“で述べているサーバーを各種プログラミング言語で活用する事例について述べる。ここでのサーバー技術とは、ネットワーク上でクライアントからのリクエストを受け取り、要求された処理を実行してレスポンスを返すサーバーシステムの設計・構築・運用などに関する技術のことを指す。
サーバー技術は、WebアプリケーションやAPIサーバー、データベースサーバー、メールサーバーなど、さまざまなシステムやサービスで使用されており、プログラミング言語やフレームワークに応じて、サーバー技術の実装方法やベストプラクティスが異なる。
- Discordを用いたコミュニケーション
Discordは、アメリカのソフトウェア企業Discord Inc.が開発運営する無料の音声・テキスト・ビデオチャットツールとなる。もともとゲーマー向けに開発されたコミュニケーションツールだが、その使いやすさと多機能性により、さまざまな領域でのオンラインコミュニティが形成され、今や多くの一般ユーザーにも使われているものとなる。Discordは、音声、テキスト、ビデオ通話の3つの機能がサーバー上で行われ、またユーザーは独自のサーバーを作ったり、他のユーザーが作ったサーバーに参加することも可能で、サーバー内では「テキストチャネル」や「ボイスチャネル」といったサブスペースを作成することが可能で、特定の目的に合わせたサブスペースを作成することができ、特定の話題や目的に合わせてチャネルを切り替え、コミュニケーションができるものとなる。
Rustは、Mozilla Researchが開発したシステムプログラミング向けのプログラミング言語であり、高いパフォーマンス、メモリ安全性、並列性、およびマルチスレッド処理を重視して設計されたものとなる。また、コンパイル時に強力な静的型チェックを行うことで、バグを予防することに焦点を当てた言語でもある。
ここでは、このRustに関する概要と基本的な文法および各種適用事例と具体的な実装について述べている。
Raspberry Pi(ラズベリーパイ)は、シングルボードコンピュータ(Single Board Computer, SBC)の一つであり、英国のラズベリーパイ財団(Raspberry Pi Foundation)によって開発された小型のコンピューターとなる。その名前は、英国で親しまれている「ラズベリーパイ」というデザートに由来している。
ここではこのRaspberry Piの概要と様々な適用事例と具体的な実装例について述べている。
コメント
[…] ICT技術 セマンティックウェブ技術 検索技術 データベース技術 サーバー技術 ネットワーク技術 デジタルトランスフォーメーション技術 […]
[…] Clojure Python PHP Prolog Javascript JavaとScalaとKoltlin プログラミング技術概要 サーバー技術 […]