На що саме розподіляються обчислення? [зачинено]


14

Що саме складається з розподілених обчислень, і чим він відрізняється від паралельних / паралельних обчислень?

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

Відповіді:


8

Що саме є розподіленими обчисленнями?

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

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

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

Чи численні паралельні потоки, які намагаються синхронізувати для доступу до ресурсу, є проблемою в області розподілених обчислень?

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

Те, чого ви намагаєтеся уникнути, - це розподілені замки. Відсутність надійного своєчасного обміну повідомленнями абсолютно забиває розповсюджені протоколи рішень, якщо ви не використовуєте щось на зразок протоколу Paxos , але це має багато застережень. Основна проблема розподілених обчислень полягає в тому, що "погані речі трапляються з повідомленнями". Відносно низькі рівні протоколів, як TCP, зменшують проблеми, але ви все ще можете сильно відклеїти.


6

Чи численні паралельні потоки, які намагаються синхронізувати для доступу до ресурсу, є проблемою в області розподілених обчислень?

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


1
Нитки, що працюють на різних машинах, в основному не можуть бути синхронізовані традиційним способом мютексів та семафорів.
Ян Худек

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

Я не згоден з "на щастя". Алгоритми складні і не мають відмовок, тому їх слід уникати.
Ян Худек

5

Розподілене обчислення - це обчислювальна система, обробка якої відбувається на різних комп'ютерах (тобто в розподіленій системі). Окремі програми спілкуються між собою через ряд каналів зв'язку. Зазвичай ці канали є мережевими підключеннями (наприклад, TCP-розетки), але часто використовують інші протоколи зв'язку та пристрої (наприклад, DeviceNET, BACNet, SECS-2, Modbus тощо) або навіть протоколи, які виготовляються на конкретному пристрої.

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

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

Записи на розподіленому обчислювальному в Вікіпедії варто прочитати.

У відповідь на вас питання про те, чи багатопотокова програма являє собою розподілену програму - якщо потоки працюють на одному комп’ютері, система не поширюється. Це має вирішити деякі проблеми, притаманні розподіленим системам, але не всі вони.


3

Власне кажучи, "розподілені обчислення" - це будь-яке рішення, яке включає обробку однієї транзакції / запиту / розрахунку на більш ніж одному комп'ютері.

Ви також натрапите на термін "Розподілені системи", який є загальним для всіх термінів для Windows, Unix та інших невеликих системних серверів, які спочатку були б розміщені поза центральним центром обробки даних. Незважаючи на те, що ці системи є нормальнішими для розміщення цих систем у центрі обробки даних, цей термін затримався.


3

Щоб відповісти на ваше загальне запитання про те, що являє собою розподілені обчислення, я рекомендую статтю "Примітка про розподілені обчислення" Ен Воллрат, Джефф Вайант, Джима Уолдо та Семюела Кендалла . Він висвітлює недавню історію розподілених систем та її збої, і пропонується, що розподілені обчислення вимагають по-різному думати про проблеми, що виникають.

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

Щодо того, чому ваш інтерв'юер запитав про мутекси та семафори, я погодився б з @Caleb:

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

Єдине, що я хотів би додати, це те, що мютекси та семафори - це низькорівневі блокуючі примітиви, які дозволяють розподіляти роботу на декілька обчислювальних пристроїв, і їх робота (як правило) є життєво важливою для успіху програми. Очевидно, це залежить від мови та технології, що використовується. Якщо ви використовуєте Erlang або Scala, ви, ймовірно, будете використовувати паралельну модель на базі моделі Actor, а не традиційну одночасність.


2

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


1

У нас був курс з «розподілених систем», і хоча я точно не пам’ятаю визначення, це було так:

  1. може працювати на кількох окремих вузлах, які спілкуються за допомогою повідомлень (не можуть ділитися пам'яттю)
  2. об'єкти можна мігрувати між вузлами
  3. об'єкти зберігають свою ідентичність під час міграції та можуть бути вирішені прозоро під час міграції
  4. об'єкти не залежать від вузла, який їх створив
  5. система може обробляти додавання та видалення вузлів

(Я вважаю, що їх було ще кілька, і я не впевнений в останньому пункті)

Зараз ми в курсі дізналися, як реалізувати розподілену транзакцію та розподілений замок. Урок полягає в тому, що розподілений замок в основному реалізується за допомогою розподіленої транзакції, що навпаки, порівняно з тим, що ви робите локально, і що вона по суті не є вірогідною, що швидше перемагає мету розподілу системи в першу чергу.

Редагувати: це визначення призначене для "розподіленої системи" у вузькому розумінні операційної системи або системи баз даних, а на відміну від просто системи клієнт-сервер. Все, що відповідає першій умові, можна назвати розподіленим у деяких контекстах.

Випадково визначення відповідає різниці між розподіленими та традиційними системами управління версіями, всі вони принаймні клієнт-сервер і часто також тиражуються.


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

1
@DonalFellows: Ну, це розподілена система , в сенсі операційної або бази даних. Там міграція та відмовостійкість є головними моментами їх виконання. Розподілене "обчислення" - це все, що працює на декількох вузлах.
Ян Худек

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

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

0

Розподілено обчислення "неринковий" термін для корпоративних обчислень, про які ви можете почути набагато більше в реальному житті. Однак загальна ідея, на яку вказували інші, - "ви використовуєте більше ніж один комп'ютер для роботи"

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