【※ 当記事は2020年7月2日時点の情報です】
ペイヴメント(@pavement1234)です。
nginx(エンジンエックス)と呼ばれる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)もハードル低そうな感じ。色々なミドルウェアが無料で使えるいい時代ですね。
ITスキルを身につけると条件の良い転職が可能になる
ITスキルを身につけると条件の良い転職が可能になります。当ブログがそのキッカケになったら幸いです。