왜 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 요청 이상의 부하로 공급되면 1015 요청까지 수신하고 아무것도하지 않는 1 초 만에 처리를 중지했습니다. 즉. 들어오는 요청을 계산하기 위해 구현 한 카운터는 1015 이후 증가를 중지했습니다.

  2. 심지어 100 reqs의 부하로 먹일 때. 초당 1015까지 수신했고 그 이후에는 응답하지 않았습니다.


3
당신은 이것을 통과 했습니까 : blog.perfectapi.com/2012/… ? Google에서 검색하면 성능에 의문을 가진 많은 사람들을 듣게 될 것입니다.
Munim

3
경로를 구문 분석하거나 데이터를 요청하는 동안 어딘가에 블록을 재지 정하고 효율적으로 수행하지 않아 부하가 높은 응답 시간이 급증 할 수 있습니다. Express.js는 가볍지 만 기능이 풍부합니다. 사용하지 않는 기능은 전반적인 성능에 큰 영향을 미치지 않기 때문에 제작 방식은 여전히 ​​밝습니다. 뿐만 아니라 대기업에서 잘 유지 관리되고 사용됩니다. 그 예 중 하나는 MySpace입니다. REST API에 Express.js를 사용하는 것의 단점을 볼 수 없습니다 (실제로 정확히했습니다). 실제로 기능이 있기 때문에 향후 API를 개선 할 수 있습니다.
moka jul.

1
@Munim : 그래프 감사합니다. 그러나 페이지에 " 참고,이 차트는 Restify 성능 문제가 해결되었으므로 오래된 것입니다."라고 표시됩니다. 그러나 아무것도 해결되지 않은 것 같습니다. !!
mithunsatheesh

1
@mithunsatheesh 저도 알아 차 렸습니다. 그러나 저자가 새로운 연구를하지 않았기 때문에 나는 그것을 약간의 소금으로 가져 갔다. github의 문제는 여전히 사람들이 성능에 대해 불평하고 있습니다.
Munim 2013-07-11

2
더 많은 샘플 코드를 제공 할 수 있습니까?
Adrian Heine

답변:


50

정오표 :이 정보는 이제 잘못되었습니다. 계속 스크롤하세요!

Restify 테스트가 의도하지 않은 경로에서 수행되도록하는 스크립트에 문제가 있습니다. 이로 인해 연결이 유지되어 오버 헤드 감소로 인해 성능이 향상되었습니다.


2015 년이고 그 이후로 상황이 많이 변했다고 생각합니다. Raygun.io는 hapi , express 및 restify를 비교 하는 최근 벤치 마크 를 게시했습니다 .

그것은 말한다 :

또한 Restify가 연결을 유지하여 동일한 클라이언트에서 호출 될 때마다 연결을 만드는 오버 헤드를 제거한다는 사실도 확인했습니다. 공정하게 말하면 연결을 닫는 구성 플래그로 Restify를 테스트했습니다. 분명한 이유로 해당 시나리오에서 처리량이 크게 감소하는 것을 볼 수 있습니다.

Raygun.io의 벤치 마크 이미지

Restify가 더 쉬운 서비스 배포를위한 승자 인 것 같습니다. 특히 동일한 클라이언트로부터 많은 요청을 받고 빠르게 이동하려는 서비스를 구축하는 경우. 물론 DTrace 지원과 같은 기능이 포함되어 있기 때문에 네이 키드 노드보다 훨씬 더 많은 비용을 지불 할 수 있습니다.


1
저자가 자신이 따랐던 테스트 프로세스에 대한 자세한 내용을 공개하는 경우 언급 한 블로그 게시물이 유용합니다. 게시물 아래의 댓글을 확인하세요!
mithunsatheesh

1
예, 맞습니다. 벤치마킹이 제대로 수행되기 어렵 기 때문에 작성자가 프로세스와 코드를 게시하면 좋을 것입니다. 그래서 저는 이것을 소금 한 알로 받아 들여 커뮤니티와 나누고 싶었습니다.
Masum 2015 년

Restify 문서에 따르면 DTrace도 지원합니다. mcavage.me/node-restify/#dtrace
제프 Fairley에게


3
결론을 내리기 전에 언급 된 동일한 기사의 부록을 참고하십시오.
Vignesh TV

26

이것은 2017 년 이며 Raygun.iohapi , express, restify 및 Koa를 비교 한 최신 성능 테스트 입니다.

Koa가 다른 프레임 워크보다 빠르다는 것을 보여 주지만이 질문은 express 및 restify에 관한 것이므로 Express가 restify보다 빠릅니다.

그리고 그것은 포스트에 기록됩니다

이것은 실제로 Restify가 내 초기 테스트에서보고 된 것보다 느리다는 것을 보여줍니다.

여기에 이미지 설명 입력


11

Node Knockout 설명 에 따르면 :

restify는 Node.js에서 REST 웹 서비스를 만들기 위해 만들어진 node.js 모듈입니다. restify는 버전 관리, 오류 처리 및 콘텐츠 협상과 같은 이러한 서비스를 구축하는 데 따르는 많은 어려운 문제를 더 쉽게 만듭니다. 또한 애플리케이션의 성능 문제가 어디에 있는지 빠르게 찾을 수 있도록 무료로 제공되는 내장 DTrace 프로브를 제공합니다. 마지막으로, 실패한 연결에 대한 재시도 / 백 오프를 처리하는 강력한 클라이언트 API와 몇 가지 다른 장점을 제공합니다.

성능 문제와 버그를 수정할 수 있습니다. 아마도 그 설명이 적절한 동기가 될 것입니다.


5

ab를 통해 OS X에서 여러 프레임 워크를 벤치마킹하는 비슷한 문제가 발생했습니다. 일부 스택은 약 1000 번째 요청 이후 지속적으로 사망했습니다.

한계를 크게 넘어 섰고 문제가 사라졌습니다.

maxfiles가 ulimit , (또는 launchctl limit <OS X 전용)에 있는지 확인하고 최대 값을 확인할 수 있습니다.

도움이 되었기를 바랍니다.


흠 .. 모든 연결이 로컬 파일 시스템에서 임시 파일을 여는 connect.bodyParser () 문제와 비슷하게 들리나요?
Eric Elliott

OS에는 일반적으로 프로세스, 스레드 및 / 또는 OS가 동시에 처리 할 수있는 파일 설명자 수에 대한 구성 가능한 제한이 있습니다. Linux : stackoverflow.com/questions/760819/… MacOS X : stackoverflow.com/questions/7578594/…
AndreasPizsa

2

나는 express 또는 restify 또는 perfectAPI와 혼동했습니다. 그들 모두에서 모듈을 개발하려고 시도했습니다. 주요 요구 사항은 RESTapi를 만드는 것이 었습니다. 그러나 마침내 익스프레스로 끝났고 모든 프레임 워크에 대한 초당 요청으로 내 자신을 테스트했으며 익스프레스는 다른 것보다 더 나은 결과를 제공했습니다. 어떤 경우에 resify는 표현보다 빛나지 만 레이스에서 우승하기 위해 솔기를 표현합니다. 나는 Express에 엄지 손가락을 댄다. 그리고 네, 또한 locomotive js, 일부 MVC 프레임 워크가 express를 기반으로 구축되었습니다. Express 및 jade를 사용하는 완전한 MVC 앱을 찾는 사람은 기관차를 찾으십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.