
Trong loạt bài ba phần này, chúng tôi sẽ tiết lộ những thành tựu công nghệ có thể cải thiện đáng kể việc xử lý dữ liệu cho các ứng dụng chạy trên giao thức Internet Computer (ICP).
Nâng cấp này là một cột mốc trong lộ trình ICP với Stellarator, hiện đang được quảng bá trên toàn mạng, Stellarator là một bước đột phá trong khả năng lưu trữ dữ liệu trên chuỗi, cải thiện đáng kể khả năng mở rộng và khả năng xử lý của việc lưu trữ dữ liệu, mang lại cơ hội mới cho các ứng dụng phong phú với dữ liệu phức tạp trước đây bị giới hạn bởi hệ thống.
Bước tiến này cho phép các nhà phát triển xây dựng các ứng dụng phức tạp cần xử lý dữ liệu quy mô lớn, từ đó mang lại mức độ tính hữu dụng mới cho công nghệ blockchain.
Trong phần thứ hai của loạt bài này, Luc Bläser sẽ hướng dẫn chúng ta tìm hiểu về độ bền chính xác được cải tiến của Motoko, nếu bạn đã bỏ lỡ phần đầu tiên về độ bền dữ liệu, bạn có thể tìm thấy tại đây.
Đơn giản, an toàn, nhanh chóng: Độ bền chính xác được cải tiến của Motoko
Motoko đã giới thiệu độ bền chính xác được cải tiến, đây là một tính năng độc đáo nhằm giảm bớt gánh nặng cho lập trình viên trong việc xử lý bộ nhớ ổn định bằng cách cung cấp một cơ chế nâng cấp đơn giản, an toàn và nhanh chóng.
Motoko luôn có thể tự động giữ trạng thái chương trình trong quá trình nâng cấp mà không cần bất kỳ mã bổ sung nào để xử lý tính bền vững, thật không may, việc triển khai trước đó của tính năng này không thể mở rộng cho dữ liệu lớn hoặc lồng ghép sâu.
Tính năng này hiện đã được cải thiện đáng kể về mặt bảo mật, hiệu suất và khả năng mở rộng, đổi mới chính là thông qua việc đơn giản giữ lại thay vì xóa bộ nhớ chính để tránh chuyển trạng thái sang bộ nhớ ổn định.
Hệ thống thời gian chạy hiện đảm bảo tính nhất quán dữ liệu trong quá trình nâng cấp theo cách rất hiệu quả, không phụ thuộc vào kích thước bộ nhớ, cuối cùng, chúng tôi đã chuyển từ bộ nhớ chính 32 bit sang 64 bit, cuối cùng mở rộng đến một lượng lớn dữ liệu bền vững.
Nền tảng
Nâng cấp container là một thách thức trên Internet Computer, thường liên quan đến sự phức tạp đáng kể, chi phí và một số rủi ro mất dữ liệu, mặc dù bộ nhớ chính của container (còn được gọi là bộ nhớ WebAssembly) là bền vững giữa các giao dịch, nhưng trước đây nó sẽ bị xóa trong quá trình nâng cấp, đây là một bước khá nhân tạo vì bộ nhớ đã có bản sao lưu trong Internet Computer.
Nguyên nhân của hành vi này là do các ngôn ngữ lập trình chính thống không xem xét tính bền vững khi thiết kế: chúng tái sắp xếp cấu trúc bộ nhớ theo cách không kiểm soát được khi biên dịch lại hoặc trong thời gian chạy và không thể đơn giản sử dụng bộ nhớ phiên bản trước để phục hồi việc thực thi chương trình đã sửa đổi.
Do đó, lập trình viên phải rõ ràng sử dụng API bộ nhớ ổn định hoặc cấu trúc dữ liệu ổn định đặc biệt để lưu trữ dữ liệu trong quá trình nâng cấp, điều này tương tự như kiến trúc máy tính truyền thống, nó cung cấp bộ nhớ chính dễ bị mất và lưu trữ phụ bền vững, nhưng đổi lại là sự phức tạp trong phát triển phần mềm (hãy nghĩ đến các trình ánh xạ cơ sở dữ liệu đối tượng, v.v.).
Khác với trước đây, trong Motoko, chúng tôi có thể hoàn toàn kiểm soát trình biên dịch và hệ thống thời gian chạy, do đó cũng có thể hoàn toàn kiểm soát bố cục bộ nhớ, điều này cho phép hỗ trợ độ bền chính xác trong Motoko và tiếp tục sử dụng ngay cả khi nâng cấp.
Do đó, lập trình viên Motoko có thể phát triển bất kỳ cấu trúc dữ liệu nào (kiểu bậc nhất) trong các khái niệm ngôn ngữ tiêu chuẩn mà không cần sử dụng bộ nhớ ổn định rõ ràng, cấu trúc dữ liệu ổn định chuyên dụng hoặc các trừu tượng tương tự cơ sở dữ liệu khác, hệ thống thời gian chạy sẽ tự động giữ lại các đối tượng cần thiết.
Trước đây, hệ thống thời gian chạy Motoko đạt được độ bền chính xác bằng cách tuần tự hóa và giải tuần tự hóa đồ thị đối tượng bền vào bộ nhớ ổn định, điều này dẫn đến các vấn đề nghiêm trọng về khả năng mở rộng và hiệu suất, vì quá trình tuần tự hóa/giải tuần tự hóa rất tốn kém, thậm chí có thể vượt quá giới hạn chỉ thị, cuối cùng cản trở việc nâng cấp, những thiếu sót này khiến nó không thực tế cho các ứng dụng lớn, đó là lý do chúng tôi thiết kế lại hỗ trợ độ bền chính xác trong Motoko.
Thông qua việc thay đổi Internet Computer và hệ thống thời gian chạy Motoko, chúng tôi đã đạt được nâng cấp có thể mở rộng mà không cần thực hiện tuần tự hóa và giải tuần tự hóa tốn kém trong không gian bộ nhớ ổn định phụ trợ, thay vào đó, chúng tôi chỉ giữ tính bền vững của bộ nhớ chính trong quá trình nâng cấp, đồng thời mở rộng không gian địa chỉ bền vững lên 64 bit để (trong tương lai) mở rộng đến dung lượng tương đương bộ nhớ ổn định 64 bit.
Độ bền chính xác được cải tiến
Mục tiêu của chúng tôi là đơn giản hóa việc phát triển phần mềm trên Internet Computer và giảm bớt gánh nặng cho lập trình viên trong việc xử lý bộ nhớ ổn định, vì vậy, Motoko đã được tối ưu hóa cho tính bền vững trên Internet Computer, đồng thời đạt được nâng cấp đơn giản, an toàn và nhanh chóng:
Đơn giản: Thông qua độ bền chính xác (biến ổn định trong Motoko), bất kỳ cấu trúc có thể truyền đạt nào của kiểu bậc nhất sẽ tự động được làm bền trong quá trình nâng cấp, không cần bộ nhớ ổn định hoặc cấu trúc dữ liệu ổn định.
An toàn: Hệ thống thời gian chạy kiểm tra nghiêm ngặt tính tương thích kiểu trong quá trình nâng cấp và hỗ trợ nhiều thay đổi dữ liệu thông qua di chuyển ngầm, bất kỳ di chuyển phức tạp nào hơn có thể được thực hiện thông qua mã tùy chỉnh, điều này có thể ngăn chặn bất kỳ hỏng hóc hoặc hiểu lầm nào ở cấp độ bộ nhớ.
Nhanh chóng: Nâng cấp trở nên siêu nhanh, vì bộ nhớ chính chỉ được giữ lại trong quá trình nâng cấp, không cần sao chép vào bộ nhớ ổn định hoặc sao chép từ bộ nhớ ổn định, bộ nhớ chính đã được mở rộng lên 64 bit để có thể mở rộng trong tương lai đến kích thước tương đương bộ nhớ ổn định.
Tổng quan thiết kế
Là điều kiện tiên quyết cho độ bền chính xác được cải tiến, giao thức Internet Computer đã được mở rộng để hỗ trợ việc giữ lại bộ nhớ chính qua các lần nâng cấp và bộ nhớ chính 64 bit dựa trên đề xuất WebAssembly Memory64.
Thông qua thiết kế trình biên dịch và hệ thống thời gian chạy tùy chỉnh, Motoko định nghĩa một bố cục bộ nhớ bất biến khi biên dịch, trong đó tất cả các đối tượng được phân bổ trong heap động và kèm theo đủ siêu dữ liệu để phiên bản chương trình mới có thể an toàn lấy trạng thái của phiên bản trước.
Do đó, các đoạn dữ liệu thụ động của WebAssembly đã chứng tỏ hữu ích, vì chúng cho phép phân bổ dữ liệu chương trình tĩnh (ví dụ: văn bản) trong hệ thống thời gian chạy được trì hoãn mà không cần giữ lại dải địa chỉ tĩnh.
Chúng tôi thậm chí sẽ giữ lại trạng thái của bộ thu gom rác (GC) gia tăng trong quá trình nâng cấp, điều này có nghĩa là nâng cấp có thể diễn ra bất cứ lúc nào mà không cần chờ GC hoàn thành.
Để đảm bảo tính an toàn về bộ nhớ và kiểu nghiêm ngặt, hệ thống thời gian chạy lưu trữ kiểu của phiên bản chương trình hiện tại và sử dụng thông tin này để kiểm tra tính tương thích bộ nhớ khi cố gắng nâng cấp lên phiên bản chương trình mới.
Vì kiểm tra này chỉ phụ thuộc vào số lượng kiểu, không phụ thuộc vào số lượng đối tượng, nên tốc độ nâng cấp cực kỳ nhanh và có thể mở rộng đến bất kỳ kích thước bộ nhớ nào, một số di chuyển dữ liệu (chẳng hạn như thêm hoặc xóa biến ổn định, nâng cao kiểu, thêm tùy chọn biến thể, v.v.) sẽ được hỗ trợ tự động, trong khi bất kỳ di chuyển phức tạp nào hơn có thể được lập trình thủ công, đồng thời bảo vệ tính an toàn kiểu.
Motoko đã thực hiện di chuyển dữ liệu tự động từ độ bền truyền thống cũ sang độ bền chính xác được cải tiến, để cho phép những thay đổi lớn trong bố cục bộ nhớ trong tương lai có thể xảy ra (chúng tôi dự đoán tình huống này hiếm khi xảy ra), Motoko cũng bao gồm một cơ chế bền vững phụ trợ dựa trên tuần tự hóa bộ nhớ ổn định và thuật toán sao chép đồ thị, cũng như một phân đoạn thời gian xác định không giới hạn mà không bị giới hạn bởi bất kỳ chỉ thị nào của giao thức Internet Computer.
Bạn có thể tìm thấy thông tin chi tiết hơn về độ bền chính xác được cải tiến, thiết kế, thực hiện, cảnh ngộ di chuyển dữ liệu và đánh giá hiệu suất trong bài báo gần đây của chúng tôi (sử dụng độ bền chính xác để thực hiện nâng cấp hợp đồng thông minh hơn).
Triển khai sản phẩm
Bước đầu tiên, độ bền chính xác được cải tiến có thể được sử dụng như một tính năng tùy chọn, có thể được kích hoạt thông qua tùy chọn trình biên dịch '--enhanced-orthogonal-persistence', các tham số tương ứng có thể được chỉ định trong dfx.json như sau:

