2014-10-16 17 views
14

Ja i kilku innych programistów uczestniczymy w konkursie AI. Zasadniczo mamy prostą grę planszową i każdy z nas napisał AI, które będą hostowane na naszych własnych serwisach internetowych, aby grać przeciwko sobie.Czy usługa Azure Throttling My WebApi?

Mam jedną uruchomioną, prostą usługę opartą na WebApi 2, opublikowaną na platformie Azure. Spodziewam się, że przez większość czasu będzie cicho, a gdy nagle zacznie się gra, otrzyma 200-400 próśb bardzo szybko (gra może trwać tylko kilka sekund). Serwer gry i sztuczna inteligencja komunikują się z serwerami JSON POST.

Mój problem jest taki, że Azure zdaje się ograniczać żądania. Pierwsze kilka ruchów odbywa się bardzo szybko, a następnie wszystko spowalnia.

Zastanawiam się, czy Azure uważa, że ​​jest to potencjalny atak DOS czy coś takiego. Może zająć sekundę, aby cofnąć się po spowolnieniu. Kilka ciekawych rzeczy:

  • To się nigdy nie zdarza, gdy hostowane są lokalnie.
  • Brak bazy danych.
  • Zdarza się to nawet w przypadku prostej, testowej sztucznej inteligencji, która po prostu przesuwa kawałki losowo (więc nie ma obciążenia obliczeniowego).
  • Zdarza się, gdy host gry jest również wdrażany na platformie Azure (więc dwie strony Azure rozmawiają ze sobą).

Jak mogę to naprawić? Czy gdzieś brakuje miejsca, w którym mogę powiedzieć Azure, że oczekuje się takiego zachowania? Obecnie mam go jako usługę wspólną, ale testowałem ją jako usługę podstawową przed dwoma wystąpieniami i nadal obserwowałem spowolnienie.

+0

W czym jest plan Azure? – usr

+0

Próbowałem go zarówno jako wspólny, jak i podstawowy. Podczas testowania jako podstawowy, próbowałem również podnieść numer instancji do 2. Wydawało się, że to nie pomaga. – Pharylon

+2

Ten link może Ci się przydać: http://stackoverflow.com/questions/7849884/what-is- limitowanie--nieumiejętnych-rozłączeń-może-za-zakresie-może-planować – Shay

Odpowiedz

2

Kwestia była liczba jednoczesnych połączeń dozwolonych. Klient był bardzo niechlujny i tworzył nowe połączenie dla każdego żądania. Spowodowało to przekroczenie limitu liczby połączeń.Mogło to zostać rozwiązane jak w this answer (jak wskazał Shay w komentarzach, chciałbym móc oznaczyć komentarz jako poprawną odpowiedź!). Ale ponieważ mam również dostęp do kodu klienta, naprawiłem go tam.

2

Tak, możesz zostać złapany, jeśli byłeś na planie darmowym lub wspólnym. Z darmowym abonamentem otrzymujesz 60 minut czasu procesora dziennie, a dzięki współużytkowaniu masz 240 minut czasu procesora dziennie.

Maksymalne średnie zużycie pamięci (na godzinę) dla udostępnionej witryny to 1 GB. Ale przypuszczam, że już profilowałbyś swój kod pod kątem przecieków pamięci.

Istnieją ograniczenia dotyczące łączy internetowych, ale nie jestem pewien, czy jest to ogólny limit połączeń TCP.

Here to link do limitów.

Myślę, że podstawowy plan powinien dać przewidywalną wydajność, ale mała instancja w planie podstawowym to tylko procesor 1,6 GHz, który prawdopodobnie będzie o wiele mniej procesora i rdzeni niż lokalna maszyna.

Wydaje mi się, że standardowa rola internetowa w chmurze w formacie A2 (2 rdzenie) może być bardziej odpowiednia niż witryna internetowa. W zależności od kodu (jeśli są w stanie wykorzystać większość procesora i mogą dystrybuować zadania między rolami), nawet więcej wystąpień A0 byłoby o wiele bardziej zalecane.

Dla uczciwej konkurencji, możesz mieć również ograniczenia procesora, jest to bardzo interesujące.

Wszystkiego najlepszego i niech wygra najlepszy kod :)