-- lý lịch--
Hiện tại, các phương thức truy cập của nền tảng chuỗi chéo blockchain khá khác nhau về thiết kế kiến trúc, làm thế nào để kết nối chuỗi ứng dụng với hệ thống chuỗi chéo một cách nhanh chóng và thuận tiện là một vấn đề cấp bách cần được giải quyết. Nền tảng dịch vụ chuỗi chéo BitXHub của BitXHub áp dụng giải pháp chuỗi chéo của chuỗi chuyển tiếp + cổng, trong đó cổng liên chuỗi đóng vai trò thu thập và phổ biến các giao dịch giữa các chuỗi khối. Thiết kế của cơ chế plug-in tách rời mô-đun tương tác giữa cổng (Pier) và chuỗi ứng dụng khỏi mô-đun chức năng cốt lõi của cổng liên chuỗi, để các loại chuỗi ứng dụng khác nhau có thể được kết nối hiệu quả với chuỗi chéo. hệ thống dây chuyền. Khi Pier đang chạy, quá trình thích ứng linh hoạt của các chuỗi ứng dụng khác nhau được hoàn thành bằng cách tải động các trình cắm thêm. Để tăng cường tốt hơn sự tương tác giữa Pier và chuỗi ứng dụng, các plug-in chuỗi ứng dụng cụ thể cần triển khai các giao diện cụ thể theo các đặc điểm của các chuỗi khối khác nhau. Giao diện tương tác cần đáp ứng các chức năng sau:
1) Giám sát các sự kiện xuyên chuỗi trên chuỗi ứng dụng và chuyển chúng đến mô-đun lõi để xử lý;
2) Thực hiện các yêu cầu xuyên chuỗi từ các cổng (từ các chuỗi ứng dụng khác);
3) Khả năng chủ động truy vấn trạng thái của các yêu cầu xuyên chuỗi đã nhận và thực hiện trên chuỗi ứng dụng.
Trong thiết kế sơ đồ triển khai plug-in, chúng tôi đã lần lượt áp dụng hai cơ chế plug-in khác nhau, sau đây sẽ giới thiệu các vấn đề chúng tôi gặp phải khi sử dụng plug-in gốc và ưu điểm của giải pháp plug-in mới.
—— Plugin bản địa——
Ngôn ngữ go hỗ trợ biên dịch dưới dạng plug-in từ phiên bản 1.13 và cách sử dụng như sau
go build --buildmode=plugin -o appchain.so *.go
Dự án go có thể được chỉ định làm chế độ trình cắm thông qua --buildmode khi biên dịch và đầu ra sẽ là một tệp liên kết động theo cách này. Tệp này không phải là tệp nhị phân có thể chạy trực tiếp mà là lệnh gọi động được cung cấp cho thời gian chạy nhị phân khác.
Được sử dụng trong nhị phân chính như sau:
lợi thế:
lợi thế:
1) Trải nghiệm người dùng nhất quán với mã gốc, tương tự như mã hóa nhị phân của các mô-đun mã;
sự thiếu sót:
sự thiếu sót:
1) Thư viện phụ thuộc trong phần bổ trợ gốc phải hoàn toàn nhất quán với chương trình chính, nếu không sẽ báo lỗi khi khởi động và sự cố này sẽ xảy ra bất kể phần phụ thuộc được tham chiếu trực tiếp hay gián tiếp.
—— Chuyển sang trình cắm RPC ——
Các hạn chế nghiêm ngặt về phiên bản trong phần bổ trợ gốc có thể khiến khi nâng cấp chức năng chương trình chính của phần bổ trợ và/hoặc cổng, một số phần phụ thuộc của chương trình chính có thể được nâng cấp ngoài ý muốn và phần bổ trợ cũng phải thực hiện điều chỉnh tương tự nâng cấp. Phương pháp này không có lợi cho việc tách hoàn toàn các plugin, vì vậy chúng tôi đã chuyển sang một dự án plugin GO khác sử dụng RPC. (Địa chỉ GitHub của dự án: https://github.com/hashicorp/go-plugin)
Go-plugin của Hashicorp đã tồn tại trước khi cơ chế plug-in gốc của GO xuất hiện, nhưng sau khi plug-in gốc của GO ra mắt, họ đã không từ bỏ sự hỗ trợ của mình cho dự án, vì nhìn chung plug-in gốc không phải là rất hoàn hảo Trong một số trường hợp, go-plugin thuận tiện hơn.
Plugin go-plugin được sử dụng như sau:
Nói một cách đơn giản, phương thức plug-in được triển khai bởi dự án go-plugin thông qua chế độ C/S. Chương trình chính được sử dụng làm Máy khách RPC và trình cắm thêm cụ thể được sử dụng làm Máy chủ RPC. Giao tiếp giữa Máy chủ và Máy khách cũng dựa trên đặc tả giao diện.
Quy trình sử dụng cụ thể như sau:
1) Trừu tượng hóa yêu cầu giao diện trình cắm thêm, ở đây, định nghĩa giao diện được sử dụng trong trình cắm thêm gốc có thể được sử dụng lại trực tiếp;
2) Cả máy khách và máy chủ đều triển khai giao diện trên. Việc triển khai phía máy chủ là mã cho logic xử lý phần bổ trợ cụ thể; phần triển khai phía máy khách chỉ cần gói gọn các kết quả xử lý gRPC và thông tin ngoại lệ, sau đó chương trình chính có thể nhận thức yếu về gRPC khi sử dụng phần bổ trợ TRONG.
Phần triển khai máy chủ:
Phần triển khai khách hàng:
▲ Cần chú ý thêm đến:
Plugin cần gọi plugin.Serve để cho phép chương trình chính sử dụng dịch vụ RPC của chính nó. Cần lưu ý ở đây rằng cần phải bắt tay trước khi chương trình chính và phần bổ trợ giao tiếp, chủ yếu bao gồm việc xác nhận thông tin phiên bản của phần bổ trợ.
Chương trình chính sử dụng đối tượng plugin.Client để khởi động plugin chạy trong một quy trình khác, vì vậy sự cố của plugin sẽ không ảnh hưởng đến chương trình chính.
Máy khách và máy chủ thực sự giao tiếp thông qua Ổ cắm liên quá trình trong quá trình sử dụng. Mặc dù điều này hy sinh một lượng hiệu suất nhất định, nhưng nó mang lại các ứng dụng linh hoạt như tách rời phụ thuộc và hỗ trợ đa ngôn ngữ mà giải pháp đơn xử lý của plug-in gốc trong không có.
-- Phần kết luận--
Giới thiệu về tác giả
Giới thiệu về tác giả
Phòng thí nghiệm lưới dữ liệu công nghệ FunChain Nhóm BitXHub
Phòng thí nghiệm lưới dữ liệu công nghệ FunChain Nhóm BitXHub
