Utilizziamo connessioni persistenti e abbiamo tentato di forzare le connessioni per essere rilasciati dopo x quantità di tempo. Mentre vedo che in teoria possiamo usare ConnectionKeepAliveStrategy, forma quello che posso dire che questo si applica solo dopo una risposta..i.e. mentre la connessione è inattiva.Apache HttpClient loadbalancing connessioni pool
Il problema che stiamo avendo ..
Assumere 1 client, colpendo 2 server (A, B), tramite una loadbalancer. Quando uno dei server passa offline (B), tutte le nuove connessioni vengono stabilite sul server contro (A). Ora quando l'altro server (B) torna online, rimarrà inattivo poiché tutte le connessioni si trovano sull'altro server (A). Finché il client continua ad accedere a una connessione al di sotto del timeout di inattività/keepalive, questo continuerà, lasciando il server B inattivo (ovvero con zero connessioni).
Ciò che vogliamo fare è forzare tutte le connessioni persistenti a chiudersi periodicamente (all'interno di una "finestra temporale casuale". Idealmente non vogliamo che tutte le connessioni si resettano contemporaneamente). Qualche suggerimento su come farlo?
Abbiamo provato ad estendere HttpClientConnectionManager
ea tracciare per quanto tempo è stata aperta una connessione, quindi chiuderla dopo x tempo di ammontare ... tuttavia non sembra funzionare. Suppongo che questo sia dovuto al fatto che HttpClientConnection
non è in realtà la connessione effettiva, ma è piuttosto un proxy e sembra che al di sotto di questo proxy, sia in realtà "in uso" una delle connessioni stabilite, in quanto tale rende impossibile monitorare effettivamente il tempo quelle connessioni sottostanti sono state stabilite per.
Pensieri?
In questo momento mi sto giocando con l'idea di semplicemente chiamando: HttpRequestBase.abort()
il 1 collegamento per minuto una volta che abbiamo eseguito una richiesta su di esso, che credo ci avrebbe ottenere qualche cosa più vicino al comportamento desiderato.
Hai il controllo del bilanciamento del carico? Forse una soluzione è disattivare le sessioni appiccicose. – kuporific
Non ci sono sessioni adesive, il suo round-robbin..ma una volta che viene creata la connessione persistente. Rimane ... quindi la necessità di chiudere periodicamente le connessioni persistenti, così il lb può ancora una volta bilanciare il carico tra i server. – danomano
Hai avuto qualche sfondamento in questo scenario? Ho esattamente lo stesso scenario alla ricerca di solide idee su come affrontarlo. – jagamot