【※ 当記事は2020年7月2日時点の情報です】
ペイヴメント(@pavement1234)です。
WEBサーバについて知りたい。
nginxの存在を最近知った
これまでHTTPサーバと言えば、ApacheとIISが2強と思っていましたが、
最近はnginxが優勢らしく、
Apacheよりnginxの方が高速かつ高負荷に耐えられる様子。
具体的な違い
Apacheはマルチプロセスのプロセス駆動アーキテクチャ、
nginxはシングルスレッドのイベント駆動アーキテクチャ、
というのが大きな違いと思われます。
但し、Apacheもmpm(multi processing module)という仕組みで
prefork(マルチプロセス)、
worker(マルチプロセスとマルチスレッドのハイブリッド)、
event(マルチスレッド)のモードを選択できますので、
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)もハードル低そうな感じ。
色々なミドルウェアが無料で使えるいい時代ですね。