Các nút cổ chai và rào cản để phát triển Dapps trên Ethereum là gì?
Lưu ý của biên tập viên: Bài viết này đến từTrại Blockchain (ID: blockchain_camp)Lưu ý của biên tập viên: Bài viết này đến từ
Trại Blockchain (ID: blockchain_camp)
Trại Blockchain (ID: blockchain_camp)
Các ứng dụng phi tập trung (Dapps) được coi là những đổi mới đột phá trong các lĩnh vực như ngân hàng (Di-Fi) và chơi game. Nhưng ngay cả những giải pháp sáng tạo nhất cũng sẽ không được công nhận nếu chúng không đáp ứng được kỳ vọng của người tiêu dùng.
Những gì người tiêu dùng muốn là trải nghiệm người dùng mượt mà và trưởng thành và đạt được mục tiêu này là một thách thức lớn khác đối với các nhà phát triển Ethereum Dapp.
Bài viết này cung cấp tổng quan về kiến trúc Dapp điển hình và chỉ ra một số hạn chế cố hữu của ngăn xếp Ethereum tiêu chuẩn ngày nay khiến các nhà phát triển khó tạo ra trải nghiệm người dùng thuyết phục. Sau đó, tôi sẽ giới thiệu một số cải tiến trong lĩnh vực cơ sở hạ tầng Ethereum có thể giúp các nhà phát triển vượt qua những thách thức này.
tiêu đề phụ
Kiến trúc Ethereum Dapp cổ điển
Nói chung, một Dapp trên Ethereum bao gồm ba phần chính:
Mã giao diện người dùng, được viết bằng Java.
Phụ trợ - thường là một nút chuỗi khối Ethereum tiêu chuẩn. Giao tiếp giữa giao diện người dùng và giao diện người dùng phía sau thường sử dụng API JSON-RPC hoặc GraphQL do nút cung cấp.
tiêu đề phụ
Nút phụ trợ tự xây dựng
Trong những ngày đầu của Ethereum, các nhà phát triển phải vận hành các nút Ethereum của riêng họ. Sau khi Dapp được phát hành, họ cũng phải vận hành các nút (hoặc cụm nút) cấp sản xuất. Vận hành một nút blockchain là một khối lượng công việc nặng nề và cũng sẽ ảnh hưởng đến hiệu quả của các nhà phát triển.
Nhà cung cấp dịch vụ nút (NaaS)
Thách thức nói trên đã dẫn đến sự gia tăng của các nền tảng "nút như một dịch vụ" từ các công ty như Infura và các công ty tương đối mới hơn như Nodesmith, Quiknode, Blockdaemon, Ethernode, Chainstack, Alchemy, CloudFlare và các công ty khác.
Các nền tảng này cung cấp cho các nhà phát triển các nút Ethereum dựa trên đám mây, tiết kiệm cho các nhà phát triển nỗ lực vận hành các nút. Giải pháp phát triển và sản xuất. Các nền tảng này giảm tải việc quản lý hệ thống, chẳng hạn như các bản vá lỗi và cập nhật, cho hệ điều hành cơ sở và bản thân phần mềm nút cho các nhà phát triển.
tiêu đề phụ
Hạn chế vốn có của các nút Ethereum
Ngay cả khi dịch vụ nút có thể thay thế thành công nhà phát triển với tư cách là quản trị viên hệ thống, nó không thể giúp nhà phát triển đạt được trải nghiệm người dùng tốt hơn để xây dựng Dapp tốt hơn, bởi vì kiến trúc từ dịch vụ nút và JSON-RPC và các hạn chế cố hữu của giao diện GraphQL.
Những hạn chế chính bao gồm:
1. Thông tin trạng thái quan sát không nhất quán
Để mở rộng quy mô vượt quá khả năng của một nút trong khi cung cấp độ tin cậy cao hơn, các nút với tư cách là nền tảng dịch vụ cung cấp quyền truy cập vào nhóm nút thông qua bộ cân bằng tải.
Vì các nút này đều hoạt động độc lập như các nút ngang hàng trong mạng Ethereum, nên khi thông tin được truyền qua mạng tại một thời điểm nhất định, các nút khác nhau có thể ở các độ cao khối khác nhau hoặc thậm chí ở các nhánh khác nhau. Điều này có nghĩa là Dapp có thể nhận được thông tin không nhất quán về trạng thái của chuỗi khối, bởi vì kết quả của các yêu cầu của nó được cung cấp bởi các nút khác nhau phía sau bộ cân bằng tải.
Các nền tảng dịch vụ nút thường cố gắng giải quyết vấn đề này thông qua độ dính của phiên trên bộ cân bằng tải. Bộ phận này sẽ luôn cố gắng gửi truy vấn của giao diện người dùng được chỉ định đến cùng một nút phụ trợ, nhưng phương pháp này sẽ không thành công trong một số trường hợp:
Khi giao diện người dùng tạo ra nhiều yêu cầu hơn một nút back-end có thể xử lý;
Khi sự cố mạng khiến frontend ngắt kết nối với backend và phải kết nối lại;
Nhiều nền tảng phục vụ nút sẽ định tuyến các loại yêu cầu giao diện người dùng khác nhau (ví dụ: gửi giao dịch hoặc tìm kiếm lịch sử chuỗi) đến các nhóm nút phụ trợ khác nhau được tối ưu hóa cho loại truy vấn đó.
Sau đó, rất khó để Dapp xử lý việc tổ chức lại chuỗi vì giao diện người dùng thường truy cập vào nhiều nút phụ trợ và trạng thái chuỗi khối thu được bởi các nút phụ trợ này không nhất quán với nhau. Khi truy ngược lại lịch sử chuỗi, một Dapp có thể đột nhiên phát hiện ra rằng khối gốc mà nó đang tìm kiếm không còn tồn tại (vì nó hiện đang tương tác với một nút khác trên một nhánh rẽ khác). Sau đó, các nhà phát triển Dapp phải viết mã để giải quyết vấn đề này (thường bằng cách liên tục kết nối lại cho đến khi tìm thấy một nút). Điều này làm tăng thêm sự phức tạp không cần thiết cho Dapp và có thể dẫn đến sự khác biệt trong thông tin được hiển thị cho người dùng.
2. Tìm kiếm thông tin trên blockchain chậm và hạn chế
Các Dapp bị hạn chế về khả năng tìm kiếm các giao dịch hoặc lịch sử trên chuỗi, vì các nút Ethereum tiêu chuẩn không phù hợp để hỗ trợ các tìm kiếm chính xác hoặc thực hiện lắng nghe dữ liệu thời gian thực được lọc. Để thực hiện việc này một cách hiệu quả, chúng tôi cần thực hiện rất nhiều việc lập chỉ mục cho hàng triệu khối và giao dịch, nhưng:
Các nút Ethereum chỉ lập chỉ mục các trường nhất định trong nhật ký được gửi khi thực hiện giao dịch (các trường được lập chỉ mục phải được nhà phát triển đánh dấu khi triển khai hợp đồng)
Các nút Ethereum không lập chỉ mục dữ liệu cho các giao dịch nội bộ (xảy ra khi một hợp đồng thông minh gọi một phương thức của một hợp đồng khác)
Các nhà phát triển không muốn thêm các trường chỉ mục bổ sung vì chi phí của mỗi giao dịch sẽ tăng đối với mỗi trường chỉ mục bổ sung, điều này sẽ mang lại thêm chi phí cho người dùng theo hợp đồng
Các nút Ethereum thực hiện tìm kiếm bằng cách sử dụng bộ lọc Bloom, do đó, đây luôn là một tìm kiếm mờ và sẽ tạo ra kết quả dương tính giả. Đối sánh chính xác yêu cầu xử lý bổ sung bởi giao diện người dùng. Giao diện người dùng phải lấy toàn bộ khối hoặc giao dịch của đối sánh mờ và truy xuất lại để tìm kết quả của đối sánh chính xác. Điều này không chỉ đòi hỏi nỗ lực của nhà phát triển mà còn lãng phí băng thông giữa giao diện người dùng và các nút
Cú pháp tìm kiếm khả dụng rất hạn chế - chỉ hỗ trợ các lựa chọn cơ bản và thay thế đơn giản
Tìm nạp kết quả tìm kiếm chậm - thực hiện tìm kiếm trên các khối lớn có thể mất hàng giờ
JSON-RPC gây lãng phí băng thông rất lớn - trả về nhiều dữ liệu hơn mức bạn thực sự cần. Giao diện GraphQL sử dụng ít băng thông hơn, nhưng không cung cấp khả năng phát trực tuyến (giao diện người dùng phải thăm dò các bản cập nhật)
3. Thiếu tính nguyên tử
Một lần nữa, gánh nặng lại đè lên mã front-end khi phải liên tục thăm dò ý kiến để tìm ra chính xác điều gì đã xảy ra, trong khi người dùng Dapp gặp phải sự chậm trễ và cần phải làm mới khi Dapp thực hiện tất cả công việc bổ sung này.
4. Nút bị động
Các nút Ethereum là thụ động, nghĩa là chúng không thể tạo các sự kiện hoặc cuộc gọi lại và gọi các webhook. Tất cả các hoạt động phải được bắt đầu bởi lối vào, do đó phải thăm dò các nút để biết thông tin cập nhật. Khả năng đọc luồng sự kiện của các nút Ethereum quá hạn chế để đáp ứng nhu cầu của hầu hết các Dapp và chỉ khả dụng trong giao diện JSON-RPC, không phải giao diện GraphQL.
tiêu đề phụ
Suy nghĩ lại về cơ sở hạ tầng Dapp
Những gì dfuse cung cấp là một nền tảng dành cho các API chuỗi khối cấp cao hơn cho phép chúng thực hiện nhiều công việc dễ dàng hơn so với các API gốc do các nút chuỗi khối cung cấp. Nó được thiết kế trên cơ sở cung cấp cho các nhà phát triển Dapp các chức năng họ cần để xây dựng các ứng dụng chuỗi khối hiện đại thông qua giao diện nhanh và mượt mà, từ đó mang lại trải nghiệm người dùng tuyệt vời.
Hy vọng rằng thông qua nền tảng này, tất cả các hạn chế nêu trên có thể được giải quyết và các hạn chế của các nút Ethereum truyền thống có thể bị phá vỡ.
1. Quan điểm nhất quán
dfuse là một nền tảng dữ liệu siêu quy mô tích hợp, không phải là tập hợp nhiều nút Ethereum trên bộ cân bằng tải. Nền tảng dfuse cung cấp thông tin trạng thái chuỗi trên tất cả các kết nối và tại mọi thời điểm. Hoặc nhìn thấy một khối (phát hiện cả phân nhánh chuỗi và tổ chức lại) hoặc hoàn toàn không báo cáo khối đó (trong trường hợp một khối trải qua quá trình tổ chức lại nhanh chóng và không di chuyển xa).
Bằng cách này, Dapp không bao giờ phải đối mặt với chế độ xem không nhất quán về trạng thái chuỗi và có thể tập trung vào chức năng chính của nó thay vì bận rộn xác minh các chi tiết của chuỗi khối.
2. Tìm kiếm chi tiết, tốc độ cao
Nó cho phép các nhà phát triển Dapp tìm kiếm các bản ghi lịch sử của chuỗi khối với độ chi tiết cực kỳ tốt, tốc độ và hiệu quả vượt trội. Nó cũng có thể thực hiện lọc thời gian thực và đọc trực tuyến thông qua các giao diện GraphQL, gRPC và Websocket.
Lập chỉ mục đầy đủ tất cả các trường Nhật ký - tất cả dữ liệu được tạo ra bởi mỗi giao dịch trong Nhật ký đều có thể áp dụng trực tiếp cho tìm kiếm có độ chính xác cao.
Lập chỉ mục đầy đủ tất cả các giao dịch nội bộ (người gửi, người nhận, giá trị, phương thức, tham số đầu vào), do đó theo dõi đầy đủ hoạt động của hợp đồng trong cấu trúc cây của toàn bộ cuộc gọi
Lập chỉ mục không phát sinh thêm bất kỳ chi phí gas nào cho người dùng của bạn - lập chỉ mục của dfuse là một tính năng tích hợp của nền tảng dfuse và không làm tăng chi phí tài nguyên thực hiện hợp đồng
Tìm kiếm tìm thấy kết quả khớp chính xác, không tìm kiếm mờ. Không cần viết mã giao diện người dùng bổ sung để kiểm tra lại kết quả tìm kiếm và không cần lãng phí băng thông để tìm nạp dữ liệu không cần thiết theo lô
Cung cấp ngôn ngữ truy vấn có cấu trúc, tương tự như ngôn ngữ truy vấn của Kibana hoặc GitHub, với các thao tác boolean hoàn chỉnh và khả năng đi sâu trực tiếp vào giao dịch hoặc lệnh cụ thể mà bạn muốn
Cung cấp hiệu suất tuyệt vời - trong chưa đầy một giây, theo tiêu chí tìm kiếm đã chỉ định, tìm kiếm toàn bộ lịch sử chuỗi để tìm một tập hợp các kết quả khớp chính xác
Điều tốt nhất của cả hai thế giới với GraphQL cung cấp phản hồi ngắn gọn mà không ảnh hưởng đến khả năng phát trực tuyến - giao diện GraphQL của chúng tôi cung cấp khả năng tìm kiếm được lọc hoàn toàn trong thời gian thực để phục vụ hiệu quả các bản cập nhật động cho người dùng
Hiệu suất nhất quán bất kể lưu lượng truy cập trên mạng Ethereum
3. Hoạt động nguyên tử
Cung cấp một điểm cuối đọc luồng hiểu tất cả các trạng thái phức tạp mà một giao dịch có thể nhập vào và thông báo cho bạn khi giao dịch đó hoàn tất. Thay vì lội qua các cuộc thăm dò lặp đi lặp lại hoặc kiểm tra nhiều nguồn dữ liệu để theo dõi trạng thái giao dịch, bạn chỉ cần đẩy giao dịch lên và duy trì kết nối để nhận cập nhật trạng thái theo thời gian thực, từ đó cũng cung cấp trạng thái giao dịch theo thời gian thực cho người dùng của bạn.
Một nền tảng tốt sẽ cung cấp cho bạn một chương trình phụ trợ tích cực có thể bắt đầu các sự kiện. Ví dụ: một hàm lambda (hoặc hàm đám mây) mà bạn chọn có thể được gọi dựa trên các tiêu chí chính xác mà bạn chỉ định (thông qua tính năng tìm kiếm đã nói ở trên và các tính năng khác). Điều này cho phép các Dapp triển khai kiến trúc không đồng bộ, nơi các bản cập nhật dữ liệu có thể được phát hành cho người dùng một cách suôn sẻ và theo thời gian thực thông qua nhiều kênh liên lạc.
nhanh
5. Một nền tảng hiện đại được xây dựng cho Dapps tiên tiến
dfuse cung cấp lớp cơ sở hạ tầng hiện đại cho Dapp của bạn, cụ thể là:
nhanh
có thể mở rộng
Cung cấp quyền truy cập thời gian thực chi tiết, độ chính xác cao vào các sự kiện chuỗi khối
Hỗ trợ các cuộc gọi lại đang hoạt động dưới dạng Webhook


