Як розділити роботу на мережу комп’ютерів?


11

Уявіть собі такий сценарій: Скажімо, у вас є центральний комп'ютер, який генерує багато даних. Ці дані повинні пройти деяку обробку, яка, на жаль, займає більше часу, ніж генерувати. Для того, щоб обробка підгонила реальний час, ми підключаємо більше рабовласницьких комп'ютерів.

Крім того, ми повинні враховувати можливість випадання рабів із мережі середньої роботи, а також додавання додаткових рабів. Центральний комп'ютер повинен забезпечити, щоб усі робочі місця були завершені до його задоволення, а робочі місця, скинуті рабом, переглядалися на інший.

Головне питання: Який підхід я повинен використовувати для досягнення цього?

Але, можливо, наступне допоможе мені дійти до відповіді: чи є ім’я чи шаблон дизайну для того, що я намагаюся зробити?

Яка область знань мені потрібна, щоб досягти мети змусити ці комп'ютери спілкуватися один з одним? (напр., чи буде достатньою базою даних, про яку я маю певні знання, або це буде включати сокети, про які я ще не маю знань?)

Чи є приклади такої системи? Головне питання трохи загальний, тому було б добре мати початкову точку / опорну точку.

Зауважте, я припускаю обмеження c ++ та Windows, тому рішення, спрямовані в цьому напрямку, будуть вдячні.


1
Шукайте системи черг чи робочих процесів, приклади: aws.amazon.com/sqs en.wikipedia.org/wiki/Message_queue etcetera. Система черг може піклуватися про розподіл, перевірку та повторне призначення.
Люк Франкен

2
Термін, який ви шукаєте, - паралелізація . Перш ніж рухатися по цій дорозі, переконайтеся, що вашу проблему можна вирішити паралельно (наприклад, результат для пункту n не залежить від результату для пункту n-1 ).
Blrfl

Подивіться на boinc

@Blrfl Я думаю, що паралелізація зазвичай не пов'язана з цим, паралелізація зазвичай пов'язана з багатопотоковим або багатопроцесовим виконанням на одній машині з використанням декількох ядер / процесорів або одночасного виконання на одній машині. На що він посилається, розподілені обчислення - це не гарантії одночасності, а лише гарантії асинхронності (тобто недетермінованого виконання, яке може бути одночасно, синхронним або затримкою в черзі)
Джиммі Хоффа

3
Я здивований, що ніхто не згадав про хадоп.
Кевін

Відповіді:


12

Чи є приклади такої системи?

Так. Ця закономірність називається розподіленими обчисленнями (або розподіленим програмуванням або будь-яким крутим словом, яке ви хочете викласти після розподіленого). Моя пропозиція буде не будувати цю фірму, перш ніж шукати інші рішення. Ви можете переглянути це запитання щодо переповнення стека для різних варіантів. А потім прийміть обчислене рішення.


3
Не забувайте для цього нове улюблене слово: хмара ! або хмарних обчислень. Якщо ви робите це на власних комп’ютерах, люди називають їх персональною хмарою або міні- хмарою . Торгуючи дурницями, це було відомо, як ви вже говорили, як розподілені обчислення протягом багатьох років, просто кидаючи туди, щоб ОП знав, де він читає про хмарні речі, це говорить саме про це.
Джиммі Хоффа

3
@JimmyHoffa: слово "хмара" так само часто використовується для позначення того, що ваші дані, а також програмне забезпечення, яке ви використовуєте для роботи з ними, є в Інтернеті десь замість вашої локальної машини. І в інший час це означає, що ви використовуєте віртуальну машину, яка працює на кластері, а не на одному монолітному хості VM; очевидною перевагою є прозорі відмовки від простою.
tdammers

2
@tdammers правда, але тим не менше тип системи, описаної ОП, є однією з багатьох, що використовують маркетинговий механізм Хмари, а також, як ви вказали, практично все інше. Ось що робить це казковим словом, воно було винайдено без визначення, тому люди застосовували його до тонни різних речей, так що це ефективно означає все і нічого. Ураг для голосних слів.
Джиммі Хоффа

1
@JimmyHoffa: Тут також згадується слово "хмара" абсолютно неконструктивним.
tdammers

3
Це може зробити гарне слово для використання проти управління. "Яке ваше вирішення проблеми обробки даних?" "Ну, ми могли б розподілити його в мережі комп'ютерів і обчислити їх паралельно." БЛАНКОВИЙ ШЛЯХ. "Ми можемо побудувати міні-хмару". "OKAY CARRY ON"
Морпорк

4

Як зазначають інші відповіді, це поле було відоме як розподілені обчислення , сіткові обчислення , кластерні обчислення та високопродуктивні обчислення .

Дозвольте додати відмінність, що коли система може бути змінена після зміни рівня завантаження, вона вважається " еластичною ", і це відрізняється від традиційних обчислювальних технологій. Це одна з (не маркетингових) причин терміна " хмарні обчислення ": користувачеві не потрібно планувати потужність, а кількість та місце розташування машин, що здійснюють обчислення, залишаються для нього непомітними як хмара.

Також ваша вимога, щоб майстер перепланував невдалі завдання, називався властивістю " відмовостійкості " цієї системи. (Обов’язкове посилання на цей мультфільм )

Який підхід слід використовувати для створення власної приватної хмари? У моєму порядку чи налаштуваннях:

  1. Не створюйте власну хмару , використовуйте інфраструктуру, надану іншими. Amazon називає цю віртуальну приватну хмару , Rackspace просто приватною хмарою ; Я впевнений, що ви можете знайти інші пропозиції та порівняти.

  2. Не створюйте власний розподілений обчислювальний движок , використовуйте двигун, наданий іншими. Якщо ви наполягаєте на використанні своїх машин, використовуйте принаймні якомога більше програмного забезпечення, яке надається та перевірене іншими. Ви можете використовувати Hadoop з C ++ через Pipes-інтерфейс або з будь-якого виконуваного файлу через Streaming API . Існує аналогічний інтерфейс Streaming на Spark .

  3. Не кодуйте всі компоненти з нуля , використовуйте компоненти спільноти. Якщо ви з якихось причин ви до цього часу читали і хочете розгорнути свої власні компоненти хмари, не починайте зі стандартної бібліотеки C ++. Основні компоненти, які вам знадобляться, це:

    • система черги, як зазначається в коментарі , для надсилання завдань від ведучого до вузлів обробки та надсилання підтверджень результатів від вузлів обробки до ведучого
    • розподілену файлову систему, щоб вузли обробки могли отримати доступ до даних, над якими працювати.

    Є багато альтернатив для обох. Для черги RabbitMQ має інсталятор Windows, як і ZeroMQ . Для розподілених файлових систем у мене дійсно недостатньо досвіду роботи в Windows: схоже, ви можете організувати SMB-акції в DFS , але я не можу дати вам тут жодної підказки. Можна подумати, як зазначено в іншій відповіді, використовувати розподілену базу даних, таку як MongoDB; він працює на Windows .

Ви також можете подумати про використання MPI (зазвичай це реалізація OpenMPI , як правило, через оболонку Boost ), але зауважте, що програми MPI самі по собі не є еластичними, ані помилками; вам потрібно подбати про це самостійно (принаймні, вони забезпечують деякі механізми для досягнення цього ). Ось чому я рекомендую вам спершу оцінити рамку для розповсюдження, яка має такі властивості.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.