Girobloggando qui e li...sono arrivato in questo post interessantissimo di Frank Sommers da cui ho scaricato il pdf di una presentazione fatta da due degli architetti di eBay.
Premessa:
credo che eBay sia una, se non la più pesante applicazione software distribuita presente al mondo...
Il pdf (mi sarebbe piaciuto assistere live alla sue spiegazione) è illuminante, fatto bene e ci fa capire la storia delle evoluzioni dalla prima alla attuale versione.
Segno alcuni punti (sparsi) che ritengo interessanti:
Le statistiche sono eccezionali, ne riporto alcune:
- 212,000,000 Utenti registrati
- 1 miliardo di page views al giorno
- 26 miliardi di SQL query e updates al giorno
- 2 petabytes di dati (che andando a ripassare nella scala delle grandezze, sono 2000 Tera)
- 99.94% uptime
Queste sono condizioni che impattano fortemente sulle scelte architetturali (Scalabilità).
Nella sezione dedicata all'accesso ai dati ho notato:
- Il middle tier è scritto in J2EE ma hanno dovuto riscrivere il connection pool, in effetti sotto certe condizioni, ci si scontra inevitabilmente anche con i limiti delle class library ufficiali dei linguaggi adottati. Stessa cosa capitò a me tempo fa con la Datagrid di .NET che sotto particolari stress test evidenzio debolezze non indifferenti.
- Nessuna Business Logic sul database. No Stored procedure. Solo qualche trigger...
Non posso che trovarmi d'accordo. Se a certi livelli si può sopravvivere senza SP...figuriamoci al di sotto. - Move CPU-intensive work to Application: Referencial Integrity, Joins, Sorting
Sinceramente non ho mai spostato controlli di Integrità referenziale sugli application layer...ma sta cosa mi fa rivedere in un ottica diversa l'argomento...credo che investigherò di più in questa direzione...
Cache where possible...
Questo è SACRO. Io fondamentalmente cerco sempre di applicare la cache sui dati in modo intelligente, e il supporto dato dagli ORM in questo settore è fondamentale. Avere in modo gratuito da NHibernate dei provider su sistemi di cache evoluti gratuiti e non, è il massimo...vedi Memcahed, NCache o altri.
Ah... e si sono scritti un loro ORM per il mapping, in Java...notevole!
Ai posteri le riflessioni...