Реклама | Adv
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
Сообщения форума
Реклама | Adv

Отзывы и пожелания. Wargaming Public API

Дата: 28.10.2013 10:54:03
Просмотр сообщенияshizzard (27 Окт 2013 - 02:30) писал: Господа разработчики, у меня созрело несколько пожеланий и отзывов.
Я снова доехал до 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
<<br />{"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
<<br />{"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 подразумевает под собой превышение количества запросов к ресурсу.

Просмотр сообщенияshizzard (27 Окт 2013 - 02:30) писал: Второй вопрос уже конкретно по рейтам. Если вы не против, задам его здесь, раз уж здесь начал разливать вайн.
Лимит запросов, который был мной установлен на гейте, равен 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, запросы будут успешно обработаны без нарушения квотирования.

Реклама | Adv