$FOGO terasa seperti sedang dibentuk di sekitar ide bahwa kecepatan seharusnya bukanlah klaim kosmetik, karena jika blok-blok benar-benar cepat dan waktu proses dapat memproses pekerjaan independen secara bersamaan, maka aplikasi menjadi hambatan nyata dan perubahan itu adalah di mana cerita SVM menjadi menarik, karena waktu proses pada dasarnya menanyakan 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 bersama, tetapi rincian praktis yang mengubah segalanya adalah bahwa itu hanya berfungsi ketika dua transaksi tidak bertarung atas status yang sama, dan di SVM status bukanlah blob tak terlihat yang diinterpretasikan rantai sesuka hati, status adalah 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 memaksa semuanya untuk tumpang tindih.
Ini adalah bagian yang paling banyak komentar tingkat permukaan yang lewat, karena orang berbicara seolah-olah kinerja berada di lapisan rantai, tetapi di Fogo saat Anda mulai memodelkan aplikasi, kinerja menjadi sesuatu yang Anda desain ke dalam cara akun dan data dipisahkan, dan itulah mengapa dua aplikasi di rantai yang sama dapat terasa sangat berbeda di bawah tekanan, dengan satu tetap halus sementara yang lain terjebak dengan aneh, meskipun keduanya berada di lingkungan eksekusi cepat yang sama.
Saya telah memperhatikan bahwa ketika para pembangun datang dari kebiasaan eksekusi berurutan, mereka membawa satu naluri yang terasa aman tetapi menjadi mahal di SVM, yaitu naluri untuk menjaga objek status pusat yang diperbarui oleh setiap aksi, karena itu membuat penalaran 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 aksi pengguna kini berusaha menulis ke tempat yang sama, jadi bahkan jika runtime siap untuk dieksekusi secara paralel, aplikasi Anda telah menciptakan satu jalur tunggal yang harus dimasuki oleh semuanya.
Apa yang berubah di Fogo adalah bahwa tata letak status 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 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.
FOGO untuk satu alasan yang tidak ada hubungannya dengan angka papan peringkat, dan semuanya berhubungan dengan bagaimana rantai secara diam-diam menekan para pembangun untuk tumbuh dalam arsitektur mereka, karena ketika Anda membangun di L1 berbasis SVM Anda tidak hanya memilih lingkungan yang lebih cepat, Anda memilih model eksekusi yang menghargai desain status yang baik dan mengekspos desain status yang buruk tanpa ampun.
Fogo terasa seolah dibentuk di sekitar ide bahwa kecepatan tidak boleh menjadi klaim kosmetik, karena jika blok benar-benar cepat dan runtime dapat memproses pekerjaan independen pada saat yang sama, maka aplikasi menjadi hambatan nyata, dan pergeseran itu adalah di mana cerita SVM menjadi menarik, karena runtime pada dasarnya menanyakan 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 bersama, tetapi rincian praktis yang mengubah segalanya adalah bahwa itu hanya berfungsi ketika dua transaksi tidak bertarung atas status yang sama, dan di SVM status bukanlah blob tak terlihat yang diinterpretasikan rantai sesuka hati, status adalah 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 memaksa semuanya untuk tumpang tindih.
Ini adalah bagian yang paling banyak komentar tingkat permukaan yang lewat, karena orang berbicara seolah-olah kinerja berada di lapisan rantai, tetapi di Fogo saat Anda mulai memodelkan aplikasi, kinerja menjadi sesuatu yang Anda desain ke dalam cara akun dan data dipisahkan, dan itulah mengapa dua aplikasi di rantai yang sama dapat terasa sangat berbeda di bawah tekanan, dengan satu tetap halus sementara yang lain terjebak dengan aneh, meskipun keduanya berada di lingkungan eksekusi cepat yang sama.
Saya telah memperhatikan bahwa ketika para pembangun datang dari kebiasaan eksekusi berurutan, mereka membawa satu naluri yang terasa aman tetapi menjadi mahal di SVM, yaitu naluri untuk menjaga objek status pusat yang diperbarui oleh setiap aksi, karena itu membuat penalaran 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 aksi pengguna kini berusaha menulis ke tempat yang sama, jadi bahkan jika runtime siap untuk dieksekusi secara paralel, aplikasi Anda telah menciptakan satu jalur tunggal yang harus dimasuki oleh semuanya...
Apa yang berubah di Fogo Official adalah bahwa tata letak status 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 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 memikirkan hal ini adalah dengan memperlakukan setiap bagian dari status 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 status bersama sepenuhnya, karena beberapa status bersama adalah penting, 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 seorang pengembang untuk memisahkan status pengguna secara agresif, untuk mengisolasi status 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 dihasilkan tersebut dapat ada tanpa menjadi bagian dari jalur tulis kritis untuk setiap transaksi.
Ketika saya melihat desain ramah paralel yang sukses, mereka cenderung memperlakukan aksi pengguna sebagai lokal, di mana seorang pengguna menyentuh status mereka sendiri dan sepotong kecil status bersama yang benar-benar diperlukan, dan sepotong bersama tersebut terstruktur sedemikian rupa sehingga tidak memaksa pengguna yang tidak terkait untuk bertanding, 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 menyeret semuanya ke bawah dan beberapa pasar yang mengalir secara independen.
Jebakan yang tersembunyi adalah bahwa para pengembang sering menulis status bersama karena mereka menginginkan kebenaran global instan, seperti total biaya global, penghitung volume global, pelacak aktivitas global, papan peringkat global, atau metrik protokol global, dan masalahnya bukan bahwa metrik tersebut buruk, masalahnya adalah ketika Anda memperbarui mereka dalam transaksi yang sama dengan setiap aksi pengguna, Anda menyuntikkan tulisan bersama ke setiap jalur, sehingga setiap jalur kini bertentangan, dan tiba-tiba Anda telah membangun aplikasi berurutan di dalam runtime paralel, dan tidak penting seberapa cepat Fogo, karena desain Anda sendiri memaksa rantai untuk memperlakukan pekerjaan independen sebagai pekerjaan tergantung.
Apa yang diubah oleh eksekusi paralel, dalam arti praktis, adalah bahwa para pembangun didorong untuk memisahkan status kebenaran dari status pelaporan, dan mereka didorong untuk memperbarui status pelaporan pada irama yang berbeda, atau menulisnya ke segmen yang terpecah, atau menghasilkannya dari jejak kejadian, karena setelah Anda berhenti memaksa setiap transaksi untuk menulis ke akun pelaporan yang sama, runtime akhirnya dapat menjadwalkan pekerjaan paralel yang nyata, dan aplikasi mulai terasa seperti milik rantai SVM daripada sekadar berjalan di atasnya.
Ini menjadi lebih terlihat lagi dalam aplikasi gaya perdagangan, di mana 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 status 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 hal itu paling penting, itulah sebabnya para pembangun dipaksa ke dalam desain yang lebih sulit tetapi lebih baik, di mana komponen yang paling panas diminimalkan, di mana status dipartisi, di mana jalur penyelesaian dipersempit, dan di mana bagian yang tidak perlu dimutasi pada setiap aksi dihapus dari jalur kritis.
Logika yang sama muncul dalam aplikasi waktu nyata yang orang anggap akan mudah pada rantai cepat, seperti sistem interaktif yang sering diperbarui, karena pendekatan naif adalah mempertahankan satu status dunia dan memutasi terus-menerus, tetapi di @Fogo Official itu menjadi titik tabrakan yang dijamin, karena setiap peserta mencoba menyentuh objek yang dapat ditulis yang sama, jadi pendekatan yang lebih baik adalah mengisolasi status per peserta, untuk menglokalisasi zona bersama alih-alih mengglobalisasikannya, dan memperlakukan agregat global sebagai sesuatu yang diperbarui dengan cara yang lebih terkendali, karena saat Anda berhenti membuat setiap aksi menulis ke objek bersama yang sama, runtime dapat mulai menjalankan banyak aksi bersama, dan di situlah kecepatan yang dirasakan menjadi nyata.
Dalam logika gaya frekuensi tinggi, di mana rantai latensi rendah seringkali dinilai dengan keras, eksekusi paralel membuat cacat desain tidak mungkin disembunyikan, karena ketika banyak aktor mengirimkan aksi dengan cepat, setiap keadaan yang dapat ditulis bersama menjadi medan pertempuran, dan alih-alih membangun sistem di mana banyak aliran berkembang secara independen, Anda membangun sistem di mana semua orang berlomba untuk kunci 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 membaca bukanlah masalah, tetapi ketika aliran konsumen mulai menulis data bersama untuk kenyamanan, seperti menempelkan nilai ke akun global atau memperbarui cache bersama, mereka meracuni paralelisme tanpa keuntungan yang nyata, dan pendekatan yang lebih baik adalah membiarkan konsumen membaca data bersama dan hanya menulis keputusan mereka sendiri, karena setelah Anda menjaga tulisan bersama terkurung dalam aliran pembaruan yang didedikasikan, Anda melindungi konkurensi untuk semua orang.
Pertukaran yang secara implisit diminta oleh Fogo kepada para pengembang untuk diterima adalah bahwa arsitektur yang ramah paralel tidak gratis, karena setelah Anda memecah status dan memisahkan akun, Anda mengelola lebih banyak komponen, Anda berusaha memahami lebih banyak tepi, dan Anda membangun sistem di mana konkurensi adalah nyata daripada teoretis, yang berarti pengujian harus lebih ketat, jalur peningkatan harus lebih berhati-hati, dan observabilitas harus lebih baik, tetapi hadiahnya adalah bahwa aplikasi dapat skala dengan cara yang didukung oleh runtime SVM, di mana tindakan independen benar-benar berjalan bersama alih-alih menunggu di belakang penyempitan global.
Kesalahan yang menghancurkan sebagian besar keuntungan paralel bukanlah kesalahan yang canggih, itu adalah kesalahan sederhana, yaitu menciptakan satu akun yang dapat ditulis bersama yang menyentuh setiap transaksi, dan pada rantai seperti Fogo kesalahan itu sangat mahal, karena semakin cepat rantai itu, semakin terlihat bahwa desain Anda sendiri adalah pembatas, dan visibilitas itu bukan kegagalan rantai, itu adalah rantai yang mengungkap apa sebenarnya arsitektur.
\u003cm-61/\u003e \u003ct-63/\u003e\u003cc-64/\u003e