2014-10-16 2 views
14

У меня и нескольких других разработчиков есть конкурс ИИ. В принципе, у нас есть простая настольная игра, и мы каждый из написанных AI, которые будут размещены на наших собственных веб-сервисах, будут играть друг против друга.Is Azure Throttling My WebApi?

У меня есть один и тот же запуск, который является простой службой на основе WebApi 2, которая публикуется в Azure. Я ожидаю, что в большинстве случаев это будет тихо, а затем, когда игра начнется, она получит 200-400 запросов все потенциально очень быстро (игра может длиться всего несколько секунд). Игровой сервер и ИИ общаются с прогонными JSON POST.

Моя проблема заключается в том, что Azure, по-видимому, регулирует запросы. Первые несколько ходов происходят очень быстро, а затем все замедляется.

Мне интересно, Azure считает, что это потенциальная атака DOS или что-то в этом роде. Это может занять более секунды, чтобы вернуться назад, когда ситуация замедляется. Несколько объектов, представляющих интерес:

  • Это никогда не происходит при размещении на месте.
  • Нет базы данных.
  • Это происходит даже с простым тестовым ИИ, который просто перемещает фигуры случайно (так что никакой вычислительной нагрузки)
  • Это происходит, когда игровой хост также развернут к Azure (так что это два сайта Azure, говорящие друг с другом).

Так как я могу это исправить? Есть ли где-то где-то где-то отсутствует, где я могу сказать Azure, такое поведение ожидается? В настоящее время я использую его как услугу Shared, но раньше я тестировал его как базовый сервис с двумя экземплярами, и я все еще наблюдал замедление.

+0

Что такое Лазурный план? – usr

+0

Я пробовал это как общий, так и базовый план. При тестировании в качестве основного я также попытался увеличить число экземпляров до 2. Это, похоже, не помогло. – Pharylon

+2

Эта ссылка может быть вам полезна: http://stackoverflow.com/questions/7849884/what-is-limiting-the-of-simultaneous-connections-my-asp-net-application-can-ma – Shay

ответ

2

Проблема была количество одновременных соединений, разрешенных. Клиент был очень неряшлив и создавал новое соединение для каждого запроса. Это привело к тому, что количество подключений превысило лимит.Это можно было бы решить, как в this answer (как отметил Шей в комментариях, мне хотелось бы отметить комментарий как правильный ответ!). Но поскольку у меня также есть доступ к клиентскому коду, я исправил его там.

2

Да, вы могли бы получить дросселирование, если бы вы были на свободном или общем плане. С бесплатным планом вы получаете 60 минут процессорного времени в день и с Shared вы получаете 240 минут процессорного времени в день.

Также максимальная средняя загрузка памяти (в час) для общего веб-сайта составляет 1 ГБ. Но я предполагаю, что вы уже профилировали свой код для утечек памяти.

Есть ограничения на веб-интерфейсы, но я не уверен, является ли это общим пределом TCP-соединения.

Here - ссылка для лимитов.

Я думаю, что базовый план должен дать вам предсказуемую производительность, но это небольшой пример в базовом плане - это процессор с тактовой частотой 1,6 ГГц, который, скорее всего, будет намного меньше процессора и ядер, чем ваш локальный компьютер.

Я думаю, что веб-роль стандартного размера A2 (2 ядра) может быть более подходящей, чем веб-сайт. В зависимости от вашего кода (если они могут использовать большую часть процессора и могут распределять задачи между ролями) даже несколько экземпляров A0, было бы гораздо более рекомендовано.

Для честной конкуренции у вас может быть и предел ЦП, это очень интересно.

Все самое лучшее, и май лучший код победы :)