[pyar] [OT] Arquitectura + Sockets!

Angel Java Lopez ajlopez2000 en gmail.com
Mar Jun 26 15:57:50 ART 2012


Hmmm... otra opcion es tener threads (algo que originalmente en Unix no
existia, y no existio por bastante tiempo en Linux, AFAIK)

Es lo que hacen servidores como Tomcat, por ejemplo, y Apache segun como se
compile.

Si usas threads, se podria usar un pool de threads, para evitar que mil
clientes te lancen mil threads. El pool de threads deberia ser acompaniado
por una cola de clientes entrantes todavia no atendidos. Que recuerde, la
API de sockets te da esa cola de espera.

Una aproximacion hibrida, threads y procesos
http://httpd.apache.org/docs/2.2/mod/worker.html

Los procesos tienen la ventaja, que cualquier cosa que ande mal en uno, no
afecta en general a los otros.

Los threads son mas livianos de lanzar o de mantener.

Y un cuarto camino (luego de multi process, multi threads, hibrido) es un
solo thread atendiendo clientes, con pedidos cortos, como es Redis en gran
parte, o un solo thread atendiendo clientes con procesos cortos o largos
pero que pueden ser atendidos asincronicamente, como NodeJs, y en Python,
me parece que es Tornado
http://www.tornadoweb.org/ (aunque no se si es 1 solo thread, alguien lo
sabe?)

La palabra a buscar en Google es "non-blocking server". Me encuentro con el
articulo
http://amix.dk/blog/post/19581

Yo iria primero por:
- Un solo thread atendiendo un cliente, corto
luego
- Lanzar un thread por cliente que entra
luego
- Implementar un pool de thread (cantidad fija de threads, consultando una
cola de clientes entrantes)

Nos leemos!

Angel "Java" Lopez
http://ajlopez.wordpress.com
http://twitter.com/ajlopez
gh:ajlopez
2012/6/26 Martin Alderete <malderete en gmail.com>

>
>
> 2012/6/26 Alejandro J. Cura <alecu en protocultura.net>
>
>> 2012/6/26 Martin Alderete <malderete en gmail.com>:
>> > 2012/6/26 Alejandro J. Cura <alecu en protocultura.net>
>> >
>> >> 2012/6/26 Martin Alderete <malderete en gmail.com>:
>> >> > Buenas gente!
>> >> > Como estan?
>> >> >
>> >> > Esta pregunta es off-topic y no es python related...
>> >> >
>> >> > Basicamente para la facultad  tengo que escribir un server en C que
>> le
>> >> > de
>> >> > contenido a los clientes usando un protocolo creado por mi.
>> >> > Como tengo tiempo para realizarlo estoy evaluando arquitecturas para
>> ver
>> >> > los
>> >> > drawbacks de cada una...
>> >> >
>> >> > Que me recomiendan para que el server escale con varios clientes?
>> >>
>> >> Cuantos clientes? diez, cien o diezmil?
>> >
>> >
>> >
>> >  Me gustaria rondar los 50 clientes
>>
>> Entonces no vas a tener problemas de performance con ninguna de esas
>> opciones.
>> Lo podés hacer forkeando por cada conexión que va a andar rápido.
>
>
> Gracias Ale! Y si lo quiero escalar a 1000 o mas... que recomendas?
> Analizando que fork es "costoso" para el SO...
>
> --
> Alderete, Martin Nicolas
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20120626/7c7b78f8/attachment.html>


More information about the pyar mailing list