Oltre ai database in memoria
La maggior parte delle parole di moda nell’IT invecchia male, e per una buona ragione: la maggior parte delle tecnologie che un tempo avevano un vantaggio competitivo vengono sostituite da alternative superiori entro un decennio o anche meno. Pertanto, se un fornitore di software continua a insistere su una parola di moda dopo la sua data di scadenza (1), la spiegazione più semplice è che il suo team di R&S non si è nemmeno reso conto che il mondo è andato avanti.
Aneddoticamente, diversi venture capitalist mi hanno anche detto di essere stanchi di investire in aziende software che avevano più di qualche anno, perché la maggior parte delle aziende non riesce mai a separare la propria tecnologia dal panorama tecnologico che le ha definite quando sono state avviate.
(1) Il mercato tecnologico stesso definisce quando una tecnologia “scade”. Quando si guarda una determinata tecnologia, al massimo si può solo stimare quanto tempo rimarrà ragionevolmente vicina allo stato dell’arte.
I database in memoria erano una parola di moda nell’IT, e questa non è invecchiata bene: qualsiasi azienda di software che si presenta oggi come fornitrice di calcolo in memoria o in-memory sta promuovendo tecnologie obsolete sul mercato (2). Non fraintendetemi: sfruttare al massimo la “memoria” - ne parlerò più avanti - non è mai stato così importante; tuttavia, il panorama del calcolo è ora più complesso di quanto non fosse in passato.
(2) In teoria, potrebbe essere solo il team di marketing che si trova indietro, mentre il team tecnico è già avanzato. Tuttavia, non ho mai incontrato un’azienda di software che soffrisse di questo problema. Puoi tranquillamente assumere che il marketing sia sempre avanti rispetto alla tecnologia.
Alla fine degli anni ‘90 e all’inizio degli anni 2000, un tipo specifico di memoria volatile, comunemente chiamata RAM, era diventata abbastanza economica da consentire l’utilizzo di set di dati sempre più interessanti e preziosi “in memoria”. All’epoca, la maggior parte del software era progettato intorno all’idea che la RAM fosse così costosa e limitata che ricorrere a complicazioni estreme, solo per ridurre il più possibile la pressione sulla RAM, fosse un approccio valido. Semplicemente rivedendo la maggior parte dei problemi da un punto di vista fresco e senza restrizioni, ovvero il calcolo “in memoria”, molti fornitori di software hanno ottenuto notevoli accelerazioni rispetto ai prodotti più vecchi, che si basavano esclusivamente su dischi rotanti.
Guardando avanti al 2018, i database in memoria sono una prospettiva superata, e lo sono già da anni. Esistono molti tipi di archiviazione dei dati:
- L1 cache della CPU
- L2/L3 cache della CPU
- RAM locale
- RAM GPU locale
- SSD locale
- HDD locale
- RAM remota
- SSD remoto
- HDD remoto
- Archiviazione su nastro o ottica
Non sto nemmeno elencando le nuove tecnologie di archiviazione come l’Intel Optane, che rappresentano quasi una classe di dispositivi a sé stante.
I fornitori che promuovono il calcolo “in memoria” stanno suggerendo che la loro tecnologia software è orientata prevalentemente allo sfruttamento di due tipi di memoria: la RAM locale e la RAM remota. Sfruttare al massimo la RAM, sia locale che remota, è certamente una cosa positiva, ma evidenzia anche approcci ingegneristici che sottoutilizzano le alternative.
Ad esempio, negli ultimi due decenni, la cache della CPU è passata da 512 KB a oltre 60 MB per le CPU di fascia alta. Con una cache della CPU così grande, è ora possibile eseguire il “calcolo in cache”, ottenendo notevoli accelerazioni rispetto al semplice “calcolo in memoria”. Tuttavia, sfruttare la cache richiede la minimizzazione di molte strutture dati o addirittura strategie più intelligenti, ben al di là di quanto considerato necessario o addirittura desiderabile dal punto di vista della RAM.
Tuttavia, limitarsi a sottolineare che la cache della CPU è più veloce della RAM locale sarebbe fuorviante. Oggi, una buona ingegneria del software implica sfruttare al massimo le capacità rispettive di tutte queste classi di archiviazione dei dati. Grazie al cloud computing, assemblare una combinazione ad hoc di risorse di calcolo non è mai stato così facile.
Pertanto, Lokad non offre una tecnologia software “in memoria”, perché ciò ci impedirebbe di sfruttare le altre opzioni attualmente disponibili. Ad esempio, mentre potremmo noleggiare macchine con fino a 2TB di RAM, sarebbe inutilemente costoso per i nostri clienti. Esistono molti algoritmi che possono essere completamente trasmessi in streaming; quindi, l’elaborazione di TB di dati non richiede TB di RAM e considerando che 1GB di RAM è circa 1000 volte più costoso di 1GB di HDD, non è un dettaglio di implementazione.
Il nostro obiettivo non è aderire a una prospettiva rigida sull’ingegneria del software, ma attenerci alla prospettiva ingegneristica più ampia, che consiste nel fare il massimo possibile con il budget a disposizione. In altre parole, siamo inclini a utilizzare l’elaborazione in memoria quando supera le alternative, ma non di più.
Quindi, poiché le risorse di calcolo non sono completamente regolabili su richiesta - ad esempio, non è realistico noleggiare una macchina senza una cache della CPU - presso Lokad ci sforziamo di sfruttare al massimo tutte le risorse che vengono pagate, anche se tali risorse non sono state strettamente richieste in primo luogo.