Motoko sẽ tự động di chuyển từ độ bền 32 bit cổ điển sang độ bền chính xác được cải tiến, nhưng xin lưu ý rằng không hỗ trợ việc hạ cấp từ EOP xuống độ bền 32 bit cổ điển.
Trong phiên bản hiện tại, mặc dù chúng tôi đã chuyển sang 64 bit, nhưng Internet Computer chỉ cung cấp 4GB bộ nhớ chính, đây chỉ là một biện pháp bảo thủ trong bước đầu tiên, chúng tôi tuân theo cách phát hành tránh rủi ro, bắt đầu từ những điều nhỏ, sau đó dần dần tăng dung lượng theo thời gian.
Thực tế, do việc chuyển sang 64 bit và giới hạn khởi đầu 4GB, dự kiến rằng lượng sử dụng bộ nhớ ròng ở giai đoạn đầu sẽ nhỏ hơn 32 bit (bởi vì kích thước con trỏ tăng gấp đôi), chi phí chỉ thị truy cập bộ nhớ 64 bit cũng đã tăng lên để bảo thủ bao phủ chi phí phần cứng, có thể sẽ giảm trong tương lai.
Nhưng quan trọng nhất, nâng cấp sẽ trở nên rất nhanh và không còn đạt đến giới hạn chỉ thị của Internet Computer, ngay cả khi sử dụng tối đa bộ nhớ heap (cũng xem xét rằng không còn cần thiết phải có hook nâng cấp).
Bước tiếp theo, sau khi thu thập phản hồi và cải thiện hệ thống cũng như mở rộng dung lượng bộ nhớ, chúng tôi dự định sẽ đưa độ bền chính xác được cải tiến làm chế độ mặc định.
Kết luận
Độ bền chính xác được cải tiến của Motoko cho phép các nhà phát triển Internet Computer tập trung vào các ứng dụng cốt lõi của họ mà không cần lo lắng về bộ nhớ ổn định.
Điều này không chỉ cho phép đạt được tính bền vững đơn giản, an toàn mà còn giảm đáng kể chi phí nâng cấp Internet Computer và truy cập dữ liệu.
Tính bền vững chính xác chỉ có thể đạt được thông qua trình biên dịch và hệ thống thời gian chạy tùy chỉnh, giống như những gì chúng tôi hiện có cho Motoko.
Thông tin thêm
Luc Bläser, Claudio Russo, Gabor Greif, Ryan Vandersmith và Jason Ibrahim, thực hiện nâng cấp hợp đồng thông minh hơn thông qua độ bền chính xác, VMIL 2024:
https://dl.acm.org/doi/10.1145/3689490.3690401
Bài viết trên diễn đàn DFINITY - Beta thử nghiệm độ bền chính xác được cải tiến:
https://forum.dfinity.org/t/beta-testing-motoko-s-enhanced-orthogonal-persistence-eop/35787
Tài liệu - Độ bền chính xác được cải tiến của Motoko:
https://internetcomputer.org/docs/current/motoko/main/canister-maintenance/orthogonal-persistence/enhanced
Tài liệu - Biến ổn định, nâng cấp và di chuyển dữ liệu trong Motoko:
https://internetcomputer.org/docs/current/motoko/main/canister-maintenance/upgrades
Chúng tôi rất vui khi nhận được phản hồi của bạn, xin vui lòng chia sẻ ý tưởng của bạn trên kênh DFINITY Developers X hoặc repo GitHub của Motoko.
Hãy tham gia hành trình Stellarator của chúng tôi phần 3 vào ngày mai, cùng với Kamil Popielarz và Yvonne-Anne Pignolet tìm hiểu cách tăng cường thông lượng tin nhắn đầu vào.

Nội dung IC mà bạn quan tâm
Tiến bộ công nghệ | Thông tin dự án | Sự kiện toàn cầu

Theo dõi kênh IC Binance
Cập nhật thông tin mới nhất