Tại sao vấn đề đồng thuận rất quan trọng trong điện toán phân tán?


19

Trong điện toán phân tán, vấn đề đồng thuận dường như là một trong những chủ đề trọng tâm đã thu hút nghiên cứu chuyên sâu. Cụ thể, bài báo "Không thể đồng thuận phân tán với quy trình một lỗi" đã nhận được giải thưởng giấy ảnh hưởng PODC năm 2001 .

Vậy tại sao vấn đề đồng thuận lại quan trọng đến vậy? Chúng ta có thể đạt được gì với sự đồng thuận cả về lý thuyết và thực tế?

Bất kỳ tài liệu tham khảo hoặc giải trình sẽ thực sự hữu ích.

Câu trả lời:


18

Bài báo bạn đề cập rất quan trọng vì 2 lý do:

  1. Nó cho thấy rằng không có thuật toán đồng thuận xác định không đồng bộ có thể chấp nhận ngay cả một lỗi sự cố. Lưu ý rằng trong đồng bộ thiết lập, có một thuật toán xác định rằng chấm dứt trong viên đạn khi f xử lý vụ tai nạn.f+1f
  2. Nó giới thiệu tính hai phần và sự thống nhất của các cấu hình (*), được sử dụng trong nhiều giới hạn thấp hơn và bằng chứng không thể chấp nhận được sau này.

Các ứng dụng

Một ứng dụng quan trọng của vấn đề đồng thuận là bầu một điều phối viên hoặc nhà lãnh đạo trong môi trường chịu lỗi để khởi xướng một số hành động toàn cầu. Một thuật toán đồng thuận cho phép bạn thực hiện việc này một cách nhanh chóng mà không cần sửa "siêu âm" trước (điều này sẽ đưa ra một điểm thất bại duy nhất).

Một ứng dụng khác đang duy trì tính nhất quán trong một mạng phân tán: Giả sử rằng bạn có các nút cảm biến khác nhau theo dõi cùng một môi trường. Trong trường hợp một số nút cảm biến này gặp sự cố (hoặc thậm chí bắt đầu gửi dữ liệu bị hỏng do lỗi phần cứng), giao thức đồng thuận đảm bảo tính mạnh mẽ chống lại các lỗi đó.


(*) Việc chạy một thuật toán phân tán là một chuỗi các cấu hình. Một cấu hình là một vectơ của các trạng thái cục bộ của các quá trình. Mỗi quá trình thực hiện một máy trạng thái xác định. Bất kỳ thuật toán đồng thuận chính xác cuối cùng cũng phải đạt đến một cấu hình trong đó mọi quy trình đã quyết định (không thể hủy ngang) trên cùng một giá trị đầu vào. Cấu hình 1 - hóa trị nếu, bất kể đối thủ làm gì, tất cả các phần mở rộng có thể có của C đều dẫn đến giá trị quyết định là 1 . Tương tự, chúng ta có thể định nghĩa 0 - hóa trị . Cấu hình Chai phần tử nếu cả hai quyết định có thể truy cập từ CC1C10CC(mà một trong hai đạt được phụ thuộc vào đối thủ). Rõ ràng, không có quá trình nào có thể quyết định trong cấu hình hai phần , vì nếu không, chúng ta sẽ có một mâu thuẫn để thỏa thuận! Vì vậy, nếu chúng ta có thể xây dựng một chuỗi vô hạn các cấu hình hai phần như vậy, chúng tôi đã chỉ ra rằng không có thuật toán đồng thuận trong cài đặt này.C


2
@AJed Là một bổ sung: Tôi đã xem qua đồng bộ hóa giấy của Maurice Herlihy và bây giờ có thể trình bày thêm một ý nghĩa lý thuyết tuyệt vời khác của vấn đề đồng thuận. Sử dụng ý tưởng về số lượng đồng thuận , người ta có thể chỉ ra rằng có một hệ thống phân cấp vô hạn của các nguyên thủy đồng bộ hóa, sao cho không có nguyên thủy nào ở một cấp độ có thể được sử dụng để triển khai miễn phí bất kỳ nguyên thủy nào ở cấp cao hơn. Nói một cách đơn giản, vấn đề đồng thuận cắt đứt như một lý thuyết thống nhất về việc xác định sức mạnh tương đối của các hoạt động đồng bộ nguyên thủy. Đó là thanh lịch.
hengxin

1
Tôi có một số khó khăn trong việc hiểu bằng chứng về kết quả bất khả thi của FLP. Bạn có thể cho tôi một số gợi ý? Vui lòng tham khảo [bằng chứng FLP] ( stackoverflow.com/q/15131730/1833118 ). Cảm ơn.
hengxin

"Nơi mà mọi quy trình đã quyết định" có lẽ nên là "nơi mà mọi quy trình đúng đã quyết định"?
nbro

Bạn nên giải thích ai là kẻ thù trong "bất kể kẻ thù làm gì".
nbro

"Tất cả các phần mở rộng có thể có của C", ý nghĩa của "phần mở rộng của C" là gì? Nói chung, một phần mở rộng của một cấu hình là gì?
nbro

7

Nó cho thấy rằng không có thuật toán xác định chịu lỗi. Khá là một kết quả lý thuyết mạnh mẽ, buộc các nhà thiết kế phải đối phó khác nhau với khả năng chịu lỗi, một số trong đó là đồng bộ hóa và ngẫu nhiên.

Nhận xét: Theo tôi, đồng bộ hóa là một giả định bổ sung của hệ thống hầu như không tìm thấy trong các ứng dụng thực tế.

Để tham khảo, hãy kiểm tra liên kết Wikipedia . Kiểm tra blog này cũng cho các ứng dụng thực tế


1
Có, tôi thích ngẫu nhiên hóa để đồng bộ hóa. Môi trường trong đó tính toán phân tán chơi rất kém theo nghĩa không đồng bộ hóa, độ trễ không giới hạn, lỗi không mong muốn và quá nhiều yếu tố không xác định. Miễn là nó không hoàn hảo, tại sao chúng ta không sử dụng ngẫu nhiên, đạt được một số đảm bảo trong khi tránh quá nhiều phức tạp.
hengxin

1
Nói về đồng bộ hóa, tôi chỉ không thích giả định trong lý thuyết . Tuy nhiên, trong công nghiệp , đồng bộ hóa hoặc đồng bộ hóa một phần được áp dụng thường xuyên. Ví dụ: Google Spanner là cơ sở dữ liệu được nhân rộng đồng bộ trên toàn cầu . Nó làm cho tôi ít quyết đoán hơn. Ý kiến ​​của bạn là gì?
hengxin

Tôi đoán là tốt hơn để xem làm thế nào đồng bộ hóa được thực hiện ở đó. Nhưng nó là một tài liệu tham khảo rất thú vị. - ý tôi là, nó không phải là một tính năng tự nhiên của hệ thống. Nó phải được thêm vào nó.
AJed

Nói chung, bạn không nên đưa ra như Wikipedia tham khảo. Tôi vừa đọc bài viết trên Wikipedia: nó khá chưa hoàn chỉnh và không có tổ chức; nó cũng có thể gây nhầm lẫn.
nbro

5

Một lý do vấn đề đồng thuận rất quan trọng là chúng rất đơn giản và chúng là loại vấn đề phổ biến cho các hệ thống máy tính phân tán.

Nếu chúng ta có thể giải quyết sự đồng thuận trong một hệ thống phân tán không đồng bộ, chúng ta có thể sử dụng nó để tuyến tính hóa các hành động trên các đối tượng được chia sẻ và có được tính tuyến tính cho các đối tượng được chia sẻ.

Để đơn giản, bạn có thể nghĩ ra bao nhiêu vấn đề đơn giản hơn việc đồng ý về một giá trị?

Kết quả không thể thực hiện được về sự đồng thuận trong các hệ thống phân tán không đồng bộ (thuần túy) cho chúng ta biết rằng chúng ta không thể giải quyết các vấn đề mà chúng ta muốn giải quyết trong các hệ thống phân tán không đồng bộ (thuần túy) mà không có một số "nội dung" bổ sung. Điều này dẫn đến các mô hình không đồng bộ nơi chúng ta có thể giải quyết sự đồng thuận, ví dụ: thuật toán ngẫu nhiên, bộ phát hiện lỗi, mô hình đồng bộ một phần, v.v.

Đây cũng là lý do tại sao trong các thuật toán thực tế giải quyết sự đồng thuận như Paxos của Lamport, Chubby của Google, Apache ZooKeeper và gần đây Raft là cốt lõi của các hệ thống phân tán, nơi chúng ta thường muốn sao chép trạng thái giữa các máy chủ.


0

Tôi chỉ nói thêm rằng bản chất của tính toán đang ngày càng được phân phối trên toàn bộ ngăn xếp: nhiều CPU, nhiều quy trình trên một máy, nhiều máy được kết nối bởi mạng LAN, nhiều mạng LAN được kết nối bằng mạng nội bộ.

Điều này làm cho vấn đề về trạng thái chung (phân tán / toàn cầu) - mỗi thuật toán giả định trạng thái nhất định và nếu việc tính toán được thực hiện ở nhiều nơi, thì trạng thái đó cũng phải được phân phối.

Các bài báo có ảnh hưởng ( Paxos và gần đây là Raft ) trong lĩnh vực này đã được xuất bản sau bài báo bạn đang trích dẫn. Cả hai đều giải quyết các vấn đề về sự đồng thuận trước sự hiện diện của một số thất bại.

Lỗi Byzantine có thể tránh được trong các hệ thống phân tán sử dụng một vài cách tiếp cận.

Hãy xem Wikipedia trên Byzantine Fault Tolerance .


Kết quả không phù hợp FLP áp dụng ngay cả trong cài đặt của sự cố cơ bản nhất (sự cố), vì vậy tôi không chắc ý nghĩa của đoạn văn về việc tránh thất bại của Byzantine là gì. Lưu ý rằng nếu chúng ta không có thất bại thì sự đồng thuận khá dễ dàng: một quy trình cố định sẽ phát đi giá trị của nó và mỗi quy trình quyết định giá trị đó ngay khi nhận được.
Kaveh
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.