Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 19
Текст из файла (страница 19)
В современных архитектурах распределение на клиенты и серверыпроисходит способом, известным как горизонтальное распределение {horizontaldistribution). При таком типе распределения клиент или сервер может содержатьфизически разделенные части логически однородного модуля, причем работас каждой из частей может происходить независимо. Это делается для выравнивания загрузки.В качестве распространенного примера горизонтального распределения рассмотрим web-сервер, peплициpoвapн^ый на несколько машгн! локальной сети, какпоказано на рис. 1.22. На каждом из серверов содержится один и тот же наборweb-страниц, и всякий раз, когда одна из web-страниц обновляется, ее копии незамедлительно рассылаются на все серверы.
Сервер, которому будет переданприходящий запрос, выбирается по правилу «карусели» (round-robin). Эта форма горизонтального распределения весьма успешно используется для выравнивания нагрузки на серверы популярных web-сайтов.Таким же образом, хотя и менее очевидно, могут быть распределены и клиенты. Для несложного приложения, предназначенного для коллективной работы,мы можем не иметь сервера вообще.
В этом случае мы обычно говорим об одноранговом распределении {peer-to-peer distribution). Подобное происходит, напри-78Глава 1, Введениемер, если пользователь хочет связаться с другим пользователем. Оба они должны запустить одно и то же приложение, чтобы начать сеанс. Третий клиентможет общаться с одним из них или обоими, для чего ему нужно запустить то жесамое приложение.Встречаи обработкавходящихзапросовРеплицированные web-серверы,каждый из которых содержитодни и те же web-страницыЗапросыобрабатываемыеспособом«карусели»- Диски51Рис. 1.22.
Пример горизонтального распределения web-службыЧисло альтернативных организаций архитектуры клиент-сервер обсуждаетсяв книге [3]. В следующих главах мы рассмотрим множество других вариантоворганизации распределенных систем, в частности мы познакомимся с системами, распределенными одновременно и по вертикали, и по горизонтали.1.6. ИтогиРаспределенные системы состоят из автономных компьютеров, которые работают совместно, представая в виде единой связной системы.
Их важное преимущество состоит в том, что они упрощают интеграцию различных приложений, работающих на разных компьютерах, в единую систему. Еще одно их преимущество —при правильном проектировании распределенные системы хорошо масштабируются. Их размер ограничивается только размером базовой сети. Платой за этипреимущества часто является очень сложное программное обеспечение, падениепроизводительности и особенно проблемы с безопасностью.
Тем не менее заинтересованность в построении и внедрении распределенных систем наблюдается повсеместно.Существуют различные типы распределенных систем. Распределенные операционные системы используются для управления аппаратным обеспечением взаимосвязанных компьютерных систем, к которым относятся мультипроцессорныеи гомогенные мультикомпьютерные системы. Эти распределенные системы насамом деле не состоят из автономных компьютеров, но успешно воспринимаются в виде единой системы. Сетевые операционные системы, с другой стороны,с успехом объединяют различные компьютеры, работающие под управлением1.6. Итоги79своих операционных систем, так что пользователи с легкостью могут получатьдоступ к локальным службам каждого из узлов.
Однако сетевые операционныесистемы не создают ощущения работы с единой системой, которое характернодля распределенных операционных систем.Современные распределенные системы обычно содержат поверх сетевой операционной системы дополнительный уровень программного обеспечения.
Этотуровень, называемый промежуточным, предназначен для того, чтобы скрыть гетерогенность и распределенную природу базового набора компьютеров. Распределенные системы с промежуточным уровнем обычно требуют специфическуюмодель распределения и связи. Известные модели основаны на удаленном вызове процедур, а также на распределенных объектах, файлах или документах.Для каждой распределенной системы важна схема ее внутренней организации. Широко применяется модель, в которой процессы клиента запрашиваютслужбы у процессов сервера. Клиент посылает на сервер сообщение и ожидает,пока тот вернет ответ. Эта модель тесно связана с традиционным программированием, в котором службы реализуются в виде процедур в отдельных модулях.Дальнейшее уточнение обычно состоит в подразделении на уровень пользовательского интерфейса, уровень обработки и уровень данных.
Сервер обычно отвечает за уровень данных, а уровень пользовательского интерфейса реализуетсяна стороне клиента. Уровень обработки может быть реализован на клиенте, насервере или поделен между ними.В современных распределенных системах для построения крупномасштабныхсистем такой вертикальной организации приложений модели клиент-сервер недостаточно. Необходимо горизонтальное распределение, при котором клиентыи серверы физически распределены и реплицируются на несколько компьютеров.
Типичным примером успешного применения горизонтального распределения является World Wide Web.Вопросы и задания1. Какова роль программного обеспечения промежуточного уровня в распределенных системах?2. Объясните, что такое прозрачность (распределения) и приведите примерыразличных видов прозрачности.3. Почему иногда так трудно скрыть наличие в распределенной системе сбояи восстановление после него?4. Почему реализация максимально возможной степени прозрачности — это невсегда хорошо?5.
Что такое открытая распределенная система и какие преимущества дает открытость?6. Опишите точно, что такое масштабируемая система.7. Масштабируемости можно добиться, используя различные методики. Что этоза методики?80Глава 1. Введение8. Чем мультипроцессорная система отличается от мультикомпьютерной?9. Мультикомпьютерная система с 256 процессорами организована в видерешетки 16x16. Какая в такой системе может быть максимальная задержка(в хопах)?10. Рассмотрим 256-процессорный гиперкуб. Какая максимальная задержка может наблюдаться в нем (снова в хопах)?И. В чем состоит разница между распределенными и сетевыми операционнымисистемами?12. Расскажите, как можно использовать микроядро для организации операционной системы, работающей в режиме клиент-сервер.13.
Опишите основные принципы работы распределенной системы с совместноиспользуемой памятью страничной организации.14. Какова причина разработки распределенных систем с совместно используемой памятью? В чем, по-вашему, состоит главная трудность их эффективнойреализации?15. Расскажите, что такое ошибочное разделение в распределенных системахс совместно используемой памятью. Какие решения этой проблемы вы можете предложить?16.
Экспериментальный файловый сервер 3/4 времени работает, а 1/4 времени«лежит» по причине ошибок. Сколько реплик этого сервера должно быть сделано, чтобы его доступность составляла хотя бы 99 %?17. Что такое трехзвенная архитектура клиент-сервер?18. В чем состоит разница между горизонтальным и вертикальным распределениями?19. Рассмотрим цепочку процессов Р], Р2, ..., Р„, которая реализована в многозвенной архитектуре клиент-сервер. Процесс Pi является клиентом процессаPf+i, возвращая, в свою очередь, результат процессу P/_i только после того,как сам получит результат от процесса P/+i- Какова будет главная проблемаподобной организации, когда мы станем рассматривать производительностьзапроса-ответа для процесса Р^?Глава 2Связь2.1.
Уровни протоколов2.2. Удаленный вызов процедур2.3. Обращение к удаленным объектам2.4. Связь посредством сообщений2.5. Связь на основе потоков данных2.6. ИтогиСвязь между процессами — это суть распределенных систем. Нет смысла изучатьраспределенные системы, не рассматривая при этом во всех подробностях способы обмена информацией между различными процессами, выполняющимися наразных машинах. Взаимодействие в распределенных системах всегда базируетсяна низкоуровневом механизме передачи сообщений, предоставляемом базовойсетью. Как мы обсуждали в предыдущей главе, реализация взаимодействия черезпередачу сообщений сложнее, чем использование примитивов на базе разделяемой памяти.
Современные распределенные системы часто включают в себя тысячи или даже миллионы процессов, разбросанных по ненадежной сети, такой какИнтернет. Если не заменить простейшие средства взаимодействия в компьютерных сетях чем-то иным, разработка масштабных приложений будет достаточносложной.Мы начнем эту главу с обсуждения правил, которых придерживаются сообщающиеся между собой процессы. Их обычно называют протоколами. Мы сосредоточимся на структурировании этих протоколов в виде уровней. Затем мырассмотрим четыре широко распространенные модели взаимодействия: удаленный вызов процедур (Remote Procedure Call, RPC), удаленное обращение к методам (Remote Method Invocation, RMI), ориентированный на сообщения промежуточный уровень (Message-Oriented Middleware, MOM) и потоки данных(streams).Нашей первой моделью взаимодействия в распределенных системах станетудаленный вызов процедур.