1. Mã có thể cắm của thuật toán đồng thuận phản ánh giao diện Chuỗi
Thuật toán đồng thuận của Hyperledger Fabric có thể cắm được và được phản ánh trong mã dưới dạng giao diện Chuỗi. Tất cả các thuật toán đồng thuận khác nhau có thể được triển khai cụ thể dựa trên giao diện Chain. Hiện tại, Fabric hỗ trợ các thuật toán đồng thuận như solo, kafka, bè và sbft. Mã cho giao diện Chuỗi nằm trong Fabric/orderer/consensus/consensus.go.
// Chuỗi xác định cách đưa tin nhắn để sắp xếp thứ tự: // 1. Tin nhắn được sắp xếp thành luồng, luồng được cắt thành khối và khối được gửi (solo, kafka) // 2. Tin nhắn được cắt thành các khối, các khối được sắp xếp và sau đó các khối được cam kết (sbft) kiểu Giao diện chuỗi { // Hàm sắp xếp, env là thông tin giao dịch, configSeq là số serial tự tăng, sẽ +1 mỗi khi có cập nhật cấu hình để đảm bảo giao dịch được thực hiện theo config mới nhất Order(env *cb.Envelope, lỗi configSeq uint64) // Đang xử lý giao dịch cấu hình, cập nhật configSeq sau khi gửi Lỗi Cấu hình (config *cb.Envelope, configSeq uint64) // vượt quá mức tối đa Các tin nhắn bị hạn chế trên chuyến bay sẽ bị chặn, đợi trên chuyến bay thực hiện xong lỗi WaitReady() // Khi xảy ra lỗi, một kênh trống sẽ được trả về Errored() <-chan struct{} // Phân bổ và giữ lại dữ liệu mới nhất trong Chain Resource Start() // Làm mới tài nguyên được gán cho Chain Halt() }
2. Thuật toán đồng thuận bè của Fabric Cấu trúc chuỗi
Mã triển khai cốt lõi của Hyperledger Fabric cho thuật toán Raft được đặt trong gói Fabric/orderer/consensus/etcdraft. Nó chủ yếu chứa một số cấu trúc dữ liệu cốt lõi, cụ thể là cấu trúc Chuỗi và cấu trúc nút.
Cấu trúc Chuỗi triển khai giao diện Chuỗi và mã nằm trong orderer/consensus/etcdraft/chain.go. Nó chủ yếu xác định một số kênh để liên lạc giữa các nút, để thực hiện các hoạt động tương ứng dựa trên thông báo liên lạc. // Chain thực hiện giao diện đồng thuận.Chain. type Chain struct { configurator Configurator rpc RPC // Một đối tượng để các nút giao tiếp với các nút bên ngoài là một giao diện chứa hai phương thức SendConsensus và SendSubmit. Cái trước được sử dụng để truyền đạt thông tin bè giữa các nút và cái sau được sử dụng để chuyển tiếp các yêu cầu giao dịch đến nút lãnh đạo. raftID uint64 kênhID chuỗi LastKnownLeader uint64 ActiveNodes Atomic.Value submitC chan *submit // Kênh nhận được thông báo yêu cầu đồng thuận do ứng dụng khách đặt hàng gửi applyC chan apply // Kênh nhận được thông báo ứng dụng giữa các nút bè quan sátC chan<- raft. SoftState HaltC chan struct {} doneC chan struct{} startC chan struct{} snapC chan *raftpb.Snapshot // Kênh gcC chan nhận dữ liệu ảnh chụp nhanh nút bè *gc ... Nút *node // Fabric đóng gói phiên bản nút của thư viện etcdraft cơ bản... }
3. Cấu trúc nút thuật toán đồng thuận bè của Fabric
Cấu trúc nút đóng gói phiên bản nút của thư viện ercdraft cơ bản. Mã này nằm trong orderer/consensus/etcdraft/node.go. Nó chủ yếu được sử dụng để kết nối ứng dụng Raft lớp trên do chính Fabric triển khai và triển khai Raft cơ bản. etcd Có thể nói cấu trúc nút là Cầu nối giao tiếp giữa chúng, chính sự tồn tại của nó đã che chắn cho các chi tiết thực hiện Raft.
loại nút struct { chainID chuỗi logger *flogging.FabricLogger số liệu *Số liệu không thể truy cập đượcLock sync.RWMutex bản đồ không thể truy cập được [uint64]struct{} trình theo dõi *Lưu trữ trình theo dõi *Cấu hình RaftStorage *raft.Config rpc Chuỗi RPC *Chuỗi // Cấu trúc chuỗi được xác định riêng của vải Phần thân , cụ thể là trong orderer/consensus/etcdraft/chain.go tickInterval time.Duration clock clock.Clock siêu dữ liệu *etcdraft.BlockMetadata subscriberC chan chan uint64 raft.Node // Giao diện nút ở cuối bè }
4. Tóm tắt
Thuật toán đồng thuận bè của Fabric triển khai giao diện Chuỗi thuật toán đồng thuận có thể cắm được thông qua cấu trúc Chuỗi; nó cũng sử dụng cấu trúc nút để gói gọn các chi tiết triển khai của thuật toán cơ bản của etcdraft. Cấu trúc Chuỗi và cấu trúc nút là lớp kết nối, quá trình khởi động thuật toán đồng thuận và xử lý giao dịch của Fabirc đều tập trung vào hai cấu trúc trên. Blog tiếp theo sẽ phân tích quá trình khởi động thuật toán đồng thuận bè của Fabric.
Cuối cùng, bài viết này về cấu trúc dữ liệu cốt lõi của thuật toán đồng thuận Raft trong Fabric2.x kết thúc tại đây. Nếu bạn muốn biết thêm về cấu trúc dữ liệu cốt lõi của thuật toán đồng thuận Raft trong Fabric2.x, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt. Bài viết liên quan, hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!