Dalam rangkaian tiga bagian ini, kami akan mengungkapkan pencapaian teknis yang dapat secara signifikan meningkatkan pemrosesan data aplikasi yang berjalan di protokol Internet Computer (ICP).
Upgrade ini adalah tonggak Stellarator dalam peta jalan ICP, yang saat ini diperkenalkan di seluruh jaringan. Stellarator adalah terobosan dalam ketahanan data di blockchain, yang secara signifikan meningkatkan skalabilitas dan kemampuan pemrosesan penyimpanan data, memberikan peluang baru untuk aplikasi kaya data yang sebelumnya dibatasi oleh sistem.
Kemajuan ini memungkinkan pengembang untuk membangun aplikasi kompleks yang membutuhkan pemrosesan data skala besar, membawa tingkat kegunaan baru untuk teknologi blockchain.
Dalam bagian kedua dari seri ini, Luc Bläser akan memandu kita melalui ketahanan ortogonal yang ditingkatkan di Motoko, jika Anda melewatkan bagian pertama tentang ketahanan data, Anda dapat menemukannya di sini.
Sederhana, aman, cepat: Ketahanan ortogonal yang ditingkatkan di Motoko
Motoko memperkenalkan ketahanan ortogonal yang ditingkatkan, sebuah fitur unik yang dirancang untuk mengurangi beban bagi programmer dalam menangani memori stabil dengan menyediakan mekanisme upgrade yang sederhana, aman, dan cepat.
Motoko selalu dapat secara otomatis mempertahankan status program selama proses upgrade tanpa perlu kode tambahan untuk menangani ketahanan, sayangnya, implementasi sebelumnya dari fitur ini tidak dapat diskalakan untuk data yang besar atau bersarang dalam.
Fitur ini kini sangat ditingkatkan dalam hal keamanan, kinerja, dan skalabilitas, dengan inovasi kunci adalah menghindari pemindahan status ke memori stabil dengan hanya mempertahankan memori utama.
Sistem runtime sekarang memastikan konsistensi data yang sangat efisien saat upgrade, terlepas dari ukuran memori. Akhirnya, kami beralih dari memori utama 32-bit ke 64-bit, akhirnya memperluas jumlah data yang persisten.
Latar Belakang
Upgrade wadah adalah tantangan di Internet Computer, sering kali melibatkan kompleksitas, biaya yang cukup besar, dan beberapa risiko kehilangan data. Meskipun memori utama wadah (juga dikenal sebagai memori WebAssembly) persisten di antara transaksi, di masa lalu itu akan dihapus saat upgrade, yang merupakan langkah yang cukup artifisial karena memori sudah memiliki cadangan file di Internet Computer.
Alasan untuk perilaku ini adalah bahwa implementasi bahasa pemrograman utama tidak mempertimbangkan ketahanan saat desain: mereka menyusun ulang struktur memori dengan cara yang tidak terkendali pada saat kompilasi ulang atau saat runtime, dan tidak dapat dengan mudah menggunakan memori versi sebelumnya untuk melanjutkan eksekusi program yang telah dimodifikasi.
Oleh karena itu, programmer harus secara eksplisit menggunakan API memori stabil atau struktur data stabil khusus untuk menyimpan data selama proses upgrade, mirip dengan arsitektur komputer tradisional yang menyediakan memori utama yang volatil dan penyimpanan tambahan yang persisten, tetapi dengan biaya meningkatnya kompleksitas pengembangan perangkat lunak (pikirkan tentang pemetaan database objek, dll.).
Berbeda dengan itu, di Motoko, kami memiliki kontrol penuh atas kompiler dan sistem runtime, sehingga kami juga dapat mengontrol tata letak memori sepenuhnya, yang memungkinkan dukungan ketahanan ortogonal di Motoko dan tetap dapat digunakan bahkan saat upgrade.
Oleh karena itu, programmer Motoko dapat dengan mudah mengembangkan struktur data apa pun (tipe tingkat pertama) dalam konsep bahasa standar tanpa perlu menggunakan memori stabil eksplisit, struktur data stabil khusus, atau abstraksi lain yang mirip database, sistem runtime secara otomatis akan mempertahankan objek yang diperlukan.
Sebelumnya, sistem runtime Motoko mencapai ketahanan ortogonal dengan menserialisasi dan mendeserialisasi objek persisten ke memori stabil, yang mengakibatkan masalah serius dalam skalabilitas dan kinerja, karena proses serialisasi/dedeserialisasi sangat mahal dan bahkan dapat melebihi batas instruksi, yang akhirnya menghalangi upgrade. Kekurangan ini membuatnya tidak praktis untuk aplikasi yang lebih besar, itulah sebabnya kami merancang ulang dukungan ketahanan ortogonal dalam Motoko.
Dengan mengubah Internet Computer dan sistem runtime Motoko, kami mencapai upgrade yang dapat diskalakan tanpa perlu melakukan serialisasi dan deserialisasi yang mahal di ruang memori stabil tambahan, sebaliknya, kami hanya mempertahankan ketahanan memori utama selama proses upgrade, sambil memperluas ruang alamat ketahanan ortogonal menjadi 64-bit sehingga dapat diperluas di masa depan untuk kapasitas yang sama yang ditawarkan oleh memori stabil 64-bit.
Ketahanan Ortogonal yang Ditingkatkan
Tujuan kami adalah menyederhanakan pengembangan perangkat lunak di Internet Computer dan mengurangi beban programmer dalam menangani memori stabil. Untuk itu, Motoko telah dioptimalkan untuk ketahanan di Internet Computer, sekaligus mewujudkan upgrade yang sederhana, aman, dan cepat:
Sederhana: Melalui ketahanan ortogonal (variabel stabil di Motoko), struktur yang dapat dijangkau dari tipe tingkat pertama akan secara otomatis dipersistenkan selama proses upgrade, tanpa memerlukan memori stabil atau struktur data stabil.
Keamanan: Sistem runtime secara ketat memeriksa kompatibilitas tipe saat melakukan upgrade, dan mendukung berbagai perubahan data melalui migrasi implisit. Migrasi yang lebih kompleks dapat diimplementasikan melalui kode kustom, yang dapat mencegah kerusakan atau kesalahpahaman data pada tingkat memori.
Cepat: Upgrade menjadi sangat cepat karena memori utama hanya disimpan saat upgrade, tanpa perlu menyalin ke memori stabil atau menyalin dari memori stabil. Memori utama telah diperluas menjadi 64-bit sehingga dapat diperluas di masa depan untuk menjadi sebesar memori stabil.
Ikhtisar Desain
Sebagai prasyarat untuk ketahanan ortogonal yang ditingkatkan, protokol Internet Computer telah diperluas untuk mendukung pemeliharaan memori utama di seluruh upgrade dan memori utama 64-bit berdasarkan proposal WebAssembly Memory64.
Dengan desain kompiler dan sistem runtime yang disesuaikan, Motoko mendefinisikan tata letak memori yang tidak berubah saat dikompilasi, di mana semua objek dialokasikan di tumpukan dinamis dan disertai dengan metadata yang cukup, sehingga versi program baru dapat dengan aman mengambil status versi sebelumnya.
Oleh karena itu, segmen data pasif WebAssembly terbukti berguna karena memungkinkan penundaan alokasi data program statis (seperti teks) dalam sistem runtime tanpa harus mempertahankan rentang alamat statis.
Kami bahkan akan mempertahankan status pengumpul sampah inkremental (GC) selama proses upgrade, yang berarti upgrade dapat dilakukan kapan saja tanpa harus menunggu penyelesaian GC.
Untuk memastikan keamanan memori dan tipe yang ketat, sistem runtime menyimpan tipe dari versi program saat ini dan menggunakan informasi ini untuk memeriksa kompatibilitas memori saat mencoba melakukan upgrade ke versi program yang baru.
Karena pemeriksaan ini hanya bergantung pada jumlah tipe, bukan pada jumlah objek, kecepatan upgrade sangat cepat dan dapat diskalakan ke ukuran memori yang tidak terbatas. Beberapa migrasi data (seperti menambahkan atau menghapus variabel stabil, mengangkat tipe, menambahkan opsi varian, dll.) akan didukung secara otomatis, sementara migrasi yang lebih kompleks dapat diprogram secara manual, sambil tetap menjaga keamanan tipe.
Motoko mengimplementasikan migrasi data otomatis dari ketahanan tradisional yang lama ke ketahanan ortogonal yang ditingkatkan, untuk memungkinkan kemungkinan perubahan layout memori yang radikal di masa depan (yang kami harapkan jarang terjadi), Motoko juga menyertakan mekanisme ketahanan tambahan berbasis serialisasi memori stabil dan algoritma replikasi grafis, serta pemotongan waktu yang tidak terbatas yang tidak terpengaruh oleh batas instruksi protokol Internet Computer.
Anda dapat menemukan informasi lebih lanjut tentang ketahanan ortogonal yang ditingkatkan, desainnya, implementasi, skenario migrasi data, dan evaluasi kinerja dalam makalah terbaru kami (Menerapkan Upgrade Kontrak yang Lebih Cerdas Menggunakan Ketahanan Ortogonal).
Produksi
Langkah pertama, ketahanan ortogonal yang ditingkatkan dapat digunakan sebagai fitur opsional, dan dapat diaktifkan melalui opsi kompiler '--enhanced-orthogonal-persistence', parameter yang sesuai dapat ditentukan dalam dfx.json sebagai berikut:
Motoko secara otomatis melakukan migrasi dari ketahanan klasik 32-bit ke ketahanan ortogonal yang ditingkatkan, tetapi perlu dicatat bahwa tidak ada dukungan untuk operasi mundur dari EOP ke ketahanan klasik 32-bit.
Dalam versi saat ini, meskipun kami telah beralih ke 64-bit, Internet Computer hanya menyediakan 4GB memori utama, yang merupakan langkah konservatif pada tahap awal. Kami mengikuti pendekatan rilis yang menghindari risiko, dimulai dari yang kecil dan secara bertahap meningkatkan kapasitas seiring waktu.
Faktanya, dengan transisi ke 64-bit dan batas awal 4GB, diperkirakan penggunaan memori bersih pada tahap awal akan lebih kecil daripada 32-bit (karena ukuran pointer meningkat dua kali lipat), biaya instruksi untuk akses memori 64-bit juga telah meningkat untuk secara konservatif menutupi biaya perangkat keras, yang mungkin akan berkurang di masa depan.
Tetapi yang terpenting, upgrade akan menjadi sangat cepat dan tidak lagi mencapai batas instruksi Internet Computer, bahkan dengan penggunaan tumpukan maksimum (juga mempertimbangkan bahwa tidak perlu lagi mengaitkan upgrade).
Langkah selanjutnya, setelah mengumpulkan umpan balik dan secara potensial meningkatkan sistem serta memperluas kapasitas memori, kami berencana untuk menjadikan ketahanan ortogonal yang ditingkatkan sebagai mode default.
Kesimpulan
Ketahanan ortogonal yang ditingkatkan di Motoko memungkinkan pengembang Internet Computer untuk fokus pada aplikasi inti mereka tanpa perlu khawatir tentang memori stabil.
Ini tidak hanya memungkinkan penerapan ketahanan yang sederhana dan aman, tetapi juga secara signifikan mengurangi biaya upgrade dan akses data di Internet Computer.
Ketahanan ortogonal yang ditingkatkan hanya dapat dicapai melalui kompiler dan sistem runtime yang disesuaikan, sama seperti yang kami miliki untuk Motoko saat ini.
Informasi lebih lanjut
Luc Bläser, Claudio Russo, Gabor Greif, Ryan Vandersmith dan Jason Ibrahim, menerapkan upgrade kontrak yang lebih cerdas melalui ketahanan ortogonal, VMIL 2024:
https://dl.acm.org/doi/10.1145/3689490.3690401
Pos forum DFINITY - Beta testing ketahanan ortogonal yang ditingkatkan:
https://forum.dfinity.org/t/beta-testing-motoko-s-enhanced-orthogonal-persistence-eop/35787
Dokumentasi - Ketahanan ortogonal yang ditingkatkan di Motoko:
https://internetcomputer.org/docs/current/motoko/main/canister-maintenance/orthogonal-persistence/enhanced
Dokumentasi - Variabel stabil, upgrade, dan migrasi data di Motoko:
https://internetcomputer.org/docs/current/motoko/main/canister-maintenance/upgrades
Kami sangat senang menerima umpan balik Anda, silakan bagikan pemikiran Anda di saluran DFINITY Developers X atau repositori GitHub Motoko.
Bergabunglah dengan perjalanan Stellarator kami bagian 3 besok, bersama Kamil Popielarz dan Yvonne-Anne Pignolet untuk mempelajari cara meningkatkan throughput pesan masuk.
Konten IC yang Anda pedulikan
Kemajuan teknologi | Informasi proyek | Aktivitas global
Ikuti saluran Binance IC
Dapatkan berita terbaru