Esistono tutti i tipi di tecniche per l'elaborazione delle transazioni ad alte prestazioni e quella nell'articolo di Fowler è solo una delle tante al limite. Piuttosto che elencare un gruppo di tecniche che possono o meno essere applicabili alla situazione di qualcuno, penso che sia meglio discutere i principi di base e come LMAX affronta un gran numero di essi.
Per un sistema di elaborazione delle transazioni su larga scala si desidera eseguire quanto segue quanto segue:
Riduci al minimo il tempo speso nei livelli di archiviazione più lenti. Dal più veloce al più lento su un server moderno hai: CPU / L1 -> L2 -> L3 -> RAM -> Disco / LAN -> WAN. Il salto dal disco magnetico moderno più veloce alla RAM più lenta è oltre 1000x per l' accesso sequenziale ; l'accesso casuale è anche peggio.
Ridurre al minimo o eliminare il tempo di attesa . Ciò significa condividere il minor stato possibile e, se lo stato deve essere condiviso, evitare blocchi espliciti ogni volta che è possibile.
Distribuire il carico di lavoro. Le CPU non sono diventate molto più veloci negli ultimi anni, ma sono diventate più piccole 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; la cosa grandiosa è che ridimensiona tutto, incluso l'I / O.
Secondo Fowler, LMAX adotta il seguente approccio per ciascuno di questi:
Tenere tutto lo stato in memoria tutti i tempi. La maggior parte dei motori di database lo farà comunque, se l'intero database può adattarsi alla memoria, ma non vuole lasciare nulla al caso, il che è comprensibile su una piattaforma di trading in tempo reale. Per farcela senza aggiungere un sacco di rischi, hanno dovuto costruire un'infrastruttura leggera di backup e failover.
Utilizzare una coda senza blocchi ("disruptor") per il flusso di eventi di input. Contrasto per tradizionali durevoli code di messaggi che sono definitivamente non bloccano liberi, e infatti di solito coinvolgono dolorosamente lenti transazioni distribuite .
Non tanto. LMAX lancia questo sotto il bus sulla base del fatto che i carichi di lavoro sono interdipendenti; il risultato di uno cambia i parametri per gli altri. Questo è un avvertimento critico , e quello che Fowler chiama esplicitamente. Fanno fare un po 'di uso della concorrenza al fine di fornire capacità di failover, ma tutta la logica di business vengono elaborati su un singolo thread .
LMAX non è l'unico approccio all'OLTP su larga scala. E sebbene sia abbastanza brillante di per sé, non è necessario utilizzare tecniche all'avanguardia per ottenere quel livello di prestazioni.
Di tutti i principi di cui sopra, # 3 è probabilmente il più importante e il più efficace, perché, francamente, l'hardware è economico. Se riesci a suddividere correttamente il carico di lavoro su una mezza dozzina di core e diverse dozzine di macchine, allora il cielo è il limite per le tecniche di calcolo parallelo convenzionali . Sareste sorpresi di quanto tempo riuscirete a realizzare con nient'altro che un mucchio di code di messaggi e un distributore round robin. Ovviamente non è così efficiente come LMAX - in realtà non è nemmeno vicino - ma la velocità effettiva, la latenza e l'efficacia in termini di costi sono preoccupazioni separate, e qui stiamo parlando specificamente della velocità effettiva.
Se hai lo stesso tipo di esigenze speciali di LMAX - in particolare, uno stato condiviso che corrisponde a una realtà aziendale al contrario di una scelta frettolosa di design - allora suggerirei di provare il loro componente, perché non ho visto molto altrimenti è adatto a tali requisiti. Ma se stiamo semplicemente parlando di alta scalabilità, ti esorto a fare ulteriori ricerche sui sistemi distribuiti, perché sono l'approccio canonico utilizzato oggi dalla maggior parte delle organizzazioni (Hadoop e progetti correlati, ESB e architetture correlate, CQRS che anche Fowler menzioni e così via).
Anche gli SSD diventeranno un punto di svolta; probabilmente lo sono già. Ora puoi avere una memoria permanente con tempi di accesso simili alla RAM, e sebbene gli SSD di livello server siano ancora orribilmente costosi, alla fine diminuiranno di prezzo una volta che i tassi di adozione cresceranno. È stato studiato a fondo e i risultati sono piuttosto sbalorditivi e miglioreranno nel tempo, quindi l'intero concetto di "tenere tutto in memoria" è molto meno importante di quanto non fosse in passato. Quindi, ancora una volta, proverei a concentrarmi sulla concorrenza ogni volta che è possibile.