6

Utilizzo il bus di servizio con nettcprelaybinding. Un lato è il server OnPremise che ha una connessione costante al bus di servizio. Dall'altra parte c'è un ruolo Web di Azure che risponde alle richieste Web in ingresso aprendo il bus di servizio appropriato e recuperando le informazioni dal server.Prestazioni del relè di servizio Azure

La mia preoccupazione è la performance della creazione del canale. Occorrono un paio di secondi per stabilire una nuova connessione al server onpremise tramite il bus di servizio. Caching my ChannelFactory non sembra aiutare molto. Le prestazioni di trasferimento dopo l'apertura del canale sono molto buone.

Qualsiasi suggerimento su come migliorare le prestazioni. Le informazioni di memorizzazione nella cache in Azure possono essere eseguite solo in una certa misura. Devo connettermi al server onpremise.

Posso in qualche modo stabilire un pool di connessioni al bus di servizio?

Su più cose, ci sono diversi server onpremise diversi quindi non è solo una connessione da mantenere in vita.

risposta

2

Dovresti riuscire a raggruppare le connessioni, ma i bilanciatori di carico di Azure saranno terminate any open connection that sits idle for more then 60 seconds. Quindi, se si memorizza nella cache la connessione più a lungo di quella tra una chiamata e l'altra, è necessario implementare una sorta di pattern heartbeat per mantenere viva la connessione.

Un'altra opzione che è possibile prendere in considerazione è Azure Connect. Ciò consente di creare una connessione ipsec point to point tra le risorse ospitate nel cloud e un server locale. Richiede l'installazione di un client nelle caselle locali che si desidera collegare, ma alcune lo stanno utilizzando per stabilire una semplice connessione gateway a un servizio proxy locale.

+0

Grazie per il buon feedback. Non sapevo del limite di 60 secondi. Se voglio mettere in comune le connessioni. Qual è un buon modo per farlo? Ho trovato alcune informazioni su di esso seguendo il tuo link (http://code.msdn.microsoft.com/WCF-Azure-NetTCP-Keep-Alive-09f50fd9). Ma questa è la soluzione migliore in un ambiente Azure a più istanze? Se un canale è aperto su un'istanza e il prossimo client viene eseguito su un'istanza diversa? O il bilanciamento del carico si assicura che venga utilizzata la stessa istanza? – user1284390

+0

A quanto ho capito, ogni istanza ottiene la propria connessione. E dal momento che li tengono aperti, è necessario essere consapevoli dei limiti di connessione massimi (2000 o alcuni di questi credo) che sono consentiti su un singolo spazio dei nomi. Se ciò che è buono o cattivo farlo dipende dalle tue esigenze di prestazioni e scalabilità. – BrentDaCodeMonkey

+0

Questo è un po 'vecchio - ma solo FYI, sembra che la maggior parte dei LB di Azure siano ora basati su software e abbiano un timeout predefinito di 4 minuti (non 1 minuto con i precedenti LB basati su hardware) - e ora è configurabile. Tuttavia, non è chiaro per me, in questo momento, se la libreria client del bus di servizio sta implementando automaticamente TCP KeepAlive, e quindi un timeout LB non è davvero un problema: https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/ – Jmoney38

7

Sono un membro del team Service Bus di Microsoft. Il costo dell'apertura di una connessione è elevato rispetto all'invio di messaggi a causa delle molteplici comunicazioni necessarie per consentire a entrambe le parti di assicurarsi che stiano parlando tra loro.

La mitigazione per questo è di memorizzare nella cache un canale anziché memorizzare un ChannelFactory nella cache. Sono disponibili ping keep-alive in background per le connessioni NetTcpRelayBinding che dovrebbero garantire che il canale rimanga aperto.

+0

In WCF devo prestare attenzione ai canali guasti e ricreare il proxy se si verifica un'eccezione. Il bus di servizio è simile a questo riguardo? Come devo gestire le eccezioni nel bus di servizio con il client memorizzato nella cache? – LamonteCristo

+0

Grazie ancora per tutti i feedback. Dal punto di vista del ruolo web, qualcuno può indicarmi un metodo raccomandato per i canali di inoltro nella cache?Memorerò i canali su ogni istanza del ruolo Web o potrei forse usare la cache di Azure che potrebbe essere utilizzata tra le istanze? makerofthings7: Suppongo che tu possa gestire l'eccezione come con WCF "normale", ma tieni presente che questo è solo correlato a una delle due connessioni. Servicebus porta alle connessioni, una da ogni lato. Quindi se uno va male l'altro non viene automaticamente informato a mia conoscenza. – user1284390