[[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開発]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS