2014-12-22 4 views
1

나는 모든 나머지 api url을 보호 할 가장 효율적인 방법을 찾고 있습니다. 내가보고있는 보호는 입니다. "초당 사용자 당 호출자 수 제한"API (봄 MVC)

나는 인터넷에서 한 번 보았고 "Redis"또는 Guava RateLimiter를 사용했습니다.

솔직히 말하면 Redis를 사용한 적이 없으며 실제로 익숙하지 않습니다. 그러나 그것의 docs에보기에 아주 튼튼한 비율 제한 자 체계가 보인다.

나는 구아바의 RateLimiter도 살펴 보았습니다. 그리고 사용하기가 조금 더 쉬워 보입니다. (다시 설치하지 않아도됩니다.)

그래서 "내 경우에는"가장 좋은 해결책이 될 것이라고 제안하고 싶습니다.Redis를 "많이 사용 하시겠습니까?" 이미 RateLimter를 사용해 본 사람이 있습니까? 이것은 좋은 해결책입니까? 확장 성?

추신 : 나는 또한 상기 2 당신이 더 나은 선택

당신을 감사 있다고 생각하면 다른 솔루션을 요구하고있다!

답변

0

엄격한 규정은 없으며, 귀하의 특정 상황에 따라 다릅니다. "나는 Redis를 사용한 적이 없습니다"라는 가정하에, Guava RateLimiter를 권하고 싶습니다. redis에 비해 완전히 새로운 nosql 시스템 인 guava RateLimiter는 시작하기가 훨씬 쉽습니다. 몇 줄의 코드를 추가하면 구성 가능한 속도로 허가를 배포 할 수 있습니다. 남은 일은 사용자별로 요금 제한을 제공하는 등 필요에 맞게 적용하는 것입니다.

2

Guava의 RateLimiter가 현재 스레드를 차단하므로 많은 양의 스레드에 대한 비동기 호출이 차단되어 많은 스레드가 차단되어 사용 가능한 스레드가 줄어들 수 있습니다.

아마도 스프링 기반 라이브러리 Kite이 귀하의 필요를 충족시킬 것입니다. Kite의 "속도 제한 스로틀 (rate-limiting throttle)"은 일정 기간 동안 주 서버가 요청 수에 대한 구성 가능한 제한에 도달 한 후에 요청을 거부합니다. rate limiter는 스프링 보안을 사용하여 관련된 principal을 결정합니다.

그러나 Kite는 여전히 단일 JVM 접근 방식입니다. 클러스터 인식 방식이 필요하다면 Redis가 필요합니다.