Что именно представляет собой распределенные вычисления?
Распределенные вычисления - это по своей сути параллельная коллекция элементов обработки, которые взаимодействуют друг с другом для решения одной или нескольких проблем. Эти обрабатывающие элементы достаточно отделены друг от друга, так что создать надежную и своевременную систему обмена сообщениями между ними нецелесообразно, и поэтому становится невозможным глобальное знание состояния системы. Конкретные особенности обмена сообщениями с распределенными системами в том , что сообщения будут потеряны, будут получать искаженные, будут получать с задержкой - решения в этом пространстве должны учитывать это. Таким образом, распределенное программирование - это работа с сетями и сообщениями, параллелизм и отсутствие глобальной информации.
Самый простой способ обойти проблемы - сделать отдельный элемент обработки особенным, то есть авторитетным для определенной части информации. Затем другие элементы могут либо ссылаться на него каждый раз, либо кэшировать информацию и надеяться, что она не устареет (поскольку они не могут рассчитывать на то, что им сообщат об изменениях). Это классическая архитектура клиент / сервер.
Интернет-вычисления - это распределенные вычисления, но без возможности контролировать то, что в действительности делает большинство распределенных узлов.
Многочисленные параллельные потоки, пытающиеся синхронизироваться для доступа к ресурсу, представляют собой проблему в области распределенных вычислений?
Они представляют собой возможное решение , которое полезно при построении модели клиент / сервер, но за счет потенциально значительного увеличения конкуренции за ресурсы. Для чтения это не очень большая проблема (при условии, что оборудования достаточно), но для записи это действительно большая проблема.
Чего вы пытаетесь избежать, так это распределенных блокировок. Отсутствие надежного своевременного обмена сообщениями абсолютно задерживает протоколы распределенного принятия решений, если только вы не используете что-то вроде протокола Paxos , но это требует много предостережений. Основная проблема распределенных вычислений заключается в том, что «плохие вещи случаются с сообщениями». Относительно низкоуровневые протоколы, такие как TCP, уменьшают проблемы, но вы все равно можете оторваться.
Распределенные вычисления - это вычислительная система, обработка которой происходит на разных компьютерах (т.е. в распределенной системе). Отдельные программы общаются друг с другом через серию каналов связи. Эти каналы обычно являются сетевыми соединениями (например, сокеты TCP), но часто используют другие протоколы и устройства связи (такие как DeviceNET, BACNet, SECS-2, Modbus и т. Д.) Или даже протоколы, которые создаются на заказ для конкретного устройства.
Распределенные системы обычно намного сложнее, чем системы, предназначенные для работы на одном компьютере. Помимо проблем параллелизма и блокировки ресурсов, с которыми приходится сталкиваться многопоточным приложениям, распределенные системы должны обрабатывать сбои связи и сбои узлов обработки. Транзакции (и откат), которые требуют нескольких процессоров, также могут быть сложными.
Распределенные системы принимают различные формы и в настоящее время используются во многих приложениях. Веб-приложения - это распределенные системы. Система N-Tiered обычно имеет как минимум N разных процессоров (с разными приложениями). Распределенные системы также используются во многих системах автоматизации производства.
Записи на распределенном вычислительном в Википедии стоит прочитать.
В ответ на ваш вопрос о том, является ли многопоточное приложение распределенным приложением - если потоки работают на одном компьютере, система не распределяется. Это должно решить некоторые проблемы, присущие распределенным системам, но не все из них.
источник
Строго говоря, «распределенные вычисления» - это любое решение, которое включает обработку одной транзакции / запроса / вычисления на более чем одном компьютере.
Вы также столкнетесь с термином «распределенные системы», который является универсальным термином для Windows, Unix и других небольших системных серверов, которые первоначально были бы развернуты вне центрального центра обработки данных. Хотя в наши дни более привычно, чтобы эти системы были развернуты внутри центра обработки данных, срок их использования застрял.
источник
Чтобы ответить на ваш общий вопрос о том, что представляет собой распределенные вычисления, я бы порекомендовал статью Энн Уоллрат, Джеффа Уайанта, Джима Уолдо и Сэмюэля К. Кендалла «Записка о распределенных вычислениях» . Он охватывает недавнюю историю распределенных систем и их сбоев, и предлагает, чтобы распределенные вычисления требовали другого подхода к рассматриваемым проблемам.
Хотя в статье не упоминаются ни мьютексы, ни семафоры, это дает ценную информацию о правильном проектировании распределенной программной системы.
Что касается того, почему ваш интервьюер спросил о мьютексах и семафорах, я бы согласился с @Caleb:
Единственное, что я хотел бы добавить, это то, что мьютексы и семафоры являются низкоуровневыми блокирующими примитивами, которые позволяют распределять работу между несколькими вычислительными устройствами, и их работа (как правило) жизненно важна для успеха приложения. Очевидно, это зависит от используемого языка и технологии. Если вы используете Erlang или Scala, вы, вероятно, будете использовать параллелизм на основе модели Actor, а не традиционный параллелизм на основе блокировок.
источник
Слово говорит само за себя. Вы должны выполнить некоторую вычислительную операцию, и если бы вы могли распределить части этих вычислений так, чтобы каждое вычисление работало независимо от других вычислений, а затем, когда все было сделано, вы объединяете результат каждого вычисления, чтобы получить ответ на основные вычисления. Примером может быть: Map-Reduce
источник
У нас был курс по «распределенным системам», и хотя я точно не помню это определение, оно было примерно таким:
(Я верю, что было еще немного, и я не уверен насчет последнего пункта)
Теперь в курсе мы узнали, как реализовать распределенную транзакцию и распределенную блокировку. Урок заключается в том, что распределенная блокировка в основном реализована с использованием распределенной транзакции, которая является противоположной по сравнению с тем, что вы делаете локально, и что она по своей природе не является отказоустойчивой, что скорее сводит на нет цель иметь распределенную систему в первую очередь.
Изменить: Это определение для «распределенной системы» в узком смысле операционной системы или системы базы данных, а не просто клиент-серверной системы. Все, что удовлетворяет первому условию, может называться распределенным в некоторых контекстах.
По совпадению определение соответствует разнице между распределенными и традиционными системами контроля версий, которые все являются по меньшей мере клиент-серверными и часто также реплицируются.
источник
Распределенные вычисления - термин «нерыночный» для корпоративных вычислений, который вы можете услышать гораздо чаще в реальной жизни. Однако общая идея, на которую указывают другие: «вы используете более одного компьютера для работы»
источник