Что именно такое распределенные вычисления? [закрыто]

14

Что именно представляет собой распределенные вычисления и чем они отличаются от параллельных / параллельных вычислений?

Представляет ли использование мьютексов и семафоров в нескольких параллельных потоках, пытающихся синхронизироваться для доступа к ресурсу, проблему в области распределенных вычислений?

rdasxy
источник

Ответы:

8

Что именно представляет собой распределенные вычисления?

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

Самый простой способ обойти проблемы - сделать отдельный элемент обработки особенным, то есть авторитетным для определенной части информации. Затем другие элементы могут либо ссылаться на него каждый раз, либо кэшировать информацию и надеяться, что она не устареет (поскольку они не могут рассчитывать на то, что им сообщат об изменениях). Это классическая архитектура клиент / сервер.

Интернет-вычисления - это распределенные вычисления, но без возможности контролировать то, что в действительности делает большинство распределенных узлов.

Многочисленные параллельные потоки, пытающиеся синхронизироваться для доступа к ресурсу, представляют собой проблему в области распределенных вычислений?

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

Чего вы пытаетесь избежать, так это распределенных блокировок. Отсутствие надежного своевременного обмена сообщениями абсолютно задерживает протоколы распределенного принятия решений, если только вы не используете что-то вроде протокола Paxos , но это требует много предостережений. Основная проблема распределенных вычислений заключается в том, что «плохие вещи случаются с сообщениями». Относительно низкоуровневые протоколы, такие как TCP, уменьшают проблемы, но вы все равно можете оторваться.

Donal Fellows
источник
6

Многочисленные параллельные потоки, пытающиеся синхронизироваться для доступа к ресурсу, представляют собой проблему в области распределенных вычислений?

Они делают, если эти потоки могут работать на разных машинах, или даже если они работают на одной машине, но в разных процессах.

Калеб
источник
1
Потоки, работающие на разных машинах, в принципе не могут быть синхронизированы традиционным способом мьютексов и семафоров.
Ян Худек
@JanHudec Я думаю, что это был вопрос интервьюера. Без атомарных инструкций тестирования и установки или сравнения и замены или общей памяти распределенные вычисления должны полагаться на обмен сообщениями между компьютерами для синхронизации. К счастью, есть алгоритмы, которые достигают этого.
Калеб
Я не согласен с «к счастью». Алгоритмы сложны и не отказоустойчивы, поэтому их следует избегать.
Ян Худек
5

Распределенные вычисления - это вычислительная система, обработка которой происходит на разных компьютерах (т.е. в распределенной системе). Отдельные программы общаются друг с другом через серию каналов связи. Эти каналы обычно являются сетевыми соединениями (например, сокеты TCP), но часто используют другие протоколы и устройства связи (такие как DeviceNET, BACNet, SECS-2, Modbus и т. Д.) Или даже протоколы, которые создаются на заказ для конкретного устройства.

Распределенные системы обычно намного сложнее, чем системы, предназначенные для работы на одном компьютере. Помимо проблем параллелизма и блокировки ресурсов, с которыми приходится сталкиваться многопоточным приложениям, распределенные системы должны обрабатывать сбои связи и сбои узлов обработки. Транзакции (и откат), которые требуют нескольких процессоров, также могут быть сложными.

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

Записи на распределенном вычислительном в Википедии стоит прочитать.

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

Джей Элстон
источник
3

Строго говоря, «распределенные вычисления» - это любое решение, которое включает обработку одной транзакции / запроса / вычисления на более чем одном компьютере.

Вы также столкнетесь с термином «распределенные системы», который является универсальным термином для Windows, Unix и других небольших системных серверов, которые первоначально были бы развернуты вне центрального центра обработки данных. Хотя в наши дни более привычно, чтобы эти системы были развернуты внутри центра обработки данных, срок их использования застрял.

Джеймс Андерсон
источник
3

Чтобы ответить на ваш общий вопрос о том, что представляет собой распределенные вычисления, я бы порекомендовал статью Энн Уоллрат, Джеффа Уайанта, Джима Уолдо и Сэмюэля К. Кендалла «Записка о распределенных вычислениях» . Он охватывает недавнюю историю распределенных систем и их сбоев, и предлагает, чтобы распределенные вычисления требовали другого подхода к рассматриваемым проблемам.

Хотя в статье не упоминаются ни мьютексы, ни семафоры, это дает ценную информацию о правильном проектировании распределенной программной системы.

Что касается того, почему ваш интервьюер спросил о мьютексах и семафорах, я бы согласился с @Caleb:

Они делают, если эти потоки могут работать на разных машинах, или даже если они работают на одной машине, но в разных процессах.

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

Мэтью Родатус
источник
2

Слово говорит само за себя. Вы должны выполнить некоторую вычислительную операцию, и если бы вы могли распределить части этих вычислений так, чтобы каждое вычисление работало независимо от других вычислений, а затем, когда все было сделано, вы объединяете результат каждого вычисления, чтобы получить ответ на основные вычисления. Примером может быть: Map-Reduce

Анкур
источник
1

У нас был курс по «распределенным системам», и хотя я точно не помню это определение, оно было примерно таким:

  1. может работать на нескольких отдельных узлах, которые обмениваются сообщениями (не могут совместно использовать память)
  2. объекты могут быть перенесены между узлами
  3. объекты сохраняют свою идентичность при переносе и могут прозрачно обрабатываться при переносе
  4. объекты не зависят от узла, который их создал
  5. система может обрабатывать добавление и удаление узлов

(Я верю, что было еще немного, и я не уверен насчет последнего пункта)

Теперь в курсе мы узнали, как реализовать распределенную транзакцию и распределенную блокировку. Урок заключается в том, что распределенная блокировка в основном реализована с использованием распределенной транзакции, которая является противоположной по сравнению с тем, что вы делаете локально, и что она по своей природе не является отказоустойчивой, что скорее сводит на нет цель иметь распределенную систему в первую очередь.

Изменить: Это определение для «распределенной системы» в узком смысле операционной системы или системы базы данных, а не просто клиент-серверной системы. Все, что удовлетворяет первому условию, может называться распределенным в некоторых контекстах.

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

Ян Худек
источник
Это очень специфический стиль распределенных вычислений. Есть и другие, и единственное, что они действительно разделяют, это первое. Обмен сообщениями имеет решающее значение, остальные ... не так много.
Донал Феллоуз
1
@DonalFellows: Ну, это распределенная система , в смысле операционной системы или системы баз данных. Там миграция и отказоустойчивость являются основными пунктами для их выполнения. Распределенные «вычисления» - это все, что работает на нескольких узлах.
Ян Худек
Ну, в этом случае это должно было покрыть дело принятия решения. Это сложно в распределенной системе. (Более того, большинство научных работ, которые я видел по этой теме, делают совершенно нереалистичные предположения о топологии основного графа, давая правильные, но бесполезные выводы.)
Donal Fellows
@DonalFellows: Конечно, курс охватывал бизнес принятия решений и все эти вопросы арбитража и раздробленности мозга (не слишком глубоко, это был только вводный уровень). Но это не определяющее свойство распределенной системы. Это просто препятствие, которое вы должны прыгнуть, если хотите его создать.
Ян Худек
0

Распределенные вычисления - термин «нерыночный» для корпоративных вычислений, который вы можете услышать гораздо чаще в реальной жизни. Однако общая идея, на которую указывают другие: «вы используете более одного компьютера для работы»

Архимед Траяно
источник