Làm thế nào để phân chia công việc cho một mạng máy tính?


11

Hãy tưởng tượng một kịch bản như sau: Hãy nói rằng bạn có một máy tính trung tâm tạo ra nhiều dữ liệu. Dữ liệu này phải trải qua một số xử lý, không may mất nhiều thời gian hơn để tạo. Để việc xử lý bắt kịp với thời gian thực, chúng tôi cắm thêm máy tính nô lệ.

Hơn nữa, chúng ta phải tính đến khả năng nô lệ rơi ra khỏi công việc giữa mạng cũng như các nô lệ bổ sung được thêm vào. Máy tính trung tâm phải đảm bảo rằng tất cả các công việc được hoàn thành theo sự hài lòng của nó và các công việc bị bỏ rơi bởi một nô lệ được chuyển sang một công việc khác.

Câu hỏi chính là: Tôi nên sử dụng phương pháp nào để đạt được điều này?

Nhưng có lẽ những điều sau đây sẽ giúp tôi đi đến một câu trả lời: Có tên hoặc mẫu thiết kế cho những gì tôi đang cố gắng làm không?

Tôi cần có miền kiến ​​thức nào để đạt được mục tiêu khiến các máy tính này nói chuyện với nhau? (ví dụ: một cơ sở dữ liệu, mà tôi có một số kiến ​​thức về, sẽ đủ hoặc điều này sẽ liên quan đến các ổ cắm, mà tôi chưa có kiến ​​thức về?)

Có bất kỳ ví dụ về một hệ thống như vậy? Câu hỏi chính là một chút chung chung vì vậy sẽ tốt khi có điểm bắt đầu / điểm tham chiếu.

Lưu ý Tôi giả sử các ràng buộc của c ++ và windows để các giải pháp chỉ theo hướng đó sẽ được đánh giá cao.


1
Tìm kiếm hệ thống hàng đợi hoặc quy trình làm việc, ví dụ: aws.amazon.com/sqs en.wikipedia.org/wiki/Message_queue etcetera. Hệ thống xếp hàng có thể đảm nhiệm việc phân phối, kiểm tra và gán lại.
Luc Franken

2
Thuật ngữ bạn đang tìm kiếm là song song . Trước khi bạn đi xuống con đường này, hãy đảm bảo rằng vấn đề của bạn thực sự có thể được giải quyết song song (ví dụ: kết quả cho mục n không phụ thuộc vào kết quả cho mục n-1 ).
Blrfl

Nhìn vào BOINC

@Blrfl Tôi nghĩ rằng song song hóa thường không liên quan đến điều này, song song hóa thường được liên kết với thực thi đa luồng hoặc đa tiến trình trên một máy sử dụng nhiều lõi / bộ xử lý hoặc thực thi đồng thời trên cùng một máy. Điện toán phân tán là những gì anh ta đề cập và trong mô tả của mình, nó không có bảo đảm đồng thời, chỉ đảm bảo tính không đồng bộ (nghĩa là thực thi không xác định có thể đồng thời, đồng bộ hoặc bị trì hoãn trong hàng đợi)
Jimmy Hoffa

3
Tôi ngạc nhiên không ai nhắc đến hadoop.
Kevin

Câu trả lời:


12

Có bất kỳ ví dụ về một hệ thống như vậy?

Đúng. Mẫu này được gọi là điện toán phân tán (hoặc lập trình phân tán hoặc bất kỳ từ thú vị nào bạn muốn đặt sau khi phân phối). Đề nghị của tôi sẽ không xây dựng nội bộ này trước khi xem xét các giải pháp khác. Bạn có thể xem câu hỏi tràn ngăn xếp này cho các tùy chọn khác nhau. Và sau đó đưa ra quyết định tính toán.


3
Đừng quên từ yêu thích mới cho việc này: đám mây ! hoặc điện toán đám mây . Nếu bạn làm điều đó với máy tính của riêng bạn, mọi người gọi chúng là đám mây cá nhân hoặc đám mây nhỏ . Đánh dấu vô nghĩa, điều này đã được biết đến như bạn đã nói là điện toán phân tán trong nhiều năm, chỉ cần tung ra cho OP biết anh ta đọc về những thứ trên đám mây mà nó nói về chính xác điều này.
Jimmy Hoffa

3
@JimmyHoffa: từ "đám mây" thường được sử dụng để chỉ ra rằng dữ liệu của bạn cũng như phần mềm bạn sử dụng để làm việc với nó ở đâu đó trên internet thay vì máy cục bộ của bạn. Và những lần khác, điều đó có nghĩa là bạn đang sử dụng một máy ảo chạy trên một cụm chứ không phải là một máy chủ VM nguyên khối; lợi thế rõ ràng là các dự phòng không thời gian chết trong suốt.
tdammers

