사용자를 시간당 25k/요청으로 제한하고 싶습니다.웹 기반 앱에서 요청을 제한하는 할당량 시스템 구현
첫 번째 아이디어는 mysql을 사용하고 사용자 테이블에 요청을 저장하는 열이 있고 사용자가 요청할 때마다이 카운터를 증가시키는 것입니다. 이 접근법의 문제점은 때때로 열에 동시에 글을 쓰게되고 mysql에서 교착 상태가 발생하는 경우가 있기 때문에이 방법이 좋은 방법이 아닌가?
또 다른 방법은 열의 카운터를 증가시키지 않고 별도의 테이블에 로그 레코드를 삽입 한 다음 주어진 시간 간격 동안이 레코드를 계산하는 것입니다. 그러나이 방법을 사용하면 백만 개의 레코드 테이블과 쿼리가 너무 느려질 수 있습니다.
RDBMS를 사용하는 경우 각 요청시 데이터베이스에서 사용자 할당량을 계산해야하며 위의 방법 중 하나에 따라 시간이 걸릴 수 있다는 점을 고려해야합니다.
두 번째 아이디어, redis/memcached (대안이 확실하지 않거나 어느 것이 더 빠르는지)를 사용하여 요청 카운터를 저장하는 것이 좋습니다. 이것은 쿼리와 카운터를 증가시키기에 충분히 빠르며, RDBMS보다 확실히 빠르지 만 방대한 양의 데이터로 시도하지 않았기 때문에 아직 어떻게 수행 될지 확신 할 수 없습니다.
제 3의 아이디어는지도에서 메모리에 할당량 데이터를 유지하는 것이고 map[int]int
과 같은 것이고 키는 user_id이고 값은 할당량 사용이며 뮤텍스가있는지도 액세스를 보호합니다. 이것은 가장 빠른 해결책 일 것입니다. 그러나 어떤 이유로 앱이 다운되면 특정 사용자가 한 요청 수와 관련된 모든 데이터를 잃게됩니다. 한 가지 방법은 충돌 할 때 앱을 잡아서지도를 반복하고 데이터베이스를 업데이트하는 것입니다. 이것이 가능한가?
위의 방법 중 하나가 올바른 방법인지는 모르겠지만 제안 사항에 대해서는 확신 할 수 없습니다.
웹 응용 프로그램에 대해 이야기하고 있기 때문에 많은 간단한 카운터를 보유하는 메모리 구조를 최적화 한 HAProxy를 사용하면 간단하고 훨씬 가벼운 솔루션을 만들 수 있습니다. 속도 제한] (http://blog.serverfault.com/2010/08/26/1016491873/). –