「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>その他、開発の色々]] * 目次 [#z88dfb63] #contents *概要 [#o8e4fc83] 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、~ あまりにもクライアントの数が多くなると効率が悪化しサーバがパンクする問題のこと。 -スレッドなどのリソースを大量に消費してしまう。 -最近は、「C10M問題」(クライアント1,000万台問題)などが出て来ている。 *nginxとNode.js [#e4cee847] -[[nginx(エンジンエックス)>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]] -Node.js(ノードジェイエス) **[[nginx>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]] [#m80767a6] **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] UIサブシステムのメッセージループと同じ意味で利用される用語だが、~ Webサーバーに関するコンテキストでは、C10kに対応するアーキテクチャ用語として使用される。 -方式~ シングルスレッドでループ処理を回し、 --キューに溜まったイベントを処理していく方式。 --リクエストを1つのスレッドで受け取ることができる。 -特徴 --スレッドなどのリソース消費が少なくて済む。 -問題 --イベントループは、昔懐かしい、[[ノンプリエンプティブ・マルチタスク]]OSのように、~ どこかでブロッキングが発生すると、イベントループ全体がストップしてしまう。 --この「イベントループ」の問題を解決するのが「[[ノンブロッキングI/O>#kb7b2a4b]]」らしい。 ***ノンブロッキングI/O [#kb7b2a4b] -簡単に、ブロッキングを防止することでイベントループの停止を防止する。 -仕組みとしては、ざっくり、 --ワーカースレッドプールと I/O 処理がうまく協調して動き、 --スレッドを節約して動作しているクライアントに処理完了後のコールバックを返す。 >という、非常に優れた方法であるらしい。 -ASP.NETの同期コンテキスト上で機能する「[[async/await]]」は、~ ≒この、イベントループ、ノンブロッキングI/Oで動作する。 *参考 [#j6998bcc] **C10k [#v6f95ad3] -C10k problem - Wikipedia~ https://en.wikipedia.org/wiki/C10k_problem -Web2.0の先にあるC10K問題 - @IT~ http://www.atmarkit.co.jp/news/analysis/200701/09/c10k.html -TheC10kProblem~ 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、~ あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと~ http://www.hyuki.com/yukiwiki/wiki.cgi?TheC10kProblem **[[nginx>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]]とNode.js [#l012f5a5] ***[[nginx>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]] [#z21c470f] ***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/ **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 **イベントループ [#i1030dfd] -イベントループ - Wikipedia~ https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%AB%E3%83%BC%E3%83%97 -イベントループなしでのハイパフォーマンス~ C10K問題へのGoの回答 | プログラミング | POSTD~ http://postd.cc/performance-without-the-event-loop/ **ノンブロッキングI/O [#ma2e8685] -ノンブロッキングI/Oと非同期I/Oの違いを理解する – PAYFORWARD~ http://blog.takanabe.tokyo/2015/03/26/240/ ---- Tags: [[:インフラストラクチャ]], [[:Windows]], [[:プログラミング]], [[:その他、開発の色々]], [[:.NET開発]]