[Python] Deploy con nginx e proxy_pass

Roberto De Ioris roberto a unbit.it
Ven 3 Gen 2014 12:50:54 CET


> On Mon, Dec 30, 2013 at 05:26:57PM +0100, Roberto De Ioris wrote:
>> > Mi pare di capire che la soluzione della listen queue che mi hai
>> indicato
>> > risolverebbe questo problema.
>> >
>>
>>
>> server = HTTPServer(app)
>> server.bind(post, backlog=1)
>>
>> (prova anche con zero, su alcuni kernel funziona, anche se non ricordo
>> se
>> e' per quelli piu' recenti o quelli piu' vecchi)
>
> Purtroppo questa strada non ha funzionato. Ricordo che il probelma che
> cerchiamo di risolvere è che quando viene interrotto una chiamata "lunga",
> nginx libera quella connessione e quindi diritta verso quel processo la
> prossima chiamata, ma il processo di fatto è occupato.
>
> La nostra simulazione è stata fatta con 2 funzioni: is_up e blocking che
> usa
> time.sleep()
>
>    class IsUp(tornado.web.RequestHandler):
>        def get(self):
>            self.write("Is Up Porta %d" ...)
>    	self.finish()
>
>    class Blocking(tornado.web.RequestHandler):
>        def get(self, numero=10):
>            time.sleep(int(numero))
>    	self.write("Bloccato Porta %s\n" % options.port)
>    	self.finish()
>
> la chiamata usando 'wget -q -O - http://ngtest/blocking/30/' ed
> interrompendolo con Control-c.
> In un terminale separato in ciclo di 'wget -q -O - http://ngtest/is_up'
> Il ciclo si blocca nel momento della interruzione e riprende solo quando
> termita il tempo (e quindi il processo si libera)

provate a ridurre a 3 secondi il proxy_connect_timeout di nginx, e'
probabile che abbiate sempre almeno uno slot listen_queue libero anche se
lo avete impostato a 1/0. In questo modo se la connessione non completa in
3 secondi, nginx considera il peer morto (e passa a quello dopo se lo
avete configurato a dovere)



> Credo di capire che vengono descritte più opzioni di configurazione: con i
> greenlet ed una programmazione asincrona o con processi tornado
> indipendenti.

guarda terrei questo approccio proprio come ultima spiaggia (e
probabilmente e' piu' semplice modificare tornado) se la osluzione sopra
non dovesse funzionare

-- 
Roberto De Ioris
http://unbit.it


Maggiori informazioni sulla lista Python