Ada berbagai macam teknik untuk pemrosesan transaksi berkinerja tinggi dan yang ada di artikel Fowler hanyalah salah satu dari sekian banyak teknik yang ada. Daripada mendaftar banyak teknik yang mungkin atau mungkin tidak berlaku untuk situasi siapa pun, saya pikir lebih baik untuk membahas prinsip-prinsip dasar dan bagaimana LMAX menangani sejumlah besar dari mereka.
Untuk sistem pemrosesan transaksi skala tinggi, Anda ingin melakukan semua hal berikut sebanyak mungkin:
Minimalkan waktu yang dihabiskan di tingkat penyimpanan paling lambat. Dari tercepat hingga paling lambat pada server modern yang Anda miliki: CPU / L1 -> L2 -> L3 -> RAM -> Disk / LAN -> WAN. Lompatan dari bahkan disk magnetik modern tercepat ke RAM paling lambat adalah lebih dari 1000x untuk akses sekuensial ; akses acak bahkan lebih buruk.
Minimalkan atau hilangkan waktu yang dihabiskan untuk menunggu . Ini berarti berbagi negara sesedikit mungkin, dan, jika negara harus dibagi, menghindari kunci eksplisit bila memungkinkan.
Sebarkan beban kerja. CPU belum mendapatkan jauh lebih cepat dalam beberapa tahun terakhir, tetapi mereka telah mendapatkan lebih kecil, dan 8 core sangat umum pada server. Di luar itu, Anda bahkan dapat menyebarkan pekerjaan melalui beberapa mesin, yang merupakan pendekatan Google; hal yang hebat tentang ini adalah bahwa ia menskala segala sesuatu termasuk I / O.
Menurut Fowler, LMAX mengambil pendekatan berikut untuk masing-masing:
Simpan semua status dalam memori setiap saat. Sebagian besar mesin database sebenarnya akan melakukan ini, jika seluruh database dapat masuk dalam memori, tetapi mereka tidak ingin meninggalkan apa pun untuk kesempatan, yang dapat dimengerti pada platform perdagangan real-time. Untuk melakukan ini tanpa menambahkan satu ton risiko, mereka harus membangun banyak cadangan ringan dan infrastruktur failover.
Gunakan antrian bebas kunci ("pengganggu") untuk aliran acara masukan. Berbeda dengan antrian pesan tahan lama tradisional yang pasti tidak bebas kunci, dan pada kenyataannya biasanya melibatkan transaksi yang didistribusikan dengan sangat lambat .
Tidak banyak. LMAX melempar yang ini di bawah bus atas dasar bahwa beban kerja saling tergantung; hasil satu mengubah parameter untuk yang lain. Ini adalah peringatan kritis , dan yang secara eksplisit dipanggil Fowler. Mereka membuat beberapa penggunaan concurrency dalam rangka memberikan kemampuan failover, tapi semua logika bisnis diproses pada thread tunggal .
LMAX bukan satu-satunya pendekatan untuk OLTP skala tinggi. Dan meskipun itu cukup brilian dalam dirinya sendiri, Anda tidak perlu menggunakan teknik-teknik yang canggih untuk melakukan tingkat kinerja itu.
Dari semua prinsip di atas, # 3 mungkin yang paling penting dan paling efektif, karena, sejujurnya, perangkat keras itu murah. Jika Anda dapat mempartisi beban kerja dengan benar di setengah lusin inti dan beberapa lusin mesin, maka langit adalah batas untuk teknik Komputasi Paralel konvensional . Anda akan terkejut betapa banyak throughput yang Anda dapat lakukan dengan apa-apa selain sekelompok antrian pesan dan distributor round-robin. Ini jelas tidak seefisien LMAX - sebenarnya bahkan tidak dekat - tetapi throughput, latensi, dan efektivitas biaya adalah masalah yang terpisah, dan di sini kita berbicara secara khusus tentang throughput.
Jika Anda memiliki jenis kebutuhan khusus yang sama dengan yang dilakukan LMAX - khususnya, keadaan bersama yang sesuai dengan kenyataan bisnis yang bertentangan dengan pilihan desain tergesa-gesa - maka saya akan menyarankan untuk mencoba komponen mereka, karena saya belum melihat banyak lain yang sesuai dengan persyaratan tersebut. Tetapi jika kita hanya berbicara tentang skalabilitas tinggi maka saya mendorong Anda untuk melakukan lebih banyak penelitian ke dalam sistem terdistribusi, karena mereka adalah pendekatan kanonik yang digunakan oleh sebagian besar organisasi saat ini (Hadoop dan proyek terkait, ESB dan arsitektur terkait, CQRS yang juga Fowler juga menyebutkan, dan sebagainya).
SSD juga akan menjadi game-changer; bisa dibilang, mereka sudah ada. Anda sekarang dapat memiliki penyimpanan permanen dengan waktu akses yang mirip dengan RAM, dan meskipun SSD tingkat server masih sangat mahal, mereka akhirnya akan turun harga begitu tingkat adopsi tumbuh. Ini telah diteliti secara luas dan hasilnya cukup membingungkan dan hanya akan menjadi lebih baik dari waktu ke waktu, sehingga keseluruhan konsep "simpan semuanya dalam ingatan" jauh lebih penting daripada dulu. Jadi sekali lagi, saya akan mencoba untuk fokus pada konkurensi jika memungkinkan.