Altra domanda strana

ciao!
eccomi di nuovo :stuck_out_tongue:

Una action mi genera un file .png e lo salva in una dir, c’è modo
tramite routes di controllare l’esistenza del file prima di chimare il
controller?

(ad es includo fileutils e faccio un check sull’esistenza del file, se
c’è lo invio… )

Prima di perdere 1 giorno provando meglio chiedere se qualcuno ha giÃ
fatto … :slight_smile:

Il giorno 09 settembre 2009 10.19, Alessandro
Scolavino[email protected] ha scritto:

Prima di perdere 1 giorno provando meglio chiedere se qualcuno ha già
fatto … :slight_smile:
Se l’action si chiama come il png (o viceversa) e il png non è privato
(cioè tutti possono vederlo anche se non autenticati), la soluzione
più semplice è piazzarlo in /public/qualchecosa, così l’action non
sarà neanche invocata se il file esiste.

altrimenti, nel controller, fai una cosa tipo:

    path = il_path_dove_sta_l_immagine
    unless File.exist? path
      #crea il file
    end
    send_file path, :disposition => 'inline', :type => 'image/png'

pietro

… com’è dura cercare le performance … )

Attenzione a non perdere più tempo del necessario alla ricerca delle
performance.
Sei sicuro che ci saranno tatnti utenti da mandare in tilt il sito?

Ti consiglio questa lettura (parzialmente tradotta in intaliano):

E’ scritta da chi ne sa qualcosa (P.S. guarda in fondo al sito di ruby
on rails)

Ciao Michele.

Pietro G. wrote:

altrimenti, nel controller, fai una cosa tipo:

    path = il_path_dove_sta_l_immagine
    unless File.exist? path
      #crea il file
    end
    send_file path, :disposition => 'inline', :type => 'image/png'

si questo l’avevo già fatto,
Ora provo a ricostruire la struttura della chiamata in pubblic e vediamo
se funge (dovrò poi inventarmi un meccanismo di caching… cioè ogni tot
chiamate devo cancellare e rigenerare il file in caso sia cambiato
qualcosa … com’è dura cercare le performance … )

Michele C. wrote:

… com’è dura cercare le performance … )

Attenzione a non perdere più tempo del necessario alla ricerca delle
performance.
Sei sicuro che ci saranno tatnti utenti da mandare in tilt il sito?

Ti consiglio questa lettura (parzialmente tradotta in intaliano):
Getting Real

E’ scritta da chi ne sa qualcosa (P.S. guarda in fondo al sito di ruby
on rails)

Ciao Michele.

Bhe è un sistema multisito, sono previste tra le 5k e le 10k visite al
giorno

Alessandro S. wrote:

Michele C. wrote:

… com’è dura cercare le performance … )

Attenzione a non perdere più tempo del necessario alla ricerca delle
performance.
Sei sicuro che ci saranno tatnti utenti da mandare in tilt il sito?

Ti consiglio questa lettura (parzialmente tradotta in intaliano):
Getting Real

E’ scritta da chi ne sa qualcosa (P.S. guarda in fondo al sito di ruby
on rails)

Ciao Michele.

Bhe è un sistema multisito, sono previste tra le 5k e le 10k visite al
giorno

Cosa intendi per un sistema multisito? Significa un server che gestisce
diversi siti? Se cosi aumenta la ram e la cpu, purtroppo rails ha il
problema di risorse.
Un mio collega (Marco M. posta in questo forum) ha provato
jruby, e dice che è decisamente più performante ma qui alzo le mani per
la mia totale ignoranza in mertio (non che con ruby vada tanto meglio).

P.S. facci sapere come si evolve la situazione.

Ciao Michele.

Alessandro S. wrote:

Bhe è un sistema multisito, sono previste tra le 5k e le 10k visite al
giorno

Stimare il carico massimo di un sistema è un esercizio interessante per
cui ci provo.

Ci sono 86400 secondi in un giorno. Supponendo che le visite siano
concentrate in 8 ore scendiamo a 28800. Supponiamo che le visite siano
davvero lunghe e durino 1 ora di click intensi (è un gestionale, ma
secondo me sto esagerando e tanto), diciamo una richiesta ogni 10
secondi dato che dovranno pur leggere quel che cliccano :slight_smile: fanno 360
richieste per visita ossia 3.600.000 richieste in 8 ore. Sono in media
125 richieste al secondo con picchi e valli.

