[Python] "Go or Unladen Swallow? " Cosa ne pensate ?

Daniele Varrazzo piro a develer.com
Mer 11 Nov 2009 13:45:03 CET


On Wed, 11 Nov 2009 12:33:16 +0100, luigi scarso <luigi.scarso a gmail.com>
wrote:
> Salve sono un nuovo iscritto
> ma uso python da ~5anni ormai.
> 
> Sono ing.informatico "vecchio ordinamento"
> ma questo non mi qualifica come esperto python.
> 
> Ultimamente sto attraversando una "crisi esistenziale"
> aggravata da fisime
> confermati in
> http://lambda-the-ultimate.org/node/3676

Dal thread linkato nel post di sopra:

"""
Well, simple common sense is going to limit Python's applicability
when operating at Google's scale: it's not as fast as Java or C++,
threading sucks, memory usage is higher, etc. One of the design
constraints we face when designing any new system is, "what happens
when the load goes up by 10x or 100x?
"""

A te capita spesso di operare "a google scale"?

A me no, ma di sicuro i limiti del Python li ho incontrati spesso. Solo
che non credo che "se fai il botto" allora ti basterebbe riscrivere la
stessa applicazione in un linguaggio più performante (Java o C) per aver
risolto tutti i problemi. Se riesci a far sì che il tuo programma scali su
più macchine hai sicuramente una soluzione migliore del tizio per cui
sembra che "usare meno memoria" o "avere thread migliori" sia sufficiente
ad affrontare un carico google-size. Non lo è, e la forza di google è
nell'infrastruttura che gli permette di parallelizzare rapidamente le loro
soluzioni (MapReduce, BigTable ecc).

Io lavoro in ambiente misto Erlang/Python: probabilmente ora non scriverei
un servizio centrale in Python ma lo farei in Erlang, eventualmente con una
serie di processi python in comunicazione (che a questo punto posso mettere
ovunque, basta spawnare processi via ssh). Questo non vuol dire che non usi
più Python: Erlang non mi sembra un linguaggio così general purpose da
soppiantare Python. Sono convinto che usarli entrambi porti più vantaggi
che scrivere programmi in C/C++/Java.

Ho letto di Go che offre canali che sembrano i processi Erlang. Solo che
non mi sembra possano girare su più macchine e mandarsi messaggi in rete
come invece Erlang è pensato dal giorno zero. Questo non lo renderebbe un
granché più scalabile secondo me.

Per pensare ad un servizio che possa scalare al mondo più che al
linguaggio penserei all'infrastruttura più che al linguaggio in sé.
Ultimamente ho dato un'occhiata ai sistemi di messaggistica (AMQP,
RabbitMQ) e quelli mi sembrano un interessante componente per permettere ad
un sistema di scalare (RabbitMQ si integra meravigliosamente con Erlang,
Python e Javascript). Altro componente fondamentale di cui so poco è un
database distribuito: purtroppo Mnesia non scala all'infinito e il mio caro
PostgreSQL non è semplice da far scalare oltre il singolo server. Ho
studiato poco sull'argomento, ma recentemente ho bookmarkato questo
<http://www.rackspacecloud.com/blog/2009/11/09/nosql-ecosystem/> che mi
sembra un buon indice di partenza per esplorare le diverse possibilità
(Cassandra e HBase sembrano i migliori candidati, peccato siano scritti in
Java. Le soluzioni Key/Value tipo Redis mi sembrano troppo di basso
livello).

Solo un po' di pensieri in libertà.

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python