Alasan Sebenarnya Mengapa Fogo Menonjol
Saya memperhatikan Fogo karena alasan yang tidak ada hubungannya dengan tangkapan layar TPS atau perbandingan papan peringkat. Apa yang menarik bagi saya adalah bagaimana Layer 1 berbasis SVM secara diam-diam memaksa pengembang untuk matang. Ketika Anda membangun pada model eksekusi ini, Anda tidak hanya mendapatkan kecepatan. Anda melangkah ke lingkungan di mana desain status yang baik dihargai dan arsitektur yang ceroboh terungkap segera.
Kecepatan Menjadi Nyata Ketika Aplikasi Penting
Fogo dibentuk berdasarkan ide sederhana. Jika waktu eksekusinya benar-benar cepat dan mampu memproses transaksi independen pada saat yang sama, maka aplikasi menjadi bottleneck. Di situlah segalanya menjadi nyata. SVM tidak bertanya apakah klaim pemasaran Anda terdengar bagus. Ia bertanya apakah transaksi Anda benar-benar independen ketika pengguna nyata tiba.
Mengapa Eksekusi Paralel Tidak Sederhana
Eksekusi paralel terdengar mudah dalam teori. Transaksi berjalan bersama. Kapasitas meningkat. Semuanya terasa lancar. Dalam praktiknya, itu hanya berhasil ketika transaksi tidak berjuang untuk keadaan yang sama. Pada rantai SVM, keadaan adalah eksplisit. Setiap transaksi harus menyatakan apa yang dibacanya dan apa yang ditulisnya. Jika deklarasi tersebut tumpang tindih, runtime tidak dapat mengeksekusinya dengan aman secara paralel. Itu harus diserialisasi.
Desain Anda Sendiri Dapat Membatasi Kecepatan
Itu berarti rantai tidak dapat menyembunyikan pilihan desain yang buruk. Jika Anda menyusun aplikasi Anda sehingga setiap tindakan menulis ke akun bersama yang sama, Anda telah menciptakan kemacetan lalu lintas di dalam sistem yang dibangun untuk banyak jalur.
Kinerja Hidup di Lapisan Aplikasi
Ini adalah bagian yang sering dilewatkan orang. Mereka berbicara tentang kinerja seolah-olah itu sepenuhnya hidup di lapisan rantai. Di Fogo, kinerja menjadi tanggung jawab tingkat aplikasi. Dua aplikasi dapat duduk di rantai yang sama. Satu tetap lancar di bawah beban. Yang lainnya terasa terjebak. Perbedaannya bukan pada runtime. Itu adalah bagaimana keadaan dipartisi.
Kebiasaan Berurutan Dapat Membunuh Paralelisme
Pengembang yang datang dari sistem berurutan sering membawa kebiasaan yang terasa aman. Salah satu yang paling umum adalah mempertahankan objek keadaan pusat tunggal yang diperbarui oleh setiap tindakan. Itu terasa bersih. Itu terasa terorganisir. Itu memberi Anda satu sumber kebenaran. Pada rantai SVM, pola yang sama menjadi throttle yang diam. Setiap pengguna sekarang bersaing untuk menulis di tempat yang sama. Runtime siap untuk paralelisme, tetapi aplikasi memaksa segalanya ke dalam satu jalur.
Tata Letak Keadaan sebagai Kebijakan Konkruensi
Di Fogo, tata letak keadaan menjadi kebijakan konkruensi. Setiap akun yang dapat ditulis berfungsi seperti kunci. Jika terlalu banyak aliran bergantung pada kunci yang sama, Anda akan menghancurkan paralelisme bahkan ketika jaringan tidak tersendat. Perlambatan tidak berasal dari rantai. Itu berasal dari arsitektur Anda sendiri.
Anggap Keadaan yang Dapat Ditulis sebagai Keputusan
Model mental yang lebih baik adalah ini. Setiap bagian dari keadaan yang dapat ditulis mendefinisikan siapa yang dapat bergerak pada waktu yang sama. Tujuannya bukan untuk menghilangkan keadaan bersama sepenuhnya. Beberapa data bersama adalah hal yang diperlukan. Tujuannya adalah disiplin. Pisahkan apa yang harus dibagi dari apa yang dibagikan karena kenyamanan. Kenyamanan sering kali adalah tempat eksekusi paralel mati.
Pola yang Menjaga Aplikasi Cepat
Pola yang menjaga aplikasi tetap cepat di Fogo tidak mencolok. Mereka ketat.
Pisahkan keadaan pengguna secara agresif
Isolasi keadaan pasar tertentu daripada mengalirkan semuanya melalui satu objek global tunggal
Hindari menulis ke akun bersama hanya untuk memperbarui metrik atau data visibilitas
Nilai-nilai yang diturunkan sering kali dapat dihitung dari peristiwa daripada dimutasi di dalam setiap transaksi.
Desain Paralel yang Sukses
Lihat desain yang menangani stres dengan baik.
Tindakan pengguna sebagian besar lokal
Seorang pengguna memperbarui keadaan mereka sendiri dan segmen kecil dari keadaan bersama yang benar-benar diperlukan
Komponen bersama disusun sehingga pengguna yang tidak terkait tidak bertabrakan
Pemisahan per pengguna bukan hanya organisasi yang rapi. Ini adalah strategi throughput. Pemisahan per pasar mencegah satu pasar yang panas mengganggu yang lainnya.
Perangkap Pelaporan Global
Perangkap halus adalah pelaporan global. Pengembang menyukai penghitung global instan.
Volume total
Biaya global
Pelacak aktivitas
Papan peringkat
Metrik itu sendiri baik-baik saja. Masalah muncul ketika setiap transaksi memperbarui akun global tersebut. Sekarang setiap jalur mencakup penulisan bersama. Konflik berlipat ganda. Anda telah membangun sistem berurutan di dalam runtime paralel. Tidak peduli seberapa cepat Fogo, desain Anda memaksanya untuk berperilaku secara berurutan.
Membedakan Kebenaran dan Pelaporan
Eksekusi paralel mendorong pembangun untuk memisahkan kebenaran dari pelaporan.
Perubahan keadaan yang kritis terjadi di satu tempat
Pelaporan dapat diperbarui dengan irama yang berbeda, dibagi, atau diturunkan dari log
Begitu Anda berhenti memaksa setiap transaksi untuk mengubah akun pelaporan yang sama, konsistensi sejati menjadi mungkin.
Sistem Perdagangan dan Interaktif
Sistem perdagangan menyoroti poin ini.
Perdagangan mengkonsentrasikan aktivitas
Konsentrasi menciptakan persaingan
Satu akun buku pesanan pusat menyerialisasi semua operasi
Lingkungan frekuensi tinggi membuat cacat tidak mungkin untuk disembunyikan. Setiap akun yang dapat ditulis bersama menjadi medan perang. Alih-alih aliran independen yang bergerak secara paralel, semua orang mengantri di belakang kunci yang sama. Kinerja menurun, dan perilaku pasar berubah karena persaingan mendominasi pemesanan.
Aplikasi Berbasis Data Berat
Pembacaan jarang menjadi masalah
Penulisan lah
Hindari memperbarui cache bersama atau mencetak nilai ke akun global untuk kenyamanan
Pertahankan penulisan bersama terkurung pada aliran yang didedikasikan
Biaya Arsitektur Paralel
Tidak ada dari ini yang gratis. Arsitektur yang ramah paralel memerlukan:
Lebih banyak komponen
Pengujian yang lebih hati-hati
Observabilitas yang lebih baik
Anda sedang membangun konkruensi nyata, bukan konkruensi teoretis. Tetapi hadiahnya adalah skala yang sesuai dengan apa yang dirancang untuk diberikan oleh runtime SVM.
Kesalahan yang Paling Mahal
Kesalahan yang paling merusak itu sederhana. Satu akun yang dapat ditulis bersama yang disentuh oleh setiap transaksi. Pada rantai seperti Fogo, kesalahan itu menjadi jelas dengan cepat. Semakin cepat rantainya, semakin jelas menjadi bahwa desain Anda adalah kendala.
Fogo Membuat Percakapan Menjadi Jujur
Apa yang dilakukan Fogo adalah membuat percakapan pengembang menjadi jujur.
Tidak cukup hanya mengatakan bahwa rantainya cepat
Model eksekusi mengharuskan pengembang merancang untuk independensi
Partisi keadaan dengan cerdas
Perlakukan keadaan sebagai permukaan konkruensi
Kesimpulan: Disiplin di Atas Pemasaran
Eksekusi paralel bukan fitur pemasaran. Ini adalah disiplin. Pada Layer 1 berbasis SVM seperti Fogo, disiplin itu ditegakkan oleh desain.