Se la variabilità attorno alla media fosse simile a quella del traffico
internet in Italia, che stimo con i dati del MIX
(http://www.mix-it.net/brontolo/cgi-bin/14all-Totale_globale.cgi?log=totaltraffic_global)
i picchi non dovrebbero arrivare al doppio del valor medio, ma diciamo
sempre per cautela che avrai dei picchi in cui il traffico si triplica a
375 richieste al secondo, anzi, facciamo cifra tonda a 400.

Sono tante, sono poche? Difficile dirlo senza conoscere a fondo la tua
applicazione ed il tuo server (quanto ci metti a servirne una?). E’ però
credo una stima esagerata per eccesso e finché non si va in produzione è
difficile dire quale sarà veramente il traffico, dove andrà per davvero
nell’applicazione e dove si dovrà ottimizzare. Considera che se davvero
avessi esagerato dovremmo togliere un ordine di grandezza e scendere a
picchi di 40 richieste al secondo, che non penso ci siano problemi a
servire con un parallelismo decente del tipo che descrivevi nei tuoi
post delle settimane passate.

Fatta questa considerazione, c’è un ultimo passo.

Ognuna di queste richieste se mira ad avere una nuova pagina si porterÃ
dietro svariate GET HTTP di cui almeno una a Rails e le altre al web
server. Con l’appropriato caching il browser non le farà neppure. Se è
una richiesta Ajax, ci sarà una sola GET a Rails. Se come mi pare di
capire hai dei contenuti statici che si autorigenerano sul server (*),
imposta su di loro una Etag appropriata ed una expiration della cache
ragionevole a livello di web server, così che il browser non farà mai
nuove richieste se non quando ci saranno i nuovi dati.

(*) Ma questi file (il tuo .png) vengono generato da un controller
durante una richiesta del client o vengono creati da un processo in
background sul server?

Paolo

Paolo M. wrote:

Stimare il carico massimo di un sistema è un esercizio interessante per
cui ci provo.

Se la variabilità attorno alla media fosse simile a quella del traffico
internet in Italia, che stimo con i dati del MIX
(http://www.mix-it.net/brontolo/cgi-bin/14all-Totale_globale.cgi?log=totaltraffic_global)
i picchi non dovrebbero arrivare al doppio del valor medio, ma diciamo
sempre per cautela che avrai dei picchi in cui il traffico si triplica a
375 richieste al secondo, anzi, facciamo cifra tonda a 400.

Devo fare un doppio reply se no non mi fa postare :slight_smile:

Questa specifica installazione gestirà solo siti web, la campagna di
marketing avviata dovrebbe raggiungere tra i 1000 e i 5000 potenziali
clienti (tutti attualmente senza sito web o con sito web vecchio e
brutto)
Ne ho considerati (pessimisticamente) 100 come effettivi clienti, la
media visite per 1 sito di questa tipologia è intorno alle 20/giorno.
La media richieste secondo le mie previsioni non dovrebbe superare le
50-100/s salvo la prima richiesta (cioè una non cachata dal client) la
media è intorno al decimo di secondo ( considerando anche che alcune
sono praticamente istantanee).

Chiaramente in caso di aumento del numero di richieste viene aggiunta
una seconda macchina o più…

Alessandro S. wrote:

Alessandro S. wrote:

Ora provo a passare in production completamente e vedo come si comporta
il caching…

Continua a comportarsi “a caso” ho abilitato il caching di apache2 …
dovrebbe bastare…

ps, il caching di rails dovrebbe essere domain-name based … da questa
esperienza non mi risulta

domain based? Mi stai dicendo che una istanza di rails può servire enne
domini?

Alessandro S. wrote:

Ora provo a passare in production completamente e vedo come si comporta
il caching…

Continua a comportarsi “a caso” ho abilitato il caching di apache2 …
dovrebbe bastare…

ps, il caching di rails dovrebbe essere domain-name based … da questa
esperienza non mi risulta

Paolo M. wrote:

Ognuna di queste richieste se mira ad avere una nuova pagina si porterÃ
dietro svariate GET HTTP di cui almeno una a Rails e le altre al web
server. Con l’appropriato caching il browser non le farà neppure. Se è
una richiesta Ajax, ci sarà una sola GET a Rails. Se come mi pare di
capire hai dei contenuti statici che si autorigenerano sul server (*),
imposta su di loro una Etag appropriata ed una expiration della cache
ragionevole a livello di web server, così che il browser non farà mai
nuove richieste se non quando ci saranno i nuovi dati.

(*) Ma questi file (il tuo .png) vengono generato da un controller
durante una richiesta del client o vengono creati da un processo in
background sul server?

Sto infatti lavorando a creare un mio meccanismo di caching, il sistema
non può usare il meccanismo di caching di rails (anche se non ho ancora
provato con passenger … forse risolve il problema di cui si parlava
tempo fà )…

I png rappresentano tutte quelle immagini che il sistema deve modificare
(imagemagik) ad esempio miniature, icone etc… vengono rigenerate solo
nel caso vengano riuploadate tramite interfaccia altrimenti diventano
effettivamente statice in base al sistema a cui si accede (la struttura
dir in cui vengono salvate è del tipo =>
/:nome_sito/:effetto_grafico/:width/:height/:file_name )
Quindi dopo essere state generate la prima volta vengono automaticamente
cachate dal browser…

Ora provo a passare in production completamente e vedo come si comporta
il caching…

Grazie intanto delle riflessioni Paolo!! non avevo analizzato così
approfonditamente :slight_smile:

p.s. il mio ottimismo cronico mi dice che la campagna (che è affidata a
2 società con cui collaboro che otterranno una quota annua sulle
vendite) non partirà neppure… :stuck_out_tongue:

Michele C. wrote:

domain based? Mi stai dicendo che una istanza di rails può servire enne
domini?

Questo è quello che si evince da svariati post e cercando su google, la
cache “dovrebbe” funzionare creando una dir diversa a seconda del
dominio, in realtà a me risulta non funzioni (il mio sistema gestisce
siti web, in pratica x domini puntano sulla stessa istanza)

Michele C. wrote:

Non conosco il funzionamento di passenger, ma non ti converrebbe avere
progetti diversi che girano separatamente?

Bhe il sistema è un motore di generazione gestionali con un sistema di
template (crea sia front-end che backend), l’uso più banale è la
generazione e gestione di un sito web ma viene usato anche appunto come
gestionale, alcune funzioni in lavorazione per altro possono funzionare
solo se tutti i sistemi girano sulla stessa istanza…

Creando + installazioni diventerebbe + complesso il sistema di
aggiornamento del sistema, modifica / aggiunta di funzioni nuove.

Alessandro S. wrote:

Michele C. wrote:

Non conosco il funzionamento di passenger, ma non ti converrebbe avere
progetti diversi che girano separatamente?

Bhe il sistema è un motore di generazione gestionali con un sistema di
template (crea sia front-end che backend), l’uso più banale è la
generazione e gestione di un sito web ma viene usato anche appunto come
gestionale, alcune funzioni in lavorazione per altro possono funzionare
solo se tutti i sistemi girano sulla stessa istanza…

Creando + installazioni diventerebbe + complesso il sistema di
aggiornamento del sistema, modifica / aggiunta di funzioni nuove.

Ok. Ma non è che c’è un qualche sistema di cache interno e automatico?

Alessandro S. wrote:

Michele C. wrote:

domain based? Mi stai dicendo che una istanza di rails può servire enne
domini?

Questo è quello che si evince da svariati post e cercando su google, la
cache “dovrebbe” funzionare creando una dir diversa a seconda del
dominio, in realtà a me risulta non funzioni (il mio sistema gestisce
siti web, in pratica x domini puntano sulla stessa istanza)

Non conosco il funzionamento di passenger, ma non ti converrebbe avere
progetti diversi che girano separatamente?

Michele C. wrote:

Alessandro S. wrote:

Michele C. wrote:

Non conosco il funzionamento di passenger, ma non ti converrebbe avere
progetti diversi che girano separatamente?

Bhe il sistema è un motore di generazione gestionali con un sistema di
template (crea sia front-end che backend), l’uso più banale è la
generazione e gestione di un sito web ma viene usato anche appunto come
gestionale, alcune funzioni in lavorazione per altro possono funzionare
solo se tutti i sistemi girano sulla stessa istanza…

Creando + installazioni diventerebbe + complesso il sistema di
aggiornamento del sistema, modifica / aggiunta di funzioni nuove.

Ok. Ma non è che c’è un qualche sistema di cache interno e automatico?

in passenger?
passenger è mod_ruby per apache in pratica

La cache è implementata da rails e da apache, (rails solo in production)

2009/9/10 Michele C. [email protected]:

domain based? Mi stai dicendo che una istanza di rails può servire enne
domini?

si, non e’ un problema (anche servire contenuti diversi a seconda del
dominio da una sola app rails), poi per il caching: e’ l’action cache
che include come default l’host nella chiave per individuare l’oggetto
nella cache (e permette dunque di distinguere due richieste HTTP con
lo stesso path ma diverso host): http://bit.ly/4folJS

Luca