Giải thích Cây Merkle để sử dụng trong tính nhất quán cuối cùng


79

Merkle Trees được sử dụng như một cơ chế chống entropy trong một số cửa hàng khóa / giá trị được phân phối, nhân rộng:

Không nghi ngờ gì nữa, một cơ chế chống entropy là Một Điều Tốt - những thất bại thoáng qua chỉ xảy ra trong quá trình sản xuất. Tôi chỉ không chắc mình hiểu tại sao Merkle Trees là cách tiếp cận phổ biến.

  • Gửi một cây Merkle hoàn chỉnh đến một máy ngang hàng bao gồm việc gửi không gian khóa cục bộ cho máy ngang hàng đó, cùng với các hàm băm của mỗi giá trị khóa, được lưu trữ trong các cấp thấp nhất của cây.

  • Khác biệt một cây Merkle được gửi từ một đồng nghiệp yêu cầu phải có một cây Merkle của riêng bạn.

Vì cả hai đối tượng ngang hàng đều phải có sẵn khóa / giá trị-băm được sắp xếp, tại sao không thực hiện hợp nhất tuyến tính để phát hiện sự khác biệt?

Tôi chỉ không tin rằng cấu trúc cây cung cấp bất kỳ loại tiết kiệm nào khi bạn tính đến chi phí bảo trì và thực tế là tuyến tính đi qua lá cây đã được thực hiện chỉ để tuần tự hóa biểu diễn trên dây .

Để giải quyết vấn đề này, một giải pháp thay thế rơm-man có thể là yêu cầu các nút trao đổi các mảng tiêu hóa băm, được cập nhật từng bước và được phân loại theo vị trí vòng mô-đun.

Tôi đang thiếu gì?


2
Cây Merkle hiện có chủ đề riêng của chúng trên Wikipedia: en.wikipedia.org/wiki/Merkle_tree
Trenton

Câu trả lời:


88

Merkle tree giới hạn số lượng dữ liệu được truyền khi đồng bộ hóa. Các giả định chung là:

  1. I / O mạng đắt hơn I / O cục bộ + tính toán các băm.
  2. Việc chuyển toàn bộ không gian khóa được sắp xếp sẽ tốn kém hơn so với việc giới hạn so sánh dần dần qua một số bước.
  3. Các không gian chính có ít sự khác biệt hơn là tương đồng.

Một sàn giao dịch Merkle Tree sẽ giống như sau:

  1. Bắt đầu với gốc của cây (danh sách một giá trị băm).
  2. Nguồn gốc gửi danh sách các băm ở cấp độ hiện tại.
  3. Đích khác danh sách các băm với chính nó và sau đó yêu cầu các cây con khác. Nếu không có sự khác biệt, yêu cầu có thể chấm dứt.
  4. Lặp lại bước 2 và bước 3 cho đến khi đạt được các nút lá.
  5. Nguồn gốc gửi giá trị của các khóa trong tập hợp kết quả.

Trong trường hợp điển hình, độ phức tạp của việc đồng bộ hóa các không gian khóa sẽ là log (N). Có, ở cực điểm, nơi không có khóa chung, hoạt động sẽ tương đương với việc gửi toàn bộ danh sách băm đã được sắp xếp, O (N). Người ta có thể khấu hao chi phí xây dựng cây Merkle bằng cách xây dựng chúng một cách linh hoạt khi ghi vào và giữ dạng tuần tự trên đĩa.

Tôi không thể nói về cách Dynamo hoặc Cassandra sử dụng cây Merkle, nhưng Riak đã ngừng sử dụng chúng để đồng bộ hóa trong cụm (xử lý gợi ý và sửa chữa đọc là đủ trong hầu hết các trường hợp). Chúng tôi có kế hoạch thêm chúng trở lại sau khi một số bit kiến ​​trúc bên trong đã thay đổi.

Để biết thêm thông tin về Riak, chúng tôi khuyến khích bạn tham gia vào danh sách gửi thư: http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com


1
Ahh, trao đổi qua lại là điều tôi đã bỏ lỡ. Cảm ơn.
Johnny Graettinger

4
Chúng đã được giới thiệu lại trong quá trình triển khai AAE của Riak 1.3.
Coderoshi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.