2013-04-30 28 views
6

Tôi mới sử dụng hệ thống phân tán và tôi đang đọc về "Paxos đơn giản". Nó tạo ra rất nhiều trò chuyện và tôi đang suy nghĩ về ý nghĩa hiệu suất.tránh sử dụng quá nhiều giao thức đồng thuận trong hệ thống phân phối

Giả sử bạn đang xây dựng cơ sở dữ liệu phân tán trên toàn cầu, với một số cụm nhỏ nằm ở các vị trí khác nhau. Nó có vẻ quan trọng để giảm thiểu số lượng giao tiếp giữa các trang web.

  1. Các quyết định bạn chắc chắn cần phải sử dụng sự đồng thuận là gì? Người duy nhất tôi nghĩ chắc chắn là quyết định có nên thêm hoặc loại bỏ một nút (hoặc tập các nút?) Khỏi mạng hay không. Có vẻ như điều này là cần thiết cho đồng hồ vectơ hoạt động. Một điều khác mà tôi ít chắc chắn hơn là quyết định đặt hàng để viết cho cùng một địa điểm, nhưng điều này có nên được thực hiện bởi một nhà lãnh đạo được bầu qua Paxos không?

  2. Sẽ thật tuyệt nếu bạn tránh có các nút trong các quyết định đưa ra hệ thống cùng nhau. Có thể một vài nút tại mỗi cụm địa phương tham gia vào các quyết định chéo cụm, và tất cả các nút cục bộ giao tiếp bằng cách sử dụng một Paxos cục bộ để xác định câu trả lời địa phương cho các câu hỏi qua trang web? Độ trễ sẽ giống như giả sử mạng không bão hòa, nhưng lưu lượng truy cập mạng chéo sẽ nhẹ hơn nhiều.

  3. Giả sử bạn có thể chia các bảng cơ sở dữ liệu của bạn dọc theo các hàng và chỉ định từng tập con của các hàng cho một tập con của các nút. Việc chọn một tập các nút có chứa từng tập hợp con của dữ liệu bằng cách sử dụng Paxos trên tất cả các máy trong hệ thống hay không, và sau đó chỉ chạy Paxos giữa các nút đó cho tất cả các thao tác xử lý tập con dữ liệu đó?

Và tất cả: có bất kỳ sự tối ưu hóa liên quan đến thiết kế hoặc thuật toán nào khác để giải quyết vấn đề này không?

+0

Người ta có thể sử dụng zookeeper làm dịch vụ (giống như Google sử dụng mũm mĩm như một dịch vụ) để xử lý tính nhất quán của cấu hình lõi và dữ liệu meta được chia sẻ tối thiểu. Như bạn đề nghị nó có thể là thành viên cụm hoặc các khóa kinh doanh được xử lý trên máy chủ nào trong một liên kết lỏng lẻo của các máy chủ không phải là một cụm đan chặt chẽ. Xem http://curator.apache.org/ để biết các mẫu chuẩn mà từ đó bạn có thể xây dựng một liên bang lỏng lẻo hơn để xử lý xung quanh một dịch vụ khóa/tính nhất quán cốt lõi nhất quán. – simbo1905

Trả lời

6

Câu hỏi hay và thông tin chi tiết hữu ích!

Nó tạo ra rất nhiều trò chuyện và tôi đang suy nghĩ về ý nghĩa hiệu suất.

Giả sử bạn đang xây dựng cơ sở dữ liệu phân tán trên toàn cầu, với một số cụm nhỏ nằm ở các vị trí khác nhau. Nó có vẻ quan trọng để giảm thiểu số lượng giao tiếp giữa các trang web.

Các quyết định bạn chắc chắn cần phải sử dụng sự đồng thuận là gì? Người duy nhất tôi nghĩ chắc chắn là quyết định có nên thêm hoặc loại bỏ một nút (hoặc tập các nút?) Khỏi mạng hay không. Có vẻ như điều này là cần thiết cho đồng hồ vectơ hoạt động. Một điều khác mà tôi ít chắc chắn hơn là quyết định đặt hàng để viết cho cùng một địa điểm, nhưng điều này có nên được thực hiện bởi một nhà lãnh đạo được bầu qua Paxos không?

Vâng, hiệu suất là một vấn đề mà nhóm của tôi đã thấy trong thực tế. Chúng tôi duy trì cơ sở dữ liệu nhất quán & trình quản lý khóa được phân phối; và sử dụng Paxos cho tất cả các bài viết, một số lần đọc và cập nhật thành viên nhóm.

Dưới đây là một số trong những tối ưu hóa chúng tôi đã làm:

  • Càng nhiều càng tốt, nút gửi chuyển tiếp đến một sắc cầu hôn/Học (được bầu qua Paxos), mà
    • quyết định ghi đặt hàng, và
    • chuyển tiếp theo đợt trong khi đợi phản hồi từ ví dụ trước. (Nhưng việc xếp hàng quá nhiều cũng gây ra vấn đề.)
  • Chúng tôi đã cân nhắc sử dụng đa paxos nhưng chúng tôi đã làm điều gì đó mát hơn (xem bên dưới).

Với những tối ưu hóa này, chúng tôi vẫn đang làm tổn thương cho hiệu suất, vì vậy chúng tôi chia máy chủ thành ba lớp. Lớp dưới cùng là Paxos; nó làm những gì bạn đề nghị; viz. chỉ đơn thuần là quyết định thành viên nút của lớp trung lưu. Tầng giữa là một giao thức đồng thuận chuỗi tùy chỉnh trong nhà, tốc độ cao, trong đó thỏa thuận & đặt hàng cho DB. (BTW, chuỗi sự đồng thuận có thể được xem là Vertical Paxos.) Lớp trên cùng bây giờ chỉ duy trì cơ sở dữ liệu/khóa & kết nối máy khách. Thiết kế này đã dẫn đến một số đơn đặt hàng của độ trễ cường độ và cải thiện thông lượng.


Nó sẽ được tốt đẹp để tránh việc tất cả các nút trong hệ thống đưa ra quyết định với nhau. Có thể một vài nút tại mỗi cụm địa phương tham gia vào các quyết định chéo cụm, và tất cả các nút cục bộ giao tiếp bằng cách sử dụng một Paxos cục bộ để xác định câu trả lời địa phương cho các câu hỏi qua trang web? Độ trễ sẽ giống như giả sử mạng không bão hòa, nhưng lưu lượng truy cập mạng chéo sẽ nhẹ hơn nhiều.

Giả sử bạn có thể chia các bảng cơ sở dữ liệu của bạn dọc theo các hàng và chỉ định từng tập con của các hàng cho một tập con của các nút. Việc chọn một tập các nút có chứa từng tập hợp con của dữ liệu bằng cách sử dụng Paxos trên tất cả các máy trong hệ thống hay không, và sau đó chỉ chạy Paxos giữa các nút đó cho tất cả các thao tác xử lý tập con dữ liệu đó?

Hai thẻ này cùng nhắc nhở tôi về số Google Spanner paper. Nếu bạn bỏ qua các phần về thời gian, về cơ bản nó thực hiện 2PC trên toàn cầu và Paxos trên phân đoạn. (IIRC.)

+0

Ngọt ngào, chỉ là những gì tôi đã hy vọng để tìm hiểu! Các Spanner giấy là rất tốt đọc là tốt. – Dan

+0

Nhân tiện, tôi gặp khó khăn trong việc tìm kiếm thông tin về "các giao thức đồng thuận chuỗi" - bạn có liên kết không? (Tôi đọc về Vertical Paxos thay vì nhưng không muốn bỏ lỡ một cái gì đó một cách tình cờ.) – Dan

Các vấn đề liên quan