Re: [Python-es] Servidores web en python

2016-09-26 Por tema Chema Cortes
El lun., 26 sept. 2016 a las 11:27, Antonio Beamud Montero (<
antonio.bea...@gmail.com>) escribió:

> El 25/09/16 a las 13:51, Chema Cortes escribió:
> > Se puede dar un buen servicio con apache, pero conseguir que sea
> > escalable es complicado. Mientras, nginx se adapta muy bien a los
> > incrementos de demandas, sobre todo si se trata de enviar streams de
> > datos.
> Hola Chema, ¿en que casos crees que apache no escala bien? Hasta ahora,
> los casos que me he encontrado yo, no eran problema de apache, sin el
> backend detrás de él.
>

Creo que @lasizoillo ha contestado a la pregunta.

La respuesta corta es que apache va bien para ejecuciones cortas, mientras
que nginx es más adecuado para ejecuciones largas.

Yo especificafa el caso de envío de streams, que puede ser para enviar
vídeo, pero que también puede verse como el típico chat o red social tipo
twitter o de visualización de cotizaciones de bolsa. Puedes
superdimensionar un sistema de nodos apache para que tenga workers
suficientes que den respuesta a todas las conexiones que reciba. Por
supuesto, por culpa de la programación de los backends, estos workers
degeneran y empiezan a sufrir bloqueos y a quedarse sin memoria. Se
configuran para que los workers se "autosuiciden" al cabo de un número de
conexiones (MaxConnectionsPerChild) y liberen los recursos que quedaban
bloqueados. Pero ¿qué pasa cuando dedicas una conexión a un stream que
requiere de una conexión más larga? ¿o como dice lasiozillo, si estas
sufriendo una situación similar a un ataque slowloris porque las conexiones
de tu cliente son excesivamente lentas? El worker degenera sin remedio, lo
que va dejando pocos workers disponibles en el pool para nuevas conexiones,
lo que reduce la capacidad de respuesta del servidor. Hay muy pocos que
programen conscientemente de los problemas que tendrán sus programas en
ejecuciones largas.

Con un servidor asíncrono, como nginx, puedes dedicar una conexión a cada
cliente y crear "continuaciones" (corrutinas) que son bastante livianas y
cuyo proceso se ajusta a la capacidad de proceso que tenga tu máquina,
asegurando su escalabilidad. Se puede decir que nginx puede responder a
cualquier número de peticiones concurrentes que se le haga, aunque sea muy
lentamente. Basta aumentar el número de nodos para mejorar la respuesta. Al
igual que apache, también una mala programación puede tumbar el servidor
nginx. Pero si realizas una buena programación asíncrona, que evite
bloqueos y use operaciones atómicas (CAS), se consigue una ejecución
bastante pacífica de un gran número de procesos simultáneos.

-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Servidores web en python

2016-09-26 Por tema lasizoillo
El 26 de septiembre de 2016, 11:26, Antonio Beamud Montero <
antonio.bea...@gmail.com> escribió:

> Hola Chema, ¿en que casos crees que apache no escala bien? Hasta ahora,
> los casos que me he encontrado yo, no eran problema de apache, sin el
> backend detrás de él.


Ejemplo rápidos y chabacanos: tienes una aplicación con 10.000 websockets
conectados (o un ataque tipo slowloris) y has configurado apache como
prefork. Tienes apache configurado con events para resolver el caso
anterior y un modulo con secciones bloqueantes.

Con apache, mucho mimo y cariño puedes conseguir cosas que nginx te da
gratis (sin darle mimo o cariño). Yo personalmente me he pasado a nginx
para tener tiempo con el que mimar el backend, que como bien apuntas suele
ser el problema habitual, simplificando la administración del servidor web.

Un saludo,

Javi
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Servidores web en python

2016-09-26 Por tema Antonio Beamud Montero

El 25/09/16 a las 13:51, Chema Cortes escribió:
Se puede dar un buen servicio con apache, pero conseguir que sea 
escalable es complicado. Mientras, nginx se adapta muy bien a los 
incrementos de demandas, sobre todo si se trata de enviar streams de 
datos.
Hola Chema, ¿en que casos crees que apache no escala bien? Hasta ahora, 
los casos que me he encontrado yo, no eran problema de apache, sin el 
backend detrás de él.


Un cordial saludo.
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/