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

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

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

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


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

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

1 ответ

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

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

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

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

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

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

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

Другие вопросы по тегам