nginx勉強会

Post on 28-May-2015

6.544 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

社内で行ったnginx勉強会の資料です。

TRANSCRIPT

Nginx 勉強会

株式会社シーエー・アドバンス大谷 祐司

はじめに

今回の勉強会は、新しい Web サーバとして注目されている Nginx( エンジンエックス )がテーマです。

シーエー・アドバンスでも CS の業務システムで採用されており、高いパフォーマンスで安定稼働している実績があります。

雑誌にも特集が組まれています

入門書も出ています。

採用実績

・クックパッド

・サイバーエージェント

・ pixiv

・ Wikipedia

・ facebook

・ Hulu

採用実績

・ Dropbox

・ github

・ Groupon

・ Yandex

・ Zynga

・ SourceForge

採用実績

これら、多くの有名サービスで Nginx が

採用されています。

某ソーシャルゲームのプラットフォーム

では Apache の使用を止め、ほぼ全ての

サービスを Nginx に移行しているそうで

す。

Nginx の概要

Nginx の概要

Nginx はオープンソースの Web サーバです。高い並行性と処理性能、メモリ使用量の小ささに重点を置いて開発されています。

Unix 系 OS 、 Linux 、 BSD 系 OS 、 Mac OS X 、 Solaris 、 AIX 、 HP-UX 、 Microsoft Windows で動作します。

Nginx の概要

Nginx は処理が軽く、大量のリクエストを処理するのに向いています。

リバースプロキシ、静的コンテンツの配信、ロードバランサ等の用途に Nginx が多く採用されています。

Nginx の概要

逆に、 Nginx は cpu リソースがたくさん必要な処理には向いていません。

処理時間が長くなる処理を実行した際、そこでプロセスがブロックされてしまい処理能力が落ちてしまいます。

Nginx が解決するとされる

C10K 問題について

考えてみましょう。

ハード性能的に問題が無い。

しかし、

クライアントの数が多くなるとサーバがパンクする場合がありま

す。

なぜでしょうか。

プロセス番号が足りなくなる。

UNIX 系 OS だとプロセス番号は符号付

き 16 ビット整数、つまり最大 32767

です。

処理が小さいものはプロセスではなく、スレッドで解決したい。

これを実現するのが、「イベントループ方式」です。

最近話題の言語 node.js も同じ方式で開発されています。

「イベントループ方式」とはシングルスレッドでループ処理をまわし,キューに溜まったイベントを処理していく処理方式です。

Nginx のシェア

世界中の Web サービスにおいて、 Apache, IIS に次ぐ 3 番目のシェアを持っています(11.8%)上位1万位までのサイトに限定すると、 18%のシェアを持っています。

2008 年以降にコンスタントにシェアを伸ばし続けてきましたが、 2011 年から一気にシェアが拡大しています。

Nginx のシェア (2012/12)

Nginx のシェア (2012/12)

Nginx の歴史

Nginx の歴史

Nginx は 2004 年に、 Rambler というロシアの検索エンジンやその関連サイトにおけるニーズを満たすために開発されました。

開発者は Igor Sysoev という 1970 年生まれのロシア人で、現在は NGINX 社の CTOです。

Nginx の歴史

ロシアを中心に開発されている Nginx ですが。ロシア国内の人気サイトにおいて、シェアは 50% 以上と言われています。

Nginx の用途

リバースプロキシ

特定多数のクライアントから寄せられる要求に対して、応答を肩代わりすることにより特定のサーバの負担を軽減したり、アクセスを制限したりします。

これにより特定のサーバの負荷を軽減したり、セキュリティを高めたりする目的に用いられます。

リバースプロキシ

静的コンテンツの配信 (CDN)

テキストや画像といった静的コンテンツの配信に多く用いられています。

イベント駆動アーキテクチャにより、大量のリクエストを同時に処理できるスケーラビリティを備えているためです。

静的コンテンツの配信 (CDN)

ロードバランサ

外部ネットワークからのリクエストを一元的に管理し、同等の機能を持つ複数のサーバに要求を分散して送信する仕組みです。

複数台の Web サーバや DB サーバで処理を分散する際などに用いられます。

ロードバランサ

Nginx の用途として従来はリバースプロキシや静的コンテンツ配信が主な用途でしたが、最近ではWeb サーバとして活用する企業も増えています。

PHP を動かす際には、 PHP-FPM を使用します。PHP5.4 に実装されているビルトインサーバと同じモジュールです。

Web サーバ

Nginx の設定

設定ファイルは「 nginx.conf 」を使用します。独自の DSL(DomainSpecificLanguage) で記述されています。

代表的な Web サーバの Apache と比較しても、より直感的で柔軟に設定を行う事が可能です。

設定ファイル

Web サーバとしての Nginx の機能は、ほとんどが拡張モジュールとして実装されています。

公式に提供されているもの意外にも、独自のモジュールを作成することが可能です。

拡張モジュール

アーキテクチャ

Nginx の概要

Apache 等の一般的な Web サーバとの大きな違いは、イベント駆動アーキテクチャを採用している事です。

これによって、少量のプロセスだけで大量のリクエストを処理する事が可能です。

Nginx のリクエスト処理イメージ

Nginx の概要

Apache の prefork はプロセス駆動アーキテクチャを持っています。これは、各リクエストをプロセスに割り合てて処理を行います。

リクエストが大量に来た際、プロセスが同時起動するのでオーバーヘッドが非常に大きくなるというデメリットがあります。

Apache prefork のリクエスト処理イメージ

「スレッド」と「プロセス」

「スレッド」と「プロセス」

スレッドプロセス内に作られる、一つのプログラム内で並列処理を行うための仕組み。リソースはスレッドを起動するプロセスのものが割り当てられる。

「スレッド」と「プロセス」

プロセスプログラムの実行単位。 OS からリソースの割当はプロセス単位で行われる。

最後に

Web サーバはこれまで長い間 Apache が主流でしたが、最近は Nginx 等の新しいプロダクトが登場しています。

それぞれの特徴を理解して、サービスに最適なものを選択できるようにしていきましょう。

勉強会は以上になります。ご清聴ありがとうございました。

top related