web-dev-qa-db-ja.com

メモリフットプリントが最小の最速のWebサーバーソリューションは何ですか?

非常に単純なPOST/GETリクエストをJSONとして提供するWebサーバーが必要です。 MVC、Rails、Djangoは必要ありません。メモリをほとんど消費しないものが必要です。できれば、要求ごとに約5Kが必要です。 Webサーバーは、FacebookThriftを使用してScribeなどのバックエンドサービスと通信します。各httpリクエストはSQLLiteデータベースにもアクセスします。ユーザーごとに1つであり、ユーザーのデータは重複しません。静的なhtmlファイルとjsonWebサービスを提供します。

私は次のことを考えています:

  • PHPを使用したNjinx、
  • LuaのKepler、
  • libeventまたはlibevで自分自身をローリングし、おそらくLuaに呼びかけます。
  • MochiWeb。

これらのオプションのどれが最適で、他にどのようなオプションがありますか?私は基本的なスクリプトにPHP、python、またはLuaを使用でき、基本的なCも実行できます。私はある種のErlangソリューションに傾倒しています。

24
John Wright

私はnginx( https://nginx.org/ )で良い経験をしましたが、Webサーバーを選択するときは、要件を注意深く調べ、十分な情報に基づいて決定を下す必要があります。非常にアプリケーション固有にすることができます。

この質問では、多くの人がg-wan、Webmachineなどを推奨していることに気付くでしょう...これらはすべて、ユースケースに対してより高速であるかどうかを確認するためのベンチマークです。

これはチアリーディングを奨励する種類の質問であり、「正しい答え」はありません。

41
jonnii

Webmachineの作成者の一人として、喜んでお手伝いさせていただきます。私がフォローアップしている理由の1つは、WebmachineにJSON関連のコードがない場合でも、さまざまなJSON要求と応答を処理するために日常的に使用していることを知っておくと役立つ場合があるためです。それはシンプルで、きれいに拡張可能で、適度にうまく機能します。

静的配信が必要な場合は、nginxやlighttpdなどが当然の方法です。静的リクエストと動的リクエスト、および組み込みの優れたWeb動作が混在している場合は、Webmachineが適していることがあります。

http://code.google.com/p/webmachine/wiki/ExampleResources の簡単なサンプルコードと http://blog.therestfulway)のブログの最近の投稿を確認してください。詳細については、.com / を参照してください。

それは私たちにとってうまくいきました。ご不明な点がございましたら、お気軽にお問い合わせください。

11
Justin Sheehy

Www.cherokee-project.comのチェロキーWebサーバー

9
at-vRobM

フットプリントを測定するには、実行可能ファイルのサイズを確認してください(共有ライブラリを忘れないでください)。

TrustLeap G-WAN(150 KB、依存関係なし)は、Java、C/C++、Objective-C、およびDスクリプトを提供します。

これらのベンチマークによると、高速で実行しながら、NginxやLighttpdよりも少ないメモリとCPUリソースを使用します。

http://www.gwan.ch/benchmark

9
Pierre

Lighttpd は優れたフットプリントを備えており、メモリの大部分は、使用する言語を選択した場合に使用される可能性があります(Cルートを使用しない限り、これは実際には推奨されません)。

8
Edward Z. Yang

「軽量」Webサーバーのかなり広範なリストを含むIBMdeveloperWorksに関する記事があります。
軽量Webサーバー:http://www.ibm.com/developerworks/web/library/wa-ltwebserv/

7
Harry Tsai

Mochiwebは超軽量で、ばかげた高負荷を処理します。

7
madlep

最速の組み込みWebサーバーの受け渡しはSnorkelです-Webサイトをチェックアウトしてください。abを使用したテストでnginxが破壊されました。 http://sites.google.com/site/snorkelembedded

4
Walt C.

G-WAN(ANSICスクリプトを含む150KB)にはネイティブJSONパーサーがあり、機能があればおそらく最速です(テキストからのインポート/エクスポートに加えて、名前または値でエントリを検索できます)。

150 KBのフットプリント(サーバーとスクリプトエンジンを含む)を超えることは困難です。

4
Lara

CまたはLuaの場合、Mongooseはオプションです https://github.com/valenok/mongoose 。これは、主に接続ごとのデータにリクエスト用のバッファと事前に割り当てられたヘッダーがあり、最大リクエストサイズがデフォルトで16kに設定されているため、リクエストごとに5k以上を​​使用します。これは調整可能ですが、5k未満にするのに問題はありません。Mongooseを埋め込むときにmongoose.cの#define MAX_REQUEST_SIZE 16384を変更するだけです。フットプリントに関しては、Lua(必要な場合)とSSL(必要な場合)を除いて、ディスク上で約50kコンパイルされます。ランタイムフットプリントはOSによって異なります。

3
valenok

this を見てください。それこそがあなたが探している情報だと思います。フル機能のWebサーバーは必要ないため、Erlang + libevent/libevを使用することをお勧めします。

3
Andy Song

Pythonについて言及したので、ポート80でリッスンし、URLをアクションにマップする非常に簡単な方法については、 web.py を参照してください。

また、標準のWebサーバー(つまり、Nginx/FastCGIの背後)とペアリングする場合は、お気に入りのCGIを介して実行されます。次に、静的ファイルでの大規模な同時実行のためにNginxの記録を2番目にします。 (彼らはRedditのLighttpdでそれを使用しました。)

thttpd は、特に組み込みシステムのようにメモリが非常に不足している場合に、私が見るもう1つのWebサーバーです。

2
joelhardi

Nginxは、Varnish(Facebookで使用されるキャッシュ)およびApache Traffic Server(Yahoo!で使用されるキャッシュ)と比較されます。

そして、Nginxの背後にいる男であるIgor Sysoevは、不足していません 彼のブログへのコメント

1
Grishka

CまたはC++でコーディングできれば、lighttzが最速で、使用するメモリが最も少ないと思います。ただし、そうなる理由は、libevを使用していて、phpサポートも、htmlサポートもまったくないためです。それが提供するのは、uが各httpリクエストを処理するコールバック関数だけです。 http GET/POSTリクエストを解析し、htmlを文字列として返す必要があります。 nginx、lighttpd、Apacheなどに対してベンチマークされており、一番上に表示されていることがわかります( link )。

1
Hao Wooi Lim

FAPWS(Fast Asynchronous Python WSGIサーバー)をご覧ください。プロジェクトの哲学はニーズに完全に一致します。 http://www.fapws.org

1
William

Koanlogic.comサイトでkloneを見てください...組み込みシステムをターゲットにしているのは非常に小さく、偶然にも非常に高速です: http://john.freml.in/teepeedee2-vs-klone 。スキル/好みに応じて、C/C++(超パフォーマンス)または通常のPHP/CGI(パフォーマンスがはるかに低い)でスクリプト化できます...

1
babongo