Đây chính là kịch bản tôi đã làm cách đây vài tháng và tôi quyết định sử dụng AMQP với RabbitMQ bằng cách sử dụng trao đổi chủ đề, ngoài memcache cho các đối tượng lớn.
Tin nhắn AMQP là tất cả các chuỗi, trong định dạng đối tượng JSON để dễ dàng thêm thuộc tính vào thư (như số lần thử lại) và xuất bản lại. Các đối tượng JSON là một tập hợp con của JSON tương ứng với các Python dicts. Ví dụ {"recordid": "272727"} là một đối tượng JSON với một thuộc tính. Tôi có thể chỉ cần ngâm một dict Python nhưng điều đó có thể đã khóa chúng tôi vào chỉ bằng cách sử dụng Python với hàng đợi tin nhắn.
Các đối tượng lớn không được định tuyến bởi AMQP, thay vào đó chúng đi vào memcache, nơi chúng có sẵn cho quá trình khác để truy xuất chúng. Bạn cũng có thể sử dụng Redis hoặc Tokyo Tyrant cho công việc này. Ý tưởng là chúng tôi không muốn các tin nhắn ngắn được xếp hàng phía sau các đối tượng lớn.
Cuối cùng, các quy trình Python của tôi đã kết thúc bằng cách sử dụng cả AMQP và ZeroMQ cho hai khía cạnh khác nhau của kiến trúc. Bạn có thể thấy rằng việc sử dụng cả OpenMPI và AMQP đều hợp lý nhưng đối với các loại công việc khác nhau.
Trong trường hợp của tôi, quy trình giám sát chạy vĩnh viễn, bắt đầu một toàn bộ công nhân cũng chạy mãi mãi trừ khi họ chết hoặc treo, trong trường hợp người giám sát khởi động lại. Công việc liên tục chảy vào dưới dạng tin nhắn qua AMQP và mỗi quá trình xử lý chỉ một bước của công việc, để khi chúng tôi xác định một nút cổ chai, chúng tôi có thể có nhiều lần xử lý, có thể trên các máy riêng biệt, để loại bỏ nút cổ chai. Trong trường hợp của tôi, tôi có 15 trường hợp của một quá trình, 4 trong số hai trường hợp khác và khoảng 8 trường hợp đơn lẻ khác.
Nguồn
2011-07-20 04:58:11
abbot, cảm ơn bạn đã trả lời. Có, tôi đang gửi 'các gói lớn' (vài MB mỗi gói) trên mạng 100 máy; Tôi có một mạng 1G đơn giản. Không có gì lạ mắt; có thể có độ trễ nhỏ - không phải là nhanh nhất. – user3262424
+1. Nói chung, MPI là tốt cho chạy một nhiệm vụ lớn duy nhất trên nhiều nút đáng tin cậy (ví dụ, các nút trong một cụm, hoặc một loạt các máy tính trong một phòng thí nghiệm).Như đã đề cập ở trên, nó cũng tuyệt vời khi bạn không biết loại mạng nào có, hoặc bạn muốn tận dụng bộ nhớ chia sẻ giữa các lõi trên một nút. Bạn càng lạc khỏi trường hợp sử dụng này, MPI kém phù hợp hơn. Tôi sẽ chỉ thêm rằng OpenMPI chỉ là một thực hiện của MPI; MPICH2, khác, chỉ là tốt. Và nếu bạn định sử dụng MPI + Python, tôi khuyên bạn nên dùng mpi4py. (http://mpi4py.scipy.org/) –
Jonathan, cảm ơn. Có bất kỳ điểm cộng nào khi sử dụng 'OpenMPI' so với' RabbitMQ' không? – user3262424