Два вопроса о распределенных системах: масштабируемость и взаимное исключение

Первый вопрос: Масштабируемость

Что именно можно назвать масштабируемостью в контексте распределенных систем? Я предполагаю, что это способность системы использоваться любым количеством распределенных устройств без необходимости изменения кода. Верно ли это мое представление?

А также какие методы я могу реализовать в своих распределенных приложениях, чтобы обеспечить такую ​​масштабируемость?


Второй вопрос: Взаимное исключение

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


person God_is_a_sociopath_so_are_we    schedule 10.01.2016    source источник
comment
О какой распределенной системе вы думаете? Сейчас многое раздают. Причина, по которой я спрашиваю, заключается в том, что вы упомянули распределенные устройства, и в зависимости от типа распределенной системы вы, вероятно, получите другой ответ. Что касается вашего второго вопроса, процессы на самом деле являются серверами, которые работают на разных портах и ​​общаются друг с другом?   -  person Will C    schedule 12.04.2016


Ответы (1)


Первый вопрос: масштабируемость:

Что именно можно назвать масштабируемостью в контексте распределенных систем? Я предполагаю, что это способность системы использоваться любым количеством распределенных устройств без необходимости изменения кода. Верно ли это мое представление?

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

Наиболее каноническим случаем масштабируемой системы является система, в которой вычислительная нагрузка распределяется между доступными машинами, поэтому, когда вы добавляете больше машин, вы также можете иметь дело с пропорциональным увеличением нагрузки, это часто называют «линейным». масштабируемость», который обычно является наиболее желательным типом масштабируемости, но часто его очень трудно достичь, поскольку при добавлении дополнительных ресурсов (например, машин) вам часто приходится платить накладные расходы за связь между машинами, а это означает, что масштабирование становится сублинейным. Если вас интересуют более подробные сведения об этом, я бы посоветовал вам прочитать о законе Амдалса (paper1, paper2).

Второй вопрос: взаимное исключение

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

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

person Limmen    schedule 26.08.2018