Restifyを使用する理由


101

私はnode.jsでREST APIを構築する必要があり、おそらく不要な機能を回避し、REST APIを構築するためのカスタム構築フレームワークのように機能する、express.jsよりも軽量のフレームワークを探していました。同じケースでは、イントロからのRestifyをお勧めします。

読み込み使用はrestifyと表現しないのはなぜ?restifyは良い選択のようです。

しかし、私が両方を負荷で試したとき、驚きは来ました。

RestifyでサンプルREST APIを作成し、毎秒1000リクエストでフラッディングしました。驚いたことに、しばらくするとルートが応答しなくなりました。express.jsで構築された同じアプリがすべてを処理しました。

私は現在、APIに負荷をかけています

var FnPush = setInterval(function() {           
    for(i=0;i<1000;i++) 
        SendMsg(makeMsg(i));                
}, 1000);

function SendMsg(msg) {
    var post_data = querystring.stringify(msg);
    var post_options = {
        host: target.host,
        port: target.port,
        path: target.path,
        agent: false,
        method: 'POST',
        headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Content-Length': post_data.length,
                "connection": "close"
            }
    };

    var post_req = http.request(post_options, function(res) {});
    post_req.write(post_data);  
    post_req.on('error', function(e) {          
    }); 
    post_req.end();
}

私が得た結果は理にかなっていると思いますか?そして、もしそうなら、このシナリオでは再表現よりもエクスプレスの方が効率的ですか?または、それらをテストした方法にエラーがありますか?

コメントに応じて更新

再調整の動作

  1. 1000 req.sを超える負荷が供給された場合、1015 req.sまで受信してから何もせずに、わずか1秒で処理を停止しました。すなわち。着信要求をカウントするために実装したカウンターは、1015以降に停止しました。

  2. 100 reqsの負荷で供給された場合。1秒あたり1015まで受信し、その後応答しなくなりました。


3
これを経験しましたか:blog.perfectapi.com/2012/…?グーグルで検索すると、多くの人がそのパフォーマンスに疑問を持っているのを聞くでしょう。
Munim 2013

3
ルートまたはリクエストデータの解析中にブロックのどこかを再指定すると、効率的に行われず、高負荷で応答時間が急上昇する可能性があります。Express.jsは軽量ですが、機能が豊富です。それが作られている方法は、未使用の機能が全体的なパフォーマンスにあまり影響を及ぼさないため、依然として軽量になります。同様に、それはよく管理され、大企業で使用されています。その1つがMySpaceです。REST APIにExpress.jsを使用するデメリットはありません(私は実際にそれを実際に行いました)。これにより、将来的には機能性があるため、APIを改善することができます。
moka 2013

1
@Munim:グラフをありがとう。しかし、ページには「メモ、Resifyパフォーマンスの問題が解決されたため、このチャートは古くなっています」と記載されています。しかし、何も解決されていないようです。!!
mithunsatheesh 2013

1
@mithunsatheesh私もそれらに気づきました。しかし、著者は新鮮な研究をしていなかったので、私はそれを少々の塩で取りました。GitHubの問題には、依然としてパフォーマンスについて不平を言う人々がいます。
Munim 2013

2
より多くの(再具体化)サンプルコードを提供できますか?
エイドリアンハイネ

回答:


50

正誤表:この情報は間違っています。スクロールし続けてください!

スクリプトに問題があり、Restifyテストが意図しないルートで実行されていました。これにより、接続が維持され、オーバーヘッドの削減によりパフォーマンスが向上しました。


これは2015年で、状況は大きく変わったと思います。Raygun.ioは、hapi、express、resifyを比較する最近のベンチマークを投稿しました。

それは言う:

また、Restifyは接続を維持し、同じクライアントから呼び出されるたびに接続を作成するオーバーヘッドを排除することも確認しました。公平を期すために、接続を閉じるという構成フラグでRestifyもテストしました。明らかな理由により、このシナリオではスループットが大幅に低下します。

Raygun.ioのベンチマーク画像

Restifyは、サービスの導入を容易にするための勝者のようです。特に、同じクライアントから多くのリクエストを受け取り、迅速に移動したいサービスを構築している場合。もちろん、DTraceサポートなどの機能が組み込まれているため、ネイキッドノードよりもはるかに多くの費用がかかります。


1
あなたが言及しているブログ投稿は、著者が彼がフォローしたテストプロセスの詳細を開示している場合に役立ちます。投稿の下のコメントをご覧ください!
mithunsatheesh 2015年

1
はい、そうです。ベンチマークを正しく実行するのは難しいので、作成者がプロセスとコードを投稿すればすばらしいでしょう。だから私はこれを一粒の塩とみなし、コミュニティと共有したいと思いました。
Masum

Restifyのドキュメントによると、DTraceもサポートしています。mcavage.me/node-restify/#dtrace
Jeff Fairley、


3
結論に入る前に、同じ記事の追記に注意してください。
Vignesh TV 2017

26

これは2017年であり、Raygun.ioによる最新のパフォーマンステストで、hapi、express、resify、Koaを比較しています。

これは、Koaが他のフレームワークよりも速いことを示していますが、この質問はExpressおよびRestifyに関するものであるため、ExpressはRestifyよりも高速です。

そしてそれはポストに書かれています

これは、実際にRestifyが最初のテストで報告されたものよりも遅いことを示しています。

ここに画像の説明を入力してください


11

ノードノックアウトの説明によると:

restifyは、NodeでREST Webサービスを作成するために作成されたnode.jsモジュールです。restifyは、バージョン管理、エラー処理、コンテンツネゴシエーションなど、このようなサービスを構築する上での多くの困難な問題を容易にします。また、DTraceプローブが組み込まれているため、無料でアプリケーションのパフォーマンスの問題がどこにあるのかをすばやく見つけることができます。最後に、接続が失敗した場合の再試行/バックオフを処理する堅牢なクライアントAPIとその他の機能を提供します。

パフォーマンスの問題とバグはおそらく修正できます。多分その説明は十分な動機になるでしょう。


5

私はabを介してOS Xで複数のフレームワークをベンチマークする同様の問題に遭遇しました。スタックの一部は、1000回目のリクエスト後に一貫して死にました。

制限を大幅に変更し、問題は解消しました。

maxfilesがulimitで(またはlaunchctl limit <OS Xのみ)であることを確認し、最大値を確認できます。

お役に立てば幸いです。


うーん.. connect.bodyParser()の問題に似ているように聞こえますが、すべての接続でローカルファイルシステムの一時ファイルが開かれます。
エリックエリオット

OSは通常、プロセス、スレッド、OSが同時に処理できるファイル記述子の数に構成可能な制限があります。Linuxの場合:stackoverflow.com/questions/760819/... のMacOS Xの場合:stackoverflow.com/questions/7578594/...
AndreasPizsa

2

私は、エクスプレス、リスティファイ、またはperfectAPIと混同さ​​れていました。それらすべてでモジュールを開発することさえ試みました。主な要件は、RESTapiを作成することでした。しかし、最終的にはエクスプレスで終わり、すべてのフレームワークで行われた1秒あたりのリクエストで自分をテストしました。エクスプレスは他のものよりも優れた結果を出しました。場合によっては、明確に表現し直しますが、レースに勝つために継ぎ目を表現します。私は急いで親指を立てます。そしてはい、私は機関車のjsにも出会いました。いくつかのMVCフレームワークはExpressの上に構築されています。ExpressとJadeを使用した完全なMVCアプリを探している人は、機関車を探してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.