2
@tdammers đúng, nhưng loại hệ thống được mô tả bởi OP là một trong số rất nhiều sử dụng biệt danh tiếp thị của Đám mây, cùng với khi bạn chỉ ra thực tế mọi thứ khác. Đó là những gì làm cho nó trở thành một từ thông dụng, nó được phát minh mà không có định nghĩa vì vậy mọi người đã áp dụng nó cho hàng tấn công cụ khác nhau để nó có nghĩa là tất cả mọi thứ và không có gì. Hoan hô cho buzzwords.
Jimmy Hoffa

1
@JimmyHoffa: Đó cũng là điều khiến cho việc nhắc đến từ "đám mây" ở đây hoàn toàn không mang tính xây dựng.
tdammers

3
Nó có thể làm cho một từ tốt để sử dụng chống lại quản lý. "Giải pháp của bạn cho vấn đề xử lý dữ liệu này là gì?" "Chà, chúng ta có thể phân phối nó cho một mạng máy tính và tính toán chúng song song." TÌM KIẾM "Chúng tôi có thể xây dựng một Đám mây nhỏ." "OKAY CARRY ON"
Morpork

4

Như đã lưu ý bởi các câu trả lời khác, lĩnh vực này đã được biết đến như điện toán phân tán , điện toán lưới , điện toán cụm và điện toán hiệu năng cao .

Hãy để tôi thêm sự khác biệt rằng, khi một hệ thống có thể được thay đổi kích thước sau khi bắt đầu khớp với khối lượng công việc, nó được gọi là " co giãn ", và điều này khác với điện toán lưới truyền thống. Đó là một trong những lý do (không tiếp thị) cho thuật ngữ " điện toán đám mây ": người dùng không cần lập kế hoạch cho công suất, và số lượng và vị trí của các máy thực hiện tính toán vẫn không thể coi là một đám mây.

Ngoài ra, yêu cầu của bạn là tổng thể lập lại các tác vụ thất bại được gọi là thuộc tính " khả năng chịu lỗi " của hệ thống đó. (Liên kết bắt buộc với phim hoạt hình này )

Cách tiếp cận nào bạn nên sử dụng để xây dựng đám mây riêng, của riêng mình? Theo thứ tự hoặc sở thích của tôi:

  1. Đừng xây dựng đám mây của riêng bạn , hãy sử dụng cơ sở hạ tầng do người khác cung cấp. Amazon gọi đây là Đám mây riêng ảo , Rackspace chỉ là Đám mây riêng ; Tôi chắc chắn bạn có thể tìm thấy các đề nghị khác và so sánh.

  2. Đừng xây dựng công cụ tính toán phân tán của riêng bạn , hãy sử dụng công cụ do người khác cung cấp. Nếu bạn khăng khăng sử dụng máy của mình, hãy sử dụng ít nhất càng nhiều phần mềm càng tốt do người khác cung cấp và kiểm tra. Bạn có thể sử dụng Hadoop từ C ++ thông qua giao diện ống hoặc từ bất kỳ tệp thực thi nào thông qua API truyền phát . Có một giao diện Truyền phát tương tự trên Spark .

  3. Không mã hóa tất cả các thành phần từ đầu , sử dụng các thành phần từ cộng đồng. Nếu, vì một số lý do, bạn đã đọc cho đến nay và muốn tung ra các thành phần đám mây của riêng mình, đừng bắt đầu từ thư viện chuẩn của C ++. Các thành phần chính bạn sẽ cần là:

    • một hệ thống xếp hàng, như đã lưu ý trong một nhận xét , để gửi các tác vụ từ tổng thể đến các nút xử lý và để gửi các xác nhận kết quả từ các nút xử lý đến chủ
    • một hệ thống tệp phân tán, để các nút xử lý có thể truy cập dữ liệu để hoạt động.

    Có nhiều lựa chọn thay thế cho cả hai. Để xếp hàng, RabbitMQ có trình cài đặt Windows, ZeroMQ cũng vậy . Đối với các hệ thống tệp phân tán, tôi thực sự không có đủ kinh nghiệm trên Windows: có vẻ như bạn có thể sắp xếp cổ phiếu SMB vào DFS , nhưng tôi không thể cung cấp cho bạn bất kỳ gợi ý nào ở đây. Bạn có thể nghĩ, như đã lưu ý trong một câu trả lời khác, để sử dụng cơ sở dữ liệu phân tán như MongoDB cho dữ liệu; Nó chạy trên Windows .

Bạn cũng có thể suy nghĩ về việc sử dụng MPI (thường là triển khai OpenMPI , thường thông qua trình bao bọc Boost ), nhưng lưu ý rằng các chương trình MPI không co giãn cũng không chịu lỗi mỗi se; bạn cần phải tự chăm sóc điều đó (ít nhất là họ cung cấp một số cơ chế để đạt được điều này ). Đó là lý do tại sao tôi muốn giới thiệu cho bạn trước tiên để đánh giá một khung phân phối có các thuộc tính như vậy.

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.