- 追加された行はこの色です。
- 削除された行はこの色です。
[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]
「[[マイクロソフト系技術情報 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(エンジンエックス)
*nginxとNode.js [#e4cee847]
-[[nginx(エンジンエックス)>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]]
-Node.js(ノードジェイエス)
**Nginx [#m80767a6]
***Nginxの概要 [#ec6381b8]
Nginxでは、[[イベントループ>#f5929c15]]というモデルにより、~
同時リクエストを多く処理することに特化することで、C10K問題に対応する。
**[[nginx>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]] [#m80767a6]
***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]
UIサブシステムのメッセージループと同じ意味で利用される用語だが、~
Webサーバーに関するコンテキストでは、C10kに対応するアーキテクチャ用語として使用される。
-方式~
シングルスレッドでループ処理を回し、
--キューに溜まったイベントを処理していく方式。
--リクエストを1つのスレッドで受け取ることができる。
-特徴
--スレッドなどのリソース消費が少なくて済む。
-問題
--イベントループは、昔懐かしい、ノンプリエンプティブOSのように、~
--イベントループは、昔懐かしい、[[ノンプリエンプティブ・マルチタスク]]OSのように、~
どこかでブロッキングが発生すると、イベントループ全体がストップしてしまう。
--この「イベントループ」の問題を解決するのが「[[ノンブロッキングI/O>#kb7b2a4b]]」らしい。
***ノンブロッキングI/O [#kb7b2a4b]
-「イベントループ」の問題を解決するのが「ノンブロッキングI/O」らしい。
-簡単に、ブロッキングを防止することでイベントループの停止を防止する。
-仕組みとしては、ざっくり、
--ワーカースレッドプールと I/O 処理がうまく協調して動き、
--スレッドを節約して動作しているクライアントに処理完了後のコールバックを返す。
>という、非常に優れた方法であるらしい。
-.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
-Web2.0の先にあるC10K問題 - @IT~
http://www.atmarkit.co.jp/news/analysis/200701/09/c10k.html
**イベントループ [#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
**NginxとNode.js [#l012f5a5]
-イベントループなしでのハイパフォーマンス~
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/
**[[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/
***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
-非同期 (Async) がなぜ重要なのか (.NET) – tsmatz~
https://tsmatz.wordpress.com/2012/05/08/asp-net-mvc-async/
-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開発]]
Tags: [[:インフラストラクチャ]], [[:Windows]], [[:プログラミング]], [[:.NET開発]]