WEB

【WEB】高速かつ高負荷に耐えるWEBサーバ(nginx)

nginxとは何か?エンジンエックスと呼ばれるWEBサーバです。

この記事で解決できること

  • nginxの概要を知ることが出来る。

nginxの存在を最近知った

これまでHTTPサーバと言えば、ApacheとIISが2強と思っていましたが、最近はnginxが優勢らしく、Apacheよりnginxの方が高速かつ高負荷に耐えられる様子。

具体的な違い

Apacheはマルチプロセスのプロセス駆動アーキテクチャ、nginxはシングルスレッドのイベント駆動アーキテクチャ、というのが大きな違いと思われる。但し、Apacheもmpm(multi processing module)という仕組みでprefork(マルチプロセス)、worker(マルチプロセスとマルチスレッドのハイブリッド)、event(マルチスレッド)のモードを選択できる。

nginxについてもっと詳しく知りたい

Nginxのアーキテクチャについて理解するを読んでみました。

nginxで採用されているイベント駆動アーキテクチャとは、クライアント要求をイベントとしてキューイングして、プロセス内のシングルスレッドでループ処理を回してイベントを処理する方式である。

正確には1つのmasterプロセスからworkerプロセスを複数生成し、クライアント要求をworkerプロセスで処理している。プロセス数やリクエスト数は設定ファイルで制御できる。

同時接続数が増えてもプロセス・スレッドが増加しないのでC10K問題を解決可能。C10K問題とはクライアント10000台を意味するが、ある一定のクライアント要求を超えるとサーバがパンクする問題を意味する。

スレッドで動作するためメモリを共有できるが、メモリを共有するが故にスクリプト言語が組めないケースがあるらしい。つまりスレッドセーフでないWEBコードがある場合、GIL(Global Interpreter Lock)という機構で同時に実行できるスレッド数を1つに制約し、スレッドセーフでないライブラリを安全に使うことを可能とするが、反面マルチスレッドの恩恵が受けられなくなり性能が出なくなる。

非同期I/O(select、poll)を採用しており、I/O処理の完了を待たずに次の処理を実行できる。

但し、DB処理やアプリケーション実行などのCPUリソースを食う処理をnginxにやらせるとキュー溢れを引き起こすので注意が必要。

リバースプロキシとして利用できる。リバースプロキシとは、nginxにデータをキャッシュすることでインターネット上のWEBサーバの代わりにクライアントにレスポンスを返せるようにすること。クライアントとWEBサーバの間にリバースプロキシを配置し、ファイアウォールやSSLなどのセキュリティ対策を代替させることもできる。

さらにNginxのインストールと基本設定を読むと、apt-getでインストールできるし、ソースをコンパイルしてインストールすることも出来るみたい。nginx自身はデーモンとして動作する。nginx.confに設定を記載できる。

まとめ

組込エンジニアという仕事柄、WEB等のIT系の技術に触れる機会が少ないのですが、昔から興味あり。またフリーランス業界ではWEBの業務依頼がたくさんあるので定年退職後を考えたときにWEBは覚えておいて損はない。またネットワーク全般の知識も身に付きそうなところもGOOD。Node.js(Wikipedia)みたいなサーバサイドのJavaScript環境はとっつきやすそうだし、今回紹介したnginx(Wikipedia)もハードル低そうな感じ。色々なミドルウェアが無料で使えるいい時代ですね。

  • この記事を書いた人
  • 最新記事

ペイヴメント

ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。

-WEB

Copyright© ペイヴメントのエンジニア塾 , 2020 All Rights Reserved.