Отзывы и пожелания. Wargaming Public API
Дата: 28.10.2013 10:54:03

Я снова доехал до gap'а в базе игроков - до идентификаторов, которых нет в базе (около 9-го миллиона и дальше). В связи с этим появились странные вещи в мониторинге http-запросов:

Как видно, из-за уменьшения времени ответа практически до нуля резко увеличилось количество запросов. При этом резко увеличилось как число 200-х ответов, так и число 503-х. Меня это как-то насторожило, и я полез копать. Вот что я увидел в теле ответа 503:
shizz@hydra:/opt/hydra [] > curl -vv {URI here}
* About to connect() to api.worldoftanks.ru port 80 (#0)
* Trying 185.12.241.149...
* connected
* Connected to api.worldoftanks.ru (185.12.241.149) port 80 (#0)
> GET {URI here} HTTP/1.1
> User-Agent: curl/7.26.0
> Host: api.worldoftanks.ru
> Accept: */*
>
* additional stuff not fine transfer.c:1037: 0 0
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 503 Service Temporarily Unavailable
< Server: nginx
< Date: Sat, 26 Oct 2013 22:48:04 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
<
{"status":"error","error":{"field":"application_id","message":"REQUEST_LIMIT_EXCEEDED","code":407}}
* Connection #0 to host api.worldoftanks.ru left intact
* Closing connection #0
Господа, если вы отдаете 503 на отлуп по рейтам, то это необходимо указывать в документации. Иначе некоторые идиоты вроде меня так и будут долбить по вам с оверлоадом, не понимая "а какого хрена валятся 5хх". Может, на другие ошибки будут отдаваться другие коды HTTP?
MustBeDead: Как видно, из-за уменьшения времени ответа практически до нуля
резко увеличилось количество запросов. При этом резко увеличилось
как число 200-х ответов, так и число 503-х. Меня это как-то
насторожило, и я полез копать. Вот что я увидел в теле ответа
503:
shizz@hydra:/opt/hydra [] > curl -vv {URI here}
* About to connect() to api.worldoftanks.ru port 80 (#0)
* Trying 185.12.241.149...
* connected
* Connected to api.worldoftanks.ru (185.12.241.149) port 80 (#0)
> GET {URI here} HTTP/1.1
> User-Agent: curl/7.26.0
> Host: api.worldoftanks.ru
> Accept: */*
>
* additional stuff not fine transfer.c:1037: 0 0
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 503 Service Temporarily Unavailable
< Server: nginx
< Date: Sat, 26 Oct 2013 22:48:04 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
<
{"status":"error","error":{"field":"application_id","message":"REQUEST_LIMIT_EXCEEDED","code":407}}
* Connection #0 to host api.worldoftanks.ru left intact
* Closing connection #0
Господа, если вы отдаете 503 на отлуп по рейтам, то это необходимо указывать в документации. Иначе некоторые идиоты вроде меня так и будут долбить по вам с оверлоадом, не понимая "а какого хрена валятся 5хх". Может, на другие ошибки будут отдаваться другие коды HTTP?
Согласен. Рассмотрим возможность добавления данной ошибки в документацию.
Ошибка 503 подразумевает под собой превышение количества запросов к ресурсу.
shizz@hydra:/opt/hydra [] > curl -vv {URI here}
* About to connect() to api.worldoftanks.ru port 80 (#0)
* Trying 185.12.241.149...
* connected
* Connected to api.worldoftanks.ru (185.12.241.149) port 80 (#0)
> GET {URI here} HTTP/1.1
> User-Agent: curl/7.26.0
> Host: api.worldoftanks.ru
> Accept: */*
>
* additional stuff not fine transfer.c:1037: 0 0
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 503 Service Temporarily Unavailable
< Server: nginx
< Date: Sat, 26 Oct 2013 22:48:04 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
<
{"status":"error","error":{"field":"application_id","message":"REQUEST_LIMIT_EXCEEDED","code":407}}
* Connection #0 to host api.worldoftanks.ru left intact
* Closing connection #0
Господа, если вы отдаете 503 на отлуп по рейтам, то это необходимо указывать в документации. Иначе некоторые идиоты вроде меня так и будут долбить по вам с оверлоадом, не понимая "а какого хрена валятся 5хх". Может, на другие ошибки будут отдаваться другие коды HTTP?
Согласен. Рассмотрим возможность добавления данной ошибки в документацию.
Ошибка 503 подразумевает под собой превышение количества запросов к ресурсу.

Лимит запросов, который был мной установлен на гейте, равен 10 (на графике видно, что лимит не превышен). Это число было указано товарищем MustBeDead. Не сомневаюсь, что оно верное и это действительный лимит. Но вот проблема в том, что секунда - понятие растяжимое. Поясню.
Простейший пример. У меня есть лимит в один запрос в секунду. Я произвожу запросы:
0.00 - 0.21 R1
1.00 - 1.25 R2
2.00 - 2.19 R3
Сработает ли в этом случае флуд-контроль? Между окончанием запроса R1 и началом запроса R2 прошло меньше секунды - 0.79. Конкретный вопрос: интервал между запросами считается на момент начала запроса или на момент окончания?
Второй пример. Лимит 5 запросов в секунду. Тайминги:
0.00 - 0.05 R1
0.00 - 0.11 R2
0.00 - 0.02 R3
0.00 - 0.19 R4
0.00 - 0.08 R5
Все пять запросов лежат в пределах одной секунды. Такой порядок запросов будет определен флуд-контролем как, собственно, флуд? Или, все же, нужно лупить запросы с интервалом (1/Limit), как в примере ниже? Сейчас я работаю именно по такой схеме: в начале каждой секунды я вытаскиваю из очереди до десяти запросов и запускаю выполнение. Это верный подход или же нет? Или правильно, все же, вот так:
0.00 - 0.05 R1
0.20 - 0.31 R2
0.40 - 0.42 R3
0.60 - 0.79 R4
0.80 - 0.88 R5
Я прошу подробнее просветить общественность по поводу механизмов работы лимитов. Спасибо.
MustBeDead: Учитывайте, пожалуйста, время берется в расчет именно при приеме
запроса на севере, а не на клиентской машине (сервере).
При условии, что тайминг запросов приведен именно с Nginx, запросы будут успешно обработаны без нарушения квотирования.
При условии, что тайминг запросов приведен именно с Nginx, запросы будут успешно обработаны без нарушения квотирования.
Отзывы и пожелания. Wargaming Public API