Category: devme on the web

Ottimizzare le performance di un sito-web

75 milioni di richieste al giorno, ovvero quasi 900 richieste/secondo, credo sia una immensa soddisfazione per un programmatore web di alto livello, e cioè sviluppare un’applicazione web, fatta bene, che possa soddisfare quei numeri lì. E’ chiaro che un sito web pronto al decollo, non farà mai tutte quelle richieste al giorno, dovrà passare un pò di tempo, in cui dovrà essere pubblicizzato, finire al meglio sui motori di ricerca, e quant’altro. Ma è altrettanto chiaro che, se l’obiettivo, volente o nolente (vedi siti che sono diventati famosi dall’oggi al domani), è quello di cercare di sviluppare un’applicazione web che possa reggere ritmi del genere. Le cose più importanti da capire durante lo sviluppo , se si vogliono ottimizzare le prestazioni web, sono che bisogna gestire le differenti punte di traffico, discriminando tra le operazioni di lettura (READ) che sono molto economiche, e le operazioni si scrittura (WRITE) che sono molto costose, ovviamente in termini di performance. Per operazioni di READ, intendiamo l’accesso a parti statiche che sono state già memorizzate e sono disponibili all’uso immediato. Per operazioni di WRITE intendiamo le operazioni di aggiornamento di un record di un database, o l’inserimento di un record, più in generale consideriamo una qualunque operazioni che comporta un calcolo prima che l’output venga rediretto all’utente.

performance

Lo schema in figura mostra 2 cluster di database (supponendo di utilizzare MYSQL), uno per gestire le richieste di READ, ovvero ogni richiesta dell’utente di visualizzare le pagine. Tutte le pagine sono servite da memCached. Le richieste di WRITE invece, vengono gestire dall’altro cluster, e attraverso la replicazione di MYSQL gli aggiornamenti vengono trasmessi dal cluster di WRITE a quello di READ. Seguono alcuni trick per ottimizzare le prestazioni:

  • READ cluster, per velocizzare usa dei precompilati scritti in C, e non perl/php script.
  • READ cluster, usa UltraDNS per il load balancing.
  • WRITE cluster, minimizza il numero delle query ed il tempo di connessione per gestire le richieste.
  • WRITE cluster, usa il più possibile i processi offline.
  • Usa la replicazione per avere scalabilità e affidabilità del servizio.

Tomcat vs blank fields: you don’t like me

Eccomi qui….finalmente rientrato da una 2 giorni nel profondo nord per motivi di lavoro..corsi, parole e parole, nozioni, righe di codice….una bella overdose di tutte queste cose in sole 48h full immersion….dura la vita del programmatore eh !!! A questo punto non mi resta che pubblicare il mio post e quindi inaugurare devme con una piccola esperienza con cui ho avuto a che fare non molto tempo fa. L’argomento come si può facilemte intuire dal titolo riguarda tomcat un servlet container, per molti IL servlet container usato per pubblicare le applicazioni web sviluppate in Java. Nel corso del tempo passato ad usare tomcat, ho notato che le pagine jsp contenenti banalmente un form con dei campi di input, in alcuni casi non riuscivano ad inviare correttamente i valori verso java bean associati. In particolare, il caso tipo in cui si verificava il suddetto comportamente era il seguente: supponendo di avere una pagina jsp con un Java Bean associato, si faccia caso al comportamento di un utente medio che inserisce alcuni valori in una pagina web:

input

La pagina in questione mostra alcuni campi obbligatori da inserire, in particolare si noti che gli ultimi 2 campi del form sono esclusivi (o Quantità o Colli). A questo cliccando il tasto Submit della pagina (non si vede ma giuro che c’è!) si viene rediretti verso la pagina target, nel caso dell’esempio supponiamo un riepilogo dei dati inseriti. Ma che succede dietro le quinte ? Come ben saprete, viene fatto il submit della pagina verso il server (tomcat), che analizza i campi del form e usando il meccanismo dell’introspezione (introspector) attraverso la riflessione riesce a mappare i campi del form con le rispettive variabili membro del Java Bean associato alla pagina. Quindi supponendo che la pagina target visualizzi i valori delle varibili del Java Bean, quello che si ottiene è:

riepilogo

 

Read more »

WordPress Themes