Purtroppo sui newsgroup ancora troppo spesso vedo persone che impostano la propria applicazione usando architetture client-server quando già negli anni '90 la programmazione Windows si spostava verso il multi-tier con COM, DCOM e poco più tardi con COM+.
Oggi il Framework.NET e Java sono i due protagonisti delle applicazioni distribuite e al di là dell'oceano le applicazioni n-tier ci sono e funzionano bene. Qui abbiamo vissuto una sorta di buco nero e lo stesso David Chappel era rimasto allibito durante la conferenza su SOA a Milano di fronte alla grossa quantità di mani alzate alla domanda su chi sviluppasse oggi client-server.
L'architettura di eBay che ho letto grazie al post di Janky non fa che darmi tutta una serie di ennesime conferme a quanto si sa da un bel pezzo e ho spesso ripetuto nel mio blog, durante i workshop e in tante altre occasioni.
- eBay usa una architettura SOA e su più livelli.
- eBay mantiene l'application tier completamente stateless (stato tenuto in cookie o su DB)
- eBay mantiene in cache quanto più è possibile evitando roundtrip sul DB
- eBay ha strutturato il DB in funzione della scalabilità (e non viceversa)
- eBay si è sviluppata un ORM a proprio uso e consumo
- eBay ha splittato l'applicazione in aree funzionali differenti in modo da usare DB differenti minimizzando le dipendenze tra DB
- eBay non usa stored procedure ma fa uso di prepared statement (i nostri command con i parameters)
- eBay usa i trigger solo per creare i valori di default
- eBay non usa l'integrità referenziale del DB ma ha spostato i controlli sul lato applicativo
- eBay ha spostato sul lato applicativo anche le join e il sorting per alleggerire il DB
- eBay ha minimizzato l'uso di transazioni e non fa uso di transazioni distribuite
- eBay fa uso di concorrenza ottimistica per gli aggiornamenti ("avoid deadlocks" + "update concurrency")
Inoltre non credo possano far uso di impersonation nè usare la sicurezza del database sugli utenti (con 212'000'000 utenti, la vedo molto dura).
E se tutto ciò funziona (e non avevo dubbi) per un sistema da 2000 TB che lancia 26 miliardi di statement SQL al giorno...
Ovviamente questo non significa che tutte le applicazioni vadano strutturate in questo modo o che non sia mai il caso di usare stored procedure o ancora che sia sbagliato fare transazioni distribuite. Il punto centrale che sorge dall'architettura di eBay è che hanno ottenuto la massima scalabilità in quel modo e che perciò tante credenze popolari vanno sfatate e messe seriamente in discussione durante la stesura dell'architettura.