[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>その他、開発の色々]] * 目次 [#z88dfb63] #contents *概要 [#o8e4fc83] 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、~ あまりにもクライアントの数が多くなると効率が悪化しサーバがパンクする問題のこと。 -スレッドなどのリソースを大量に消費してしまう。 -最近は、「C10M問題」(クライアント1,000万台問題)などが出て来ている。 *NginxとNode.js [#e4cee847] -Nginx(エンジンエックス) -Node.js(ノードジェイエス) **Nginx [#m80767a6] ***Nginxの概要 [#ec6381b8] Nginxでは、[[イベントループ>#f5929c15]]というモデルにより、~ 同時リクエストを多く処理することに特化することで、C10K問題に対応する。 ***Windowsや.NETでNginxを使う。 [#f4dc187d] -Windowsにnginxをセットアップする - Qiita~ http://qiita.com/tatuno/items/44ec8130d7544d1534f7 -ASP.NET Core アプリを Ubuntu サーバーで公開 - Qiita~ http://qiita.com/creativewebjp/items/48ede6a3f920ba26ff59 **Node.js [#nb955512] ***Node.jsの概要 [#gbe9386c] サーバサイド JavaScript のNode.jsは[[ノンブロッキングI/O>#kb7b2a4b]]というモデルにより、~ [[イベントループ>#f5929c15]]を止めてしまうようなブロッキングを回避し、C10K問題に対応する。 ***WindowsでNode.jsを使う。 [#w36c4df7] -Unix系OS向けの非同期I/O環境(epoll/kqueue/event port)を使用する「libev」ライブラリを使用していた。 -Windows向けの非同期I/O環境(IOCP : Input/output completion port)を使用する「libuv」を開発した。 -現在、libeio / libev に代わって libuvが、Node.js のコアとして置き換わりつつある。 **2つの方式 [#k47ad412] ***イベントループ [#f5929c15] -方式~ シングルスレッドでループ処理を回し、 --キューに溜まったイベントを処理していく方式。 --リクエストを1つのスレッドで受け取ることができる。 -特徴 --スレッドなどのリソース消費が少なくて済む。 -問題 --イベントループは、昔懐かしい、ノンプリエンプティブOSのように、~ どこかでブロッキングが発生すると、イベントループ全体がストップしてしまう。 ***ノンブロッキングI/O [#kb7b2a4b] -「イベントループ」の問題を解決するのが「ノンブロッキングI/O」らしい。 -簡単に、ブロッキングを防止することでイベントループの停止を防止する。 -仕組みとしては、ざっくり、 --ワーカースレッドプールと I/O 処理がうまく協調して動き、 --スレッドを節約して動作しているクライアントに処理完了後のコールバックを返す。 >という、非常に優れた方法であるらしい。 *参考 [#j6998bcc] **C10k [#v6f95ad3] -C10k problem - Wikipedia~ https://en.wikipedia.org/wiki/C10k_problem -TheC10kProblem~ http://www.hyuki.com/yukiwiki/wiki.cgi?TheC10kProblem -Web2.0の先にあるC10K問題 - @IT~ http://www.atmarkit.co.jp/news/analysis/200701/09/c10k.html **NginxとNode.js [#l012f5a5] ***Node.js [#v9f9c882] -Node.js を5分で大雑把に理解する - Qiita~ http://qiita.com/hshimo/items/1ecb7ed1b567aacbe559 -Node.jsについて調べてみた - Qiita~ http://qiita.com/kyrieleison/items/f726061803a0e536c3e1 -node.jsの仕組み(ノンブロッキングI/Oとかスレッドとか) - 元リア充エンジニアのメモ~ http://satoshun00.hatenadiary.com/entry/2012/08/02/172936 -注目のサーバサイドJavaScript実行環境「Node.js」 | 最新の技術・取り組み | IIJ~ http://www.iij.ad.jp/company/development/tech/activities/nodejs/ ***Nginx [#z21c470f] -Nginxとは?Apacheとの違いについてエンジニアに聞いてみた | GMOクラウドアカデミー~ https://academy.gmocloud.com/qa/20160616/2761 -Apacheとnginxどちらを採用すべきかメリット・デメリット比較 - Qiita~ http://qiita.com/pink/items/7709218310b5cf11eabe **Windows, .NET [#pfe7b76a] -非同期 I/O - Web/DB プログラミング徹底解説 --(1/4)~ http://keicode.com/windows/win03.php --(2/4) OVERLAPPED~ http://keicode.com/windows/win04.php --(3/4) 完了ルーチン~ http://keicode.com/windows/win05.php --(4/4) I/O 完了ポート~ http://keicode.com/windows/win06.php -C#で非同期にする理由 【▲→川俣晶の縁側→ソフトウェア→技術雑記】~ http://mag.autumn.org/Content.modf?id=20130930175225 -c# - When should I use Async Controllers in ASP.NET MVC? - Stack Overflow~ http://stackoverflow.com/questions/30566848/when-should-i-use-async-controllers-in-asp-net-mvc **ノンブロッキングI/O [#ma2e8685] -ノンブロッキングI/Oと非同期I/Oの違いを理解する – PAYFORWARD~ http://blog.takanabe.tokyo/2015/03/26/240/ ---- Tags: [[:インフラストラクチャ]], [[:Windows]], [[:プログラミング]], [[:その他、開発の色々]], [[:.NET開発]]