$FOGO untuk satu alasan yang tidak ada hubungannya dengan angka papan peringkat, dan segala sesuatu yang ada hubungannya dengan bagaimana rantai dengan tenang menekan pembangun untuk tumbuh dalam arsitektur mereka, karena ketika Anda membangun di L1 berbasis SVM, Anda tidak hanya memilih lingkungan yang lebih cepat, Anda sedang memilih model eksekusi yang menghargai desain status yang baik dan mengekspos desain status yang buruk tanpa ampun.

Fogo terasa seperti dibentuk di sekitar ide bahwa kecepatan seharusnya bukan klaim kosmetik, karena jika blok benar-benar cepat dan runtime dapat memproses pekerjaan independen pada saat yang sama, maka aplikasi menjadi hambatan sebenarnya, dan pergeseran itu adalah tempat cerita SVM menjadi menarik, karena runtime pada dasarnya bertanya kepada setiap pengembang pertanyaan yang sama pada saat pengguna nyata tiba, yaitu apakah transaksi mereka benar-benar independen atau apakah mereka secara tidak sengaja merancang satu kunci bersama yang harus disentuh oleh semua orang.
Eksekusi paralel terdengar sederhana ketika dijelaskan sebagai transaksi yang berjalan bersamaan, tetapi detail praktis yang mengubah segalanya adalah bahwa itu hanya berfungsi ketika dua transaksi tidak saling berebut keadaan yang sama, dan di SVM, keadaan bukanlah blob tak terlihat yang diinterpretasikan oleh rantai sesuka hati, keadaan itu eksplisit dan konkret, dan setiap transaksi harus menyatakan apa yang akan dibaca dan apa yang akan ditulis, yang berarti rantai dapat menjadwalkan pekerjaan dengan percaya diri ketika deklarasi tersebut tidak tumpang tindih, dan itu juga berarti rantai tidak dapat menyelamatkan Anda dari tata letak Anda sendiri ketika Anda memaksakan semuanya untuk tumpang tindih.
Ini adalah bagian yang paling sering diabaikan oleh komentar permukaan, karena orang berbicara seolah-olah kinerja berada di lapisan rantai, tetapi di Fogo, saat Anda mulai memodelkan aplikasi, kinerja menjadi sesuatu yang Anda rancang ke dalam cara akun dan data dipisahkan, dan itulah sebabnya dua aplikasi di rantai yang sama bisa terasa sangat berbeda di bawah tekanan, dengan satu tetap lancar sementara yang lain terjebak aneh, meskipun keduanya berada di lingkungan eksekusi cepat yang sama.
Saya telah memperhatikan bahwa ketika pembangun berasal dari kebiasaan eksekusi berurutan, mereka membawa satu naluri yang terasa aman tetapi menjadi mahal di SVM, yaitu naluri untuk menjaga objek keadaan pusat yang diperbarui oleh setiap tindakan, karena itu membuat pemikiran tentang sistem terasa bersih, membuat analitik mudah, dan membuat kode terasa seperti memiliki satu sumber kebenaran, tetapi di rantai SVM desain yang sama menjadi throttle yang diam, karena setiap tindakan pengguna sekarang berusaha menulis ke tempat yang sama, jadi bahkan jika runtime siap untuk dieksekusi secara paralel, aplikasi Anda telah menciptakan jalur tunggal yang harus dimasuki semuanya.
Apa yang berubah di @Fogo Official adalah bahwa tata letak keadaan berhenti menjadi hanya penyimpanan dan mulai menjadi kebijakan konkurensi, karena setiap akun yang dapat ditulis menjadi semacam kunci, dan ketika Anda menempatkan terlalu banyak di balik satu kunci, Anda tidak hanya memperlambat satu komponen kecil, Anda menghancurkan paralelisme untuk seluruh aliran, dan rantai tidak perlu terhambat agar Anda merasakannya, karena desain kontrak Anda sendiri menghasilkan kemacetan dengan memaksa pengguna yang tidak terkait untuk bertabrakan pada set tulisan yang sama.

Cara yang paling berguna untuk memikirkannya adalah memperlakukan setiap bagian keadaan yang dapat ditulis sebagai keputusan tentang siapa yang diizinkan untuk melanjutkan pada saat yang sama, dan tujuan desain menjadi mengurangi tabrakan yang tidak perlu, yang tidak berarti menghapus keadaan bersama sepenuhnya, karena beberapa keadaan bersama adalah esensial, tetapi itu berarti disiplin tentang apa yang harus dibagikan dan apa yang hanya dibagikan untuk kenyamanan, karena kenyamanan adalah tempat eksekusi paralel diam-diam mati.
Di Fogo, pola yang menjaga aplikasi terasa cepat jarang rumit, tetapi mereka ketat, karena mereka mengharuskan pengembang untuk secara agresif memisahkan keadaan pengguna, untuk mengisolasi keadaan spesifik pasar alih-alih mendorong semuanya melalui satu objek protokol global, dan untuk berhenti menulis ke akun bersama yang sebagian besar ada untuk pelacakan dan visibilitas, karena metrik yang diturunkan tersebut dapat ada tanpa menjadi bagian dari jalur tulis kritis untuk setiap transaksi.
Ketika saya melihat desain ramah paralel yang sukses, mereka cenderung memperlakukan tindakan pengguna sebagai sebagian besar lokal, di mana seorang pengguna menyentuh keadaan mereka sendiri dan sepotong kecil keadaan bersama yang benar-benar diperlukan, dan sepotong bersama tersebut disusun sedemikian rupa sehingga tidak memaksa pengguna yang tidak terkait untuk bersaing, itulah sebabnya pemisahan per pengguna bukan hanya trik organisasi yang rapi, itu adalah strategi throughput, dan pemisahan per pasar bukan hanya pilihan arsitektur yang bersih, itu adalah perbedaan antara satu pasar aktif yang menarik semuanya ke bawah dan beberapa pasar yang mengalir secara independen.
Jebakan tersembunyi adalah bahwa pengembang sering menulis keadaan bersama karena mereka ingin kebenaran global instan, seperti total biaya global, penghitung volume global, pelacak aktivitas global, papan peringkat global, atau metrik protokol global, dan masalahnya bukanlah metrik tersebut buruk, masalahnya adalah ketika Anda memperbarui mereka dalam transaksi yang sama dengan setiap tindakan pengguna, Anda menyuntikkan tulisan bersama ke setiap jalur, sehingga setiap jalur sekarang bertentangan, dan tiba-tiba Anda telah membangun aplikasi berurutan di dalam runtime paralel, dan tidak peduli seberapa cepat Fogo, karena desain Anda sendiri memaksa rantai untuk memperlakukan pekerjaan independen sebagai pekerjaan tergantung.
Apa yang diubah oleh eksekusi paralel, dalam arti yang sangat praktis, adalah bahwa pembangun didorong untuk memisahkan keadaan kebenaran dari keadaan pelaporan, dan mereka didorong untuk memperbarui keadaan pelaporan pada irama yang berbeda, atau menuliskannya ke dalam segmen yang dibagi, atau menghasilkannya dari jejak peristiwa, karena setelah Anda berhenti memaksa setiap transaksi untuk menulis akun pelaporan yang sama, runtime akhirnya dapat menjadwalkan pekerjaan paralel yang nyata, dan aplikasi mulai terasa seperti milik pada rantai SVM alih-alih hanya berjalan di atasnya.
Ini menjadi lebih terlihat dalam aplikasi gaya perdagangan, yang merupakan tempat sikap Fogo membuat diskusi terasa terarah, karena perdagangan memusatkan aktivitas, dan konsentrasi menciptakan persaingan, dan persaingan adalah musuh eksekusi paralel, jadi jika sistem perdagangan dirancang di sekitar satu keadaan buku pesanan pusat yang harus dimutasi untuk setiap interaksi, rantai akan menyusun interaksi tersebut tidak peduli seberapa cepat bloknya, dan pengalaman pengguna akan memburuk tepat ketika paling penting, itulah sebabnya pembangun dipaksa menjadi desain yang lebih sulit tetapi lebih baik, di mana komponen terpanas diminimalkan, di mana keadaan dipartisi, di mana jalur penyelesaian dipersempit, dan di mana bagian-bagian yang tidak perlu dimutasi pada setiap tindakan dihapus dari jalur kritis.
Logika yang sama muncul dalam aplikasi waktu nyata yang orang anggap akan mudah di rantai cepat, seperti sistem interaktif yang memperbarui secara frekuent, karena pendekatan naif adalah untuk mempertahankan satu keadaan dunia dan terus-menerus memutasi, tetapi di @Fogo Official itu menjadi titik tabrakan yang dijamin, karena setiap peserta berusaha untuk menyentuh objek yang dapat ditulis yang sama, jadi pendekatan yang lebih baik adalah untuk mengisolasi keadaan per peserta, untuk menglokalisasi zona bersama alih-alih mengglobalisasikannya, dan untuk memperlakukan agregat global sebagai sesuatu yang diperbarui dengan cara yang lebih terkontrol, karena saat Anda berhenti membuat setiap tindakan menulis ke objek bersama yang sama, waktu eksekusi dapat mulai menjalankan banyak tindakan bersama, dan di situlah kecepatan yang dirasakan menjadi nyata.
Dalam logika gaya frekuensi tinggi, yang merupakan tempat rantai latensi rendah sering dinilai dengan keras, eksekusi paralel membuat cacat desain tidak mungkin disembunyikan, karena ketika banyak aktor mengajukan tindakan secara cepat, setiap keadaan yang dapat ditulis bersama menjadi medan perang, dan alih-alih membangun sistem di mana banyak aliran berkembang secara independen, Anda membangun sistem di mana semua orang berlomba untuk mengunci yang sama, dan hasilnya bukan hanya aplikasi yang lebih lambat, itu adalah dinamika pasar yang berbeda, karena urutan menjadi didominasi oleh persaingan daripada oleh strategi, yang merupakan alasan mengapa desain terbaik cenderung mengisolasi tulisan, mengurangi mutasi bersama, dan memperlakukan komponen yang diperebutkan sebagai sempit dan disengaja daripada luas dan kebetulan.
Aplikasi yang berat data menunjukkan pola yang sama dengan cara yang lebih tenang, karena sebagian besar konsumen data hanya perlu membaca, dan pembacaan bukanlah masalah, tetapi ketika aliran konsumen mulai menulis data bersama untuk kenyamanan, seperti mencap nilai ke dalam akun global atau memperbarui cache bersama, mereka meracuni paralelisme tanpa keuntungan nyata, dan pendekatan yang lebih baik adalah membiarkan konsumen membaca data bersama dan hanya menulis keputusan mereka sendiri, karena setelah Anda menjaga tulisan bersama terbatas pada aliran pembaruan yang didedikasikan, Anda melindungi konkurensi untuk semua orang.
Kompromi yang secara implisit diminta oleh Fogo kepada pengembang adalah bahwa arsitektur yang ramah paralel tidak gratis, karena setelah Anda membagi keadaan dan memisahkan akun, Anda mengelola lebih banyak komponen, Anda mempertimbangkan lebih banyak tepi, dan Anda membangun sistem di mana konkurensi adalah nyata daripada teoritis, yang berarti pengujian harus lebih ketat, jalur pembaruan harus lebih hati-hati, dan pengamatan harus lebih baik, tetapi hadiahnya adalah aplikasi dapat diskalakan dengan cara yang didesain untuk mendukung runtime SVM, di mana tindakan independen benar-benar berlangsung bersama alih-alih menunggu di belakang hambatan global.
Kesalahan yang menghancurkan sebagian besar keuntungan paralel bukanlah kesalahan yang canggih, itu adalah kesalahan sederhana, yaitu menciptakan satu akun bersama yang dapat ditulis yang setiap transaksi menyentuh, dan di rantai seperti Fogo kesalahan itu sangat mahal, karena semakin cepat rantai menjadi, semakin terlihat bahwa desain Anda sendiri adalah pembatas, dan keterlihatan itu bukanlah kegagalan rantai, itu adalah rantai yang mengungkapkan apa arsitektur sebenarnya.

Fogo dalam konteks ini adalah bahwa ia membuat percakapan pembangun menjadi lebih jujur, karena tidak cukup untuk mengatakan bahwa rantainya cepat, model rantai memaksa pengembang untuk membuktikan bahwa mereka pantas mendapat kecepatan itu, dan buktinya ada dalam cara keadaan dibentuk, dipartisi, dan diakses, itulah sebabnya eksekusi paralel bukanlah detail pemasaran, itu adalah disiplin yang mengubah cara aplikasi dibangun, dan juga mengapa L1 berbasis SVM seperti Fogo tidak hanya lebih cepat, tetapi juga lebih menuntut, karena ini meminta pengembang untuk merancang dengan mempertimbangkan konflik, untuk memperlakukan keadaan sebagai permukaan konkurensi, dan untuk membangun sistem yang menghormati gagasan bahwa kinerja sama pentingnya dengan tata letak seperti halnya dengan waktu eksekusi.


