マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、
あまりにもクライアントの数が多くなると効率が悪化しサーバがパンクする問題のこと。

  • スレッドなどのリソースを大量に消費してしまう。
  • 最近は、「C10M問題」(クライアント1,000万台問題)などが出て来ている。

nginxとNode.js

nginx

Node.js

Node.jsの概要

サーバサイド JavaScript のNode.jsはノンブロッキングI/Oというモデルにより、
イベントループを止めてしまうようなブロッキングを回避し、C10K問題に対応する。

WindowsでNode.jsを使う。

  • Unix系OS向けの非同期I/O環境(epoll/kqueue/event port)を使用する「libev」ライブラリを使用していた。
  • Windows向けの非同期I/O環境(IOCP : Input/output completion port)を使用する「libuv」を開発した。
  • 現在、libeio / libev に代わって libuvが、Node.js のコアとして置き換わりつつある。

2つの方式

イベントループ

UIサブシステムのメッセージループと同じ意味で利用される用語だが、
Webサーバーに関するコンテキストでは、C10kに対応するアーキテクチャ用語として使用される。

  • 方式
    シングルスレッドでループ処理を回し、
    • キューに溜まったイベントを処理していく方式。
    • リクエストを1つのスレッドで受け取ることができる。
  • 特徴
    • スレッドなどのリソース消費が少なくて済む。

ノンブロッキングI/O

  • 簡単に、ブロッキングを防止することでイベントループの停止を防止する。
  • 仕組みとしては、ざっくり、
    • ワーカースレッドプールと I/O 処理がうまく協調して動き、
    • スレッドを節約して動作しているクライアントに処理完了後のコールバックを返す。

という、非常に優れた方法であるらしい。

  • .NETの「async/await」は、≒この、イベントループ、ノンブロッキングI/Oで動作する。

参考

C10k

  • TheC10kProblem
    「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、
    あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと
    http://www.hyuki.com/yukiwiki/wiki.cgi?TheC10kProblem

イベントループ

ノンブロッキングI/O

nginxとNode.js

nginx

Node.js

Windows, .NET


Tags: :インフラストラクチャ, :Windows, :プログラミング, :.NET開発


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-06-23 (水) 08:55:49 (1032d)