2013-07-05 6 views
1

빌드중인 응용 프로그램이 페이스 북 그래프 API에 많은 수의 호출을 만듭니다 (그러나 속도 제한이있는 API 일 수 있음). 논쟁의 여지는 한계가 10 분당 600 회의 요청이라고 가정 해 봅시다.node.js 타사 API 호출의 응용 프로그램 수준 속도 제한

개별 스레드의 속도를 제한하기 위해 https://github.com/jhurliman/node-rate-limiter을 사용하고 있지만, 매크로 앱 수준에서 모든 Facebook API 호출의 속도 제한 때문에 전체적으로 앱이 제한을 초과하지 않도록해야합니다.

나는 그것을 실제로 어떻게 달성 해야할지 잘 모릅니다. 나는 노드에 상당히 익숙하지 않으며 이것에 대한 해결책이 어떻게 생겼는지에 대한 개념이 없다.

Facebook의 요금 한도가 앱 당 또는 인증 된 사용자 당인지 여부는 알 수 있습니다. 나는 app, 그러므로이 문제를 추측하고있다.

+1

나는 틀릴 수도 있지만 FB 속도 제한은 들어오는 요청의 계정 자격 증명이나 소스 IP 주소를 기반으로한다고 생각합니다. –

+0

이것이 사실 인 것처럼 보입니다 ... 그렇지 않으면 다시보고하겠습니다. – metalaureate

답변

2

모든 요청의 집계에 따라 특정 리소스에 대한 액세스를 제한해야하는 경우 해당 리소스에 대한 모든 액세스를 캡슐화하고 제어하는 ​​별도의 http 서비스를 만들 수 있습니다.

에서, 당신은 명시 적 사용하는 가정 및 응용 프로그램이 포트 80에서 실행되는 :

var express=require('express'), 
    app=express(); 

app.get(route,function(req,res){ 
    ... do things here that need access to the FB Graph API 
}); 

app.listen(80); 

나는 당신의 app.js에 다음 줄을 추가 할 것, 새로운 서버를 생성 포트 8080에서 실행 :

var fbApiGatewayApp=express(); 

fbApiGatewayApp.get('/fb',function(req,res){ 
    ... provide access to FB Graph API here 
}); 

fbApiGatewayApp.listen(8080); 

여기서 FBAP에 대한 액세스를 제어하는 ​​경로가 FB API에 대한 액세스를 제어합니다.

는 원래 응용 프로그램을 리팩토링 있도록 는 FB API에 요청을 제출해야합니다 (http.js을 통해)이 새로운 게이트웨이 서비스 만 통화 경로.

그러면 FB의 요구 사항에 맞게이 새로운 서비스의 속도를 제한 할 수 있습니다.

또한 외부 세계로부터의 액세스를 제한하기 위해 (localhost - 127.0.0.1에서 실행되는) 기본 앱에서 시작되지 않은 모든 요청을 거부하게 만듭니다. (방화벽을 사용하여 동일하게 수행 할 수 있습니다.)

+0

고마워요. Fb 제한이 토큰마다 있다는 사실이 밝혀 지므로 세션 별 제한이 잘되어야합니다. 그러나 이것은 나중에 참조 할 수있는 좋은 아키텍처입니다. – metalaureate

+0

필자는 다소 덜 우아한 대체 솔루션을 제안 했었습니다. 백엔드 db는 진행중인 보고서의 수를 알고 있으므로 모든 보고서의 시작 부분에 최대 리미터 비율을 생성되는 동시 보고서 수로 나누었습니다. – metalaureate