저는 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();
}
내가 얻은 결과가 합리적으로 보입니까? 그렇다면이 시나리오에서 표현하는 것이 재구성하는 것보다 더 효율적일까요? 아니면 내가 테스트 한 방식에 오류가 있습니까?
댓글에 대한 응답으로 업데이트 됨
재화의 행동
-
1000 요청 이상의 부하로 공급되면 1015 요청까지 수신하고 아무것도하지 않는 1 초 만에 처리를 중지했습니다. 즉. 들어오는 요청을 계산하기 위해 구현 한 카운터는 1015 이후 증가를 중지했습니다.
-
심지어 100 reqs의 부하로 먹일 때. 초당 1015까지 수신했고 그 이후에는 응답하지 않았습니다.
답변
정오표 :이 정보는 이제 잘못되었습니다. 계속 스크롤하세요!
Restify 테스트가 의도하지 않은 경로에서 수행되도록하는 스크립트에 문제가 있습니다. 이로 인해 연결이 유지되어 오버 헤드 감소로 인해 성능이 향상되었습니다.
2015 년이고 그 이후로 상황이 많이 변했다고 생각합니다. Raygun.io는 hapi , express 및 restify를 비교 하는 최근 벤치 마크 를 게시했습니다 .
그것은 말한다 :
또한 Restify가 연결을 유지하여 동일한 클라이언트에서 호출 될 때마다 연결을 만드는 오버 헤드를 제거한다는 사실도 확인했습니다. 공정하게 말하면 연결을 닫는 구성 플래그로 Restify를 테스트했습니다. 분명한 이유로 해당 시나리오에서 처리량이 크게 감소하는 것을 볼 수 있습니다.
Restify가 더 쉬운 서비스 배포를위한 승자 인 것 같습니다. 특히 동일한 클라이언트로부터 많은 요청을 받고 빠르게 이동하려는 서비스를 구축하는 경우. 물론 DTrace 지원과 같은 기능이 포함되어 있기 때문에 네이 키드 노드보다 훨씬 더 많은 비용을 지불 할 수 있습니다.
답변
이것은 2017 년 이며 Raygun.io 가 hapi , express, restify 및 Koa를 비교 한 최신 성능 테스트 입니다.
Koa가 다른 프레임 워크보다 빠르다는 것을 보여 주지만이 질문은 express 및 restify에 관한 것이므로 Express가 restify보다 빠릅니다.
그리고 그것은 포스트에 기록됩니다
이것은 실제로 Restify가 내 초기 테스트에서보고 된 것보다 느리다는 것을 보여줍니다.
답변
Node Knockout 설명 에 따르면 :
restify는 Node.js에서 REST 웹 서비스를 만들기 위해 만들어진 node.js 모듈입니다. restify는 버전 관리, 오류 처리 및 콘텐츠 협상과 같은 이러한 서비스를 구축하는 데 따르는 많은 어려운 문제를 더 쉽게 만듭니다. 또한 애플리케이션의 성능 문제가 어디에 있는지 빠르게 찾을 수 있도록 무료로 제공되는 내장 DTrace 프로브를 제공합니다. 마지막으로, 실패한 연결에 대한 재시도 / 백 오프를 처리하는 강력한 클라이언트 API와 몇 가지 다른 장점을 제공합니다.
성능 문제와 버그를 수정할 수 있습니다. 아마도 그 설명이 적절한 동기가 될 것입니다.
답변
ab를 통해 OS X에서 여러 프레임 워크를 벤치마킹하는 비슷한 문제가 발생했습니다. 일부 스택은 약 1000 번째 요청 이후 지속적으로 사망했습니다.
한계를 크게 넘어 섰고 문제가 사라졌습니다.
maxfiles가 ulimit , (또는 launchctl limit <OS X 전용)에 있는지 확인하고 최대 값을 확인할 수 있습니다.
도움이 되었기를 바랍니다.
답변
나는 express 또는 restify 또는 perfectAPI와 혼동했습니다. 그들 모두에서 모듈을 개발하려고 시도했습니다. 주요 요구 사항은 RESTapi를 만드는 것이 었습니다. 그러나 마침내 익스프레스로 끝났고 모든 프레임 워크에 대한 초당 요청으로 내 자신을 테스트했으며 익스프레스는 다른 것보다 더 나은 결과를 제공했습니다. 어떤 경우에 resify는 표현보다 빛나지 만 레이스에서 우승하기 위해 솔기를 표현합니다. 나는 Express에 엄지 손가락을 댄다. 그리고 네, 또한 locomotive js, 일부 MVC 프레임 워크가 express를 기반으로 구축되었습니다. Express 및 jade를 사용하는 완전한 MVC 앱을 찾는 사람은 기관차를 찾으십시오.