Sull'architettura di eBay...

Ho alcuni commenti dopo aver letto il PDF della presentazione ed i due articoli apparsi qui (http://blogs.ugidotnet.org/raffaele/archive/2006/12/29/63835.aspx e http://blogs.ugidotnet.org/janky/archive/2006/12/29/63824.aspx) e vorrei condividerli con voi.

La prima cosa è che tra le cose condivisibili dell'architettura trovo che alcune siano la scoperta dell'acqua calda (ad esempio che l'applicazione deve essere stateless e che si deve usare la cache al meglio, non mi sembra sta gran scoperta!).

L'altra è che mi sembra che la scelta architetturale di eBay parta da un problema molto semplice: che avevano raggiunto breve tempo (1998-2000) i limiti fisici dello strato di database. La scelta di alleggerire al massimo questo strato mi sembra direttamente collegata al fatto che, ad un certo punto, anche acquistando i database server più grossi e ciccioni in grado di ospitare Oracle comunque il loro limite alla scalabilità era il database.

Da questa considerazione nasce il resto dell'architettura, ovvero (per dirla in un altro modo) mi sembra che la scelta di design sia determinata dal fatto che la scalabilità richiesta (i famosi 26 miliardi di query al giorno) non può essere garantita da nessuna piattaforma DB (ne presente ne futura) a meno che le query non fossero extra semplici, quindi eliminando tutto quello che, lato DB, consuma risorse (integrità referenziale e stored procedure) per portarle in un ambiente che scala facilmente.

Le scelte successive (come ad esempio scrivere uno strato di ORM proprietario che immagino consenta di automatizzare la gestione delle parti eliminate dal database) nascono poi da questa necessità di base.

Quindi la mia considerazione è la seguente e nasce da un discorso molto semplice: che l'architettura si deve focalizzare sulla necessità del business e non viceversa. eBay è un business molto particolare la cui richiesta più importante è quella di una grande scalabilità e direi anche che su scala mondiale è probabilmente il sistema "transazionale" che ha questa necessità al livello più elevato. La sua architettura e le sue scelte sono quindi pilotate da questo fattore, che le condiziona in maniera pesante.

Nel momento in cui dobbiamo scegliere un'architettura per la nostra applicazione dobbiamo fare lo stesso ragionamento: quale è la nostra necessità primaria considerando il business? E partire da lì. Non dire "siccome questa architettura la usa eBay la usiamo pure noi". Personalmente alcune delle scelte di un'architettura come quella di eBay (integrità referenziale sugli application server e nessuna stored procedure) mi lasciano estremamente perplesso, a meno di non avere una motivazione forte per sceglierle (e 26*10^9 query al giorno sono una motivazione molto forte, ma quanti altri raggiungono questi volumi anche considerando un anno invece di un giorno????).

E questo ragionamento lo si vede proprio nella presentazione stessa, verificando come l'architettura, nel tempo, si sia evoluta sulle necessità del business. La prima architettura (quella fatta in soggiorno) non scalava per niente ed era probabilmente molto scarsa (memorizzava su file system!), ma rispondeva alle esigenze (andare online in fretta), la seconda si è focalizzata sul rendere il database "partizionabile", quella attuale si concentra sulla scalabilità. Un bell'esempio di come evolvere i propri strumenti in parallelo al proprio business.

L'altra cosa interessante invece io la vedo nella frase "Throw out most of J2EE"... probabilmente partendo adesso potrebbero rifare tutto usando C# e Mono ed ottenere gli stessi risultati...

posted @ venerdì 29 dicembre 2006 18:02

Print

Comments on this entry:

# re: Sull'architettura di eBay...

Left by Davide Mauri at 29/12/2006 18:27
Gravatar
Concordo al 100% su tutto quello che dici.

# re: Sull'architettura di eBay...

Left by Raffaele Rialdi at 29/12/2006 19:40
Gravatar
Concordo pienamente ed infatti avevo evidenziato nel mio post come eBay abbia dovuto giustamente plasmare l'architettura in funzione della scalabilità.

Giustamente nel post dici che sarebbe sbagliato fare una scelta basata su: "siccome questa architettura la usa eBay la usiamo pure noi".
Verissimo, ma non puoi neppure ignorare che se funziona per quei numeri, le performance per quelle scelte non possono più essere messe in discussione (mi riferisco a ORM, sp, etc.).

Con tutto ciò sono daccordissimo (e l'ho scritto) che non rinuncerò mai a priori a tutte quelle cose solo perché eBay ha scritto in quel modo la sua applicazione.

# re: Sull'architettura di eBay...

Left by Raffaele Rialdi at 29/12/2006 20:38
Gravatar
Hai ragione Roberto ma questi sono discorsi già fatti.
In applicazioni non così al limite possiamo usare ORM già pronti nè abbiamo bisogno di riscriverci l'application pool di J2EE.
Tanti post or sono, la discussione nacque sul fatto che pur essendo più vantaggiosa la scelta dell'ORM per lo sviluppatore (e cioè sui tempi e la pulizia del codice), questa non sarebbe stata sufficientemente performante in una applicazione enterprise. Io ho sempre asserito di si e l'applicazione eBay non fa che confermare che queste scelte sono papabili in primis per motivi di performance. Quando, come e se usarle resta una scelta dell'architetto che deve partire dai requisiti del cliente (budget in testa, come dici te).

# re: Sull'architettura di eBay...

Left by Raffaele Rialdi at 29/12/2006 22:22
Gravatar
Massimo, inseguendo il tuo ragionamento, è solo una valutazione di costi...
- se le performance non sono il problema principale, usi un ORM generico che nulla ti toglie dagli impicci e non compromette la scalabilità
- se le performance sono un problema grosso, il business è tale per cui probabilmente hai tutti i vantaggi di scrivere delle personalizzazioni o addirittura un ORM dedicato
- se il problema ha una complessità moderata scrivi non molte righe di codice mappando le tue entity sul db e hai un giusto compromesso (questa è la soluzione che io preferisco)

Però non liquiderei affatto il generico ORM nHibernate solo per problemi di scarsa complessità, ma qui cedo la parola a Giancarlo.

A me piace la soluzione Linq che secondo me semplificherà ancora di più l'architettura. E Linq non è un ORM ma un modo molto conveniente di scrivere un DAL in quanto elimina la differenza tra il type system del DB da quello del Framework.net.

Però così perdiamo di vista il problema. La questione resta in qualsiasi caso di architettura e non di tool. Il caso Ebay insegna che le soluzioni che hanno adottato non solo funzionano ma sono funzionali e molto performanti.
Comments have been closed on this topic.