2008-08-30 35 views
40

Trong một trong các câu trả lời cho Broadcast like UDP with the Reliability of TCP, người dùng đề cập đến API nhắn tin Spread. Tôi cũng chạy qua một được gọi là ØMQ. Tôi cũng có một số điểm quen thuộc với MPI.Lây lan so với MPI so với zeromq?

Vì vậy, câu hỏi chính của tôi là: tại sao tôi lại chọn cái khác? Cụ thể hơn, tại sao tôi lại chọn sử dụng Spread hoặc ØMQ khi có sự triển khai của MPI trưởng thành?

Trả lời

46

MPI đã được xác định các cụm tính toán chặt chẽ cùng với các mạng nhanh, đáng tin cậy. Spread và ØMQ được thiết kế cho các hệ thống phân tán lớn. Nếu bạn đang thiết kế một ứng dụng khoa học song song, hãy đi với MPI, nhưng nếu bạn đang thiết kế một hệ thống phân tán liên tục cần phải kiên cường đối với các lỗi và sự bất ổn định mạng, hãy sử dụng một trong những thứ khác.

MPI có các cơ sở rất hạn chế về khả năng chịu lỗi; hành vi xử lý lỗi mặc định trong hầu hết các triển khai là lỗi toàn hệ thống. Ngoài ra, ngữ nghĩa của MPI yêu cầu tất cả các tin nhắn được gửi cuối cùng đều được tiêu thụ. Điều này làm cho rất nhiều ý nghĩa cho mô phỏng trên một cụm, nhưng không cho một ứng dụng phân tán.

13

Tôi chưa sử dụng bất kỳ thư viện nào trong số này, nhưng tôi có thể đưa ra một số gợi ý.

  1. MPI là giao thức truyền thông trong khi Spread và ØMQ là triển khai thực tế.
  2. MPI xuất phát từ chương trình "song song" trong khi Spread đến từ chương trình "được phân phối".

Vì vậy, nó thực sự phụ thuộc vào việc bạn đang cố gắng xây dựng một hệ thống song song hoặc hệ thống phân phối. Chúng có liên quan với nhau, nhưng ý nghĩa ngụ ý/mục tiêu là khác nhau. Các giao dịch lập trình song song với khả năng tính toán ngày càng tăng bằng cách sử dụng nhiều máy tính cùng một lúc. Các giao dịch lập trình phân tán với nhóm máy tính đáng tin cậy (nhất quán, có khả năng chịu lỗi và có sẵn cao).

Khái niệm "độ tin cậy" hơi khác so với khái niệm TCP. Độ tin cậy của TCP là "cung cấp gói tin này cho chương trình kết thúc bất kể điều gì." Độ tin cậy của chương trình phân tán là "ngay cả khi một số máy chết, toàn bộ hệ thống vẫn tiếp tục hoạt động theo cách nhất quán." Để thực sự đảm bảo rằng tất cả những người tham gia nhận được tin nhắn, người ta sẽ cần một cái gì đó như 2 phase commit hoặc một trong những lựa chọn thay thế nhanh hơn.

5

Bạn đang giải quyết các API rất khác nhau ở đây, với các khái niệm khác nhau về loại dịch vụ được cung cấp và cơ sở hạ tầng cho từng dịch vụ. Tôi không biết đủ về MPI và Spread để trả lời cho họ, nhưng tôi có thể giúp đỡ nhiều hơn một chút với ZeroMQ.

ZeroMQ là thư viện giao tiếp tin nhắn đơn giản. Nó không có gì khác hơn là gửi một tin nhắn đến các đồng nghiệp khác nhau (bao gồm cả những người địa phương) dựa trên một tập hợp hạn chế của các mẫu tin nhắn phổ biến (PUSH/PULL, YÊU CẦU/REPLY, PUB/SUB, vv). Nó xử lý kết nối khách hàng, truy xuất và tắc nghẽn cơ bản dựa trên các mẫu đó và bạn phải tự mình làm phần còn lại.

Mặc dù xuất hiện rất hạn chế, hành vi đơn giản này chủ yếu là những gì bạn cần cho lớp giao tiếp của ứng dụng của bạn. Nó cho phép bạn mở rộng quy mô rất nhanh chóng từ một nguyên mẫu đơn giản, tất cả trong bộ nhớ, đến các ứng dụng phân tán phức tạp hơn trong các môi trường khác nhau, bằng cách sử dụng các proxy đơn giản và các cổng giữa các nút. Tuy nhiên, đừng mong đợi nó thực hiện triển khai nút, phát hiện mạng hoặc giám sát máy chủ; Bạn sẽ phải tự làm.Một thời gian ngắn, hãy sử dụng zeromq nếu bạn có một ứng dụng mà bạn muốn mở rộng từ quy trình đa luồng đơn giản đến môi trường phân tán và biến, hoặc bạn muốn thử nghiệm và thử nghiệm nhanh chóng và không có giải pháp nào phù hợp với mô hình của bạn. Mong đợi tuy nhiên phải đặt một số nỗ lực vào việc triển khai và giám sát mạng của bạn nếu bạn muốn mở rộng đến một cụm rất lớn.

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