2014-10-16 15 views
14

Io e alcuni altri sviluppatori stiamo organizzando un concorso di intelligenza artificiale. Fondamentalmente, abbiamo un semplice gioco da tavolo e ognuno di noi ha scritto AI che verranno ospitati sui nostri servizi web per giocare l'uno contro l'altro.Azure Throttling My WebApi?

Ne ho uno installato e funzionante che è un semplice servizio WebApi 2 che viene pubblicato in Azure. La mia aspettativa è che sarà più tranquilla la maggior parte del tempo, e poi improvvisamente quando inizia un gioco, riceverà potenzialmente 200-400 richieste tutte molto rapidamente (un gioco può durare solo pochi secondi). Il server di gioco e l'IA comunicano con i POST JSON run-of-the-mill.

Il mio problema è che Azure sembra limitare le richieste. Le prime mosse avvengono molto velocemente e poi tutto rallenta.

Mi chiedo se Azure pensa che sia un potenziale attacco DOS o qualcosa del genere. Può richiedere più di un secondo per tornare indietro una volta che le cose rallentano. Alcuni punti di interesse:

  • Questo non accade mai quando ospitato localmente.
  • Non esiste alcun database.
  • Succede anche con un semplice test di AI che si muove solo pezzi a caso (quindi senza carico di elaborazione)
  • Succede quando l'host gioco è anche distribuito a Azure (quindi si tratta di due siti Azure parlano tra loro).

Quindi, come posso risolvere questo? C'è un ambiente in cui mi manca dove posso dire ad Azure che questo tipo di comportamento è previsto? Attualmente lo ho come servizio condiviso, ma l'ho provato come servizio di base prima con due istanze, e stavo ancora vedendo il rallentamento.

+0

Quale piano di Azure è attivo? – usr

+0

L'ho provato sia come piano condiviso che come piano di base. Quando ho provato come Basic, ho anche provato ad aumentare il numero di istanza a 2. Non sembrava essere d'aiuto. – Pharylon

+2

Questo link potrebbe essere utile per voi: http://stackoverflow.com/questions/7849884/what-is-limitation-the-of-simultaneous-connections-my-asp-net-application-can-ma – Shay

risposta

2

Il problema era il numero di connessioni simultanee consentite. Il client era molto sciatto e creava una nuova connessione per ogni richiesta. Ciò ha causato il numero di connessioni per superare il limite.Avrebbe potuto essere risolto come in this answer (come indicato da Shay nei commenti, vorrei poter contrassegnare un commento come la risposta corretta!). Ma dato che ho anche accesso al codice client, l'ho risolto lì.

2

Sì, potresti essere rallentato se eri in piano libero o condiviso. Con il piano gratuito hai 60 minuti di tempo di CPU al giorno e con Shared hai 240 minuti di CPU al giorno.

Anche l'utilizzo di memoria medio massimo (all'ora) per il sito Web condiviso è 1 GB. Ma suppongo che tu abbia già profilato il tuo codice per perdite di memoria.

Ci sono dei limiti sui web socket ma non sono sicuro che si tratti di un limite di connessione TCP generale.

Here è il collegamento per i limiti.

Penso che il piano di base dovrebbe fornire prestazioni prevedibili, ma Piccola istanza in Piano di base è solo CPU da 1,6 GHz, che molto probabilmente sarà molto meno CPU e core rispetto alla macchina locale.

Penso che il ruolo web del servizio cloud in formato A2 standard (2 core) potrebbe essere più appropriato di un sito Web. A seconda del codice (se sono in grado di utilizzare la maggior parte della CPU e può distribuire le attività tra i ruoli) anche più istanze A0, sarebbe molto più consigliato.

Per una concorrenza leale, è possibile che anche il vincolo della CPU sia molto interessante.

Tutto il meglio, e vinca il migliore codice :)