Esistono tutti i tipi di tecniche per l'elaborazione di transazioni ad alte prestazioni e quello nell'articolo di Fowler è solo uno dei tanti al margine del sanguinamento. Piuttosto che elencare una serie di tecniche che potrebbero o meno essere applicabili alla situazione di chiunque, penso che sia meglio discutere i principi di base e in che modo LMAX ne indirizzi un gran numero.
Per un sistema di elaborazione delle transazioni su larga scala, si desidera eseguire quanto segue quanto più possibile:
-
Riduci al minimo il tempo trascorso nei livelli di archiviazione più lenti. Dal più veloce al più lento su un server moderno hai: CPU / L1 - > L2 - > L3 - > RAM - > Disco / LAN - > PALLIDO. Il salto da anche il più veloce disco magnetico moderno alla RAM più lenta è oltre 1000x per l'accesso sequenziale ; l'accesso casuale è anche peggio.
-
Riduci al minimo o elimina il tempo trascorso in attesa . Ciò significa condividere il minore stato possibile e, se lo stato deve essere condiviso, evitare i blocchi espliciti ogni volta che è possibile.
-
Distribuisci il carico di lavoro. Le CPU non sono diventate molto più veloci negli ultimi anni, ma hanno hanno ridotto e 8 core sono piuttosto comuni su un server. Oltre a ciò, puoi persino distribuire il lavoro su più macchine, che è l'approccio di Google; il bello di questo è che ridimensiona tutto incluso I / O.
Secondo Fowler, LMAX adotta il seguente approccio per ognuno di questi:
-
Mantieni tutti in memoria in tutti volte. La maggior parte dei motori di database lo farà comunque, se l'intero database può stare nella memoria, ma non vuole lasciare nulla al caso, il che è comprensibile su una piattaforma di trading in tempo reale. Per riuscire a ottenere questo risultato senza aggiungere un sacco di rischi, hanno dovuto creare una serie di infrastrutture di backup e di failover leggere.
-
Utilizzare una coda senza blocco ("disruptor") per il flusso di eventi di input. Contrasta con le tradizionali code di messaggi durevoli che sono definitivamente non bloccate liberamente, e di solito coinvolgono dolorosamente -slow transazioni distribuite .
-
Non molto. LMAX getta questo sotto il bus sulla base del fatto che i carichi di lavoro sono interdipendenti; il risultato di uno modifica i parametri per gli altri. Questo è un avvertimento critico , che Fowler chiama esplicitamente. Fanno uso di alcuni di concorrenza per fornire funzionalità di failover, ma tutta la logica di business viene elaborata su un thread singolo .
LMAX è non l'unico approccio all'OLTP su larga scala. E sebbene sia abbastanza brillante di per sé, devi non aver bisogno di utilizzare tecniche all'avanguardia per ottenere quel livello di prestazioni.
Di tutti i principi sopra riportati, # 3 è probabilmente il più importante e il più efficace, perché, francamente, l'hardware è economico. Se è possibile partizionare correttamente il carico di lavoro attraverso una mezza dozzina di core e diverse dozzine di macchine, allora il limite del cielo è convenzionale Parallel Computing tecniche. Sareste sorpresi di quanto throughput sia possibile ottenere con nient'altro che un mucchio di code di messaggi e un distributore round robin. Ovviamente non è così efficiente come LMAX - in realtà nemmeno vicino - ma il throughput, la latenza e l'economicità sono preoccupazioni separate, e qui stiamo parlando in modo specifico del throughput.
Se hai lo stesso tipo di esigenze speciali che LMAX fa - in particolare, uno stato condiviso che corrisponde a una realtà aziendale in contrasto con una scelta frettolosa di design - allora suggerirei di provare il loro componente, perché non ho Ho visto molto altro che è adatto a quei requisiti. Ma se stiamo semplicemente parlando di alta scalabilità, ti esorto a fare più ricerche sui sistemi distribuiti, perché sono l'approccio canonico usato dalla maggior parte delle organizzazioni oggi (Hadoop e progetti correlati, ESB e architetture correlate, CQRS che Fowler ha anche cita, e così via).
Gli SSD diventeranno anche un punto di svolta; probabilmente lo sono già. Ora è possibile disporre di una memoria permanente con tempi di accesso simili alla RAM, e anche se gli SSD server-grade sono ancora orribilmente costosi, alla fine scenderanno di prezzo una volta che i tassi di adozione cresceranno. È stato studiato approfonditamente ed i risultati sono piuttosto stupefacente e migliorerà solo nel tempo, quindi l'intero concetto "mantieni tutto in memoria" è molto meno importante di un tempo. Quindi, ancora una volta, proverei a concentrarmi sulla concorrenza quando possibile.