Добавлен: 05.04.2023
Просмотров: 777
Скачиваний: 1
СОДЕРЖАНИЕ
Глава 1. Понятие распределенных информационных систем
1.1 Предпосылки создания и определение распределительных систем
1.2 Средства работы с распределенными данными
1.3 Задачи распределительных систем
Глава 2. Средства распределительных систем
2.1 Аппаратные средства распределенных систем
2.2 Программные средства распределенных систем
Глава 3. Примеры распределительных систем и распределительные базы данных
NOTE: Google Spanner http://research.google.com/archive/spanner.html . Один из компонентов системы - атомные часы в каждом сервере.
У географической масштабируемости - свои сложности. Одна из основных проблем масштабирования распределенных систем, разработанных для локальных сетей, на глобальные сети - то, что в их основе лежит принцип синхронной связи. Т.е. процесс, выполняющий запрос, блокируется до получения ответа. Другое важное отличие организации глобальных коммуникаций от локальных - существенно меньшая надежность глобальных сетей с точки зрения передачи отдельно-взятого блока данных.[15]
Также следует принимать во внимание вопрос обеспечения масштабирования распределенной системы на множество административно-независимых областей. Основная проблема, которую надо при этом решить - состоит в конфликтах правил, относящихся к использованию ресурсов (и плате за них), управлению и безопасности. Здесь можно выделить два типа проверок безопасности: злонамеренные атаки из новой области на системы и атака на ресурсы области из самой распределенной системы.
Существуют три основные технологии масштабирования:
- сокрытие времени ожидания связи;
- распределение;
- репликация.
Сокрытие времени ожидания применяется в случае географического масштабирования. Идея - постараться по возможности избежать ожидания ответа от удаленного сервера. Т.е. нужно разрабатывать приложения в расчете на использование только асинхронной связи. Когда будет получает ответ, приложение прервет свою работу и вызовет специальный обработчик для завершения отправленного ранее запроса.[16] В случае, если использование асинхронной связи слишком сложно либо не соответствует паттерну использования приложения - можно пойти другим путем - уменьшить объем необходимого взаимодействия, например, перенести часть логики с сервера на клиент.
Распределение предполагает разбиение компонентов на мелкие части и последующее разнесение этих частей по системе. Хороший пример - DNS.
Репликация компонентов распределенной системы не только повышает доступность, но и помогает выровнять загрузку компонентов, что ведет к повышению производительности. Особая форма репликации - кэширование. Основное различие - кэширование происходит на стороне потребителя ресурса, а репликация - на стороне системы предоставляющей ресурс.
У репликации и кэширования есть один подводный камень: поскольку есть множество копий ресурса, модификация одной из них делает ее отличной от остальных - возникает проблема непротиворечивости данных (consistency).
Глава 2. Средства распределительных систем
2.1 Аппаратные средства распределенных систем
Системы, построенные из набора независимых компьютеров можно подразделить на две большие группы:
- мультипроцессоры - компьютеры используют память совместно, т.е. все процессоры системы имеют единое адресное пространство;
- мультикомпьютеры - каждый компьютер использует только свою память, у каждого процессора свое собственное адресное пространство.
Каждая из этих категорий может быть подразделена на дополнительные под-категории на основе архитектуры соединяющей их сети:
- шинная - присутствует одиночная сеть, плата, шина, кабель или другая среда, соединяющая все машины между собой;
- коммутируемая - нет единой магистрали, сообщения передаются по каналам с принятием явного решения о коммутации с конкретным выходным каналом.
Рисунок 1
Мультикомпьютерные системы также можно подразделить на гомогенные и гетерогенные. Для гомогенных систем характерна одна соединяющая компьютеры сеть и одинаковы все процессоры (и как правило одинаков объем памяти доступной каждому процессору). Гетерогенные-же могут содержать в своем составе целую гамму различных аппаратных решений.
Мультипроцессорные системы
Типичная архитектура, используемая в мультипроцессорных системах - шинная. Характерная особенность - все процессоры имеют прямой доступ к общей памяти. Когда процессор А записывает слово в память, а процессор В микросекундой позже считывает слово из памяти, процессор В получает в точности информацию, записанную туда процессором А. Память, обладающая таким поведением называется согласованной (coherent). Проблема такой схемы в том, что уже при наличии 4-5 процессоров шина данных оказывается сильно перегруженной и общая производительность системы резко падает. Решением этой проблемы является размещение между процессором и шиной высокоскоростной кэш-памяти.
Рисунок 2
Если запрашиваемые данные находятся в кэше, то не произойдет обращения к шине. Если размер кэш-памяти достаточно велик, вероятность успеха (коэффициент кеш-попаданий, hit rate) велика и трафик на шине снижается, позволяя включить в систему большее количество процессоров.
Однако очевидно, что введение кэша порождает проблему несогласованности памяти. Изменение данных в памяти одним процессором должно каким-то образом синхронизироваться с кэшем всех процессоров.
Шинная архитектура накладывает ограничение на количество процессоров в системе. Ориентировочно 256 процессоров - реальный потолок таких систем, не смотря на использование кэша.
Один из вариантов решения проблемы этого ограничения шинной архитектуры - разделение общей памяти на модули и связь их с процессорами с помощью коммутирующей решетки (crossbar switch). С ее помощи каждый процессор может быть связан с каждым модулем памяти.
Рисунок 3
Достоинство узловых коммутаторов также и в том, что к памяти могут одновременно получить доступ несколько процессоров (естественно не любые комбинации допустимы).
Недостаток данного подхода в том, что при N процессорах и M модулей памяти потребуется NxM узлов решетки. Соответственно при росте количества процессоров/блоков памяти опять возникает проблема физической реализуемости системы. Один их вариантов решения данной проблемы - коммутирующая омега-сеть, например такая:
Рисунок 4
Еще один способ уменьшения затрат на коммутацию - переход к иерархическим системам. В таких системах с каждым процессором ассоциируется некоторая область памяти, к которой данный процессор получает максимально быстрый доступ. Доступ-же к памяти, ассоциированной с другими процессорами происходит существенно медленнее. Термин - NUMA (Non-Uniform Memory Access):
Рисунок 5
Гомогенные мультикомпьютерные системы
Построить мультикомпьютерную систему относительно несложно. Главная проблема при этом - обеспечение взаимодействия процессоров между собой.
В гомогенных мультикомпьютерных системах как-правило узлы системы монтируются в большой стойке и соединяются единой высокоскоростной сетью (топология сети может быть как шинной, так и на основе коммутатора).
Как и в случае мультипроцессоров с шинной архитектурой, мультикомпьютеры с шинной архитектурой имеют ограниченную масштабируемость.
В коммутируемых мультикомпьютерах сообщения, передаваемые от процессора к процессору маршрутизируются в соединительной сети.
Существует множество топологий, например, квадратные решетки и гиперкубы:
Рисунок 6
Коммутируемые мультикомпьютерные системы могут быть очень разнообразны. На одном конце спектра лежат процессоры с массовым параллелизмом (Massively Parallel Processors, MPP) - гигантские суперкомпьютеры содержащие сотни тысяч процессоров и использующие специально-разработанные сверх-высокоскоростные сети. На другом конце спектра обнаруживаются кластеры рабочих станций (Clusters of Workstations, COW), основу которых составляют стандартные персональные компьютеры соединенные посредством коммерческих коммуникационных компонент.
Гетерогенные мультикомпьютерные системы
Данный тип систем является самым распространенным в современном парке распределенных систем. Компьютеры, входящие в состав системы могут быть крайне разнообразны. Также неоднородной может быть и соединяющая их сеть. Часто гетерогенные системы строятся на основе уже существующих сетей и каналов передачи данных.[17]
В отличие от мультипроцессоров и гомогенных мультикомпьютеров многие крупномасштабные мультикомпьютерные системы нуждаются в глобальном подходе. Это означает, что приложение не может расчитывать на то, что ему всегда будет доступна определенная производительность или определенные службы. В связи с этим создание приложений для гетерогенных мультикомпьютерных систем требует использования специального програмного обеспечения, обеспечивающего нужный уровень проздачности для разработчика приложений.
2.2 Программные средства распределенных систем
Программно распределенные системы очень похожи на традиционные операционные системы. Прежде всего они работают как менеджеры ресурсов существующего аппаратного обеспечения, помогающие множеству пользователей и процессов совместно исползховать процессоры, память, перефирийные устройства, сеть и данные всех видов. Во-вторых, распределенная системы скрывает сложность и гетерогенную природу аппаратного обеспечения, на базе которого она построена, предоставляя виртуальную машину для выполнения приложений.
Операционные системы для распределенных компьютеров можно подразделить на:
- сильно связанные - операционная система старается работать с единым глобальным представлением ресурсов, которыми она управляет;
- слабо связанные - представляются как набор операционных систем, каждая из которых работает на своем компьютере, которые, однако функционируют совместно, делая собственные службы доступными другим.
Сильно-связанные операционные системы обычно называют распределенными операционными системами и чаще всего используют для управления мультипроцессорами или гомогенными мультикомпьютерами.
Слабосвязанные операционные системы в свою очередь называют сетевыми операционными системами и используют для управления гетерогенными мультикомпьютерами. Как правило в купе с сетевой операционной системой частью распределенной системыв являются системы промужеточного уровня (middleware).
Распределенные операционные системы
Существует два типа распределенных операционных систем:
- мультипроцессорная операционная система - управляет ресурсами мультипроцессора;
- мультикомпьютерная операционная система - разрабатывается для гомогенных мультикомпьютеров.
Операционные системы для однопроцессорных компьютеров
Традиционно операционные системы строились для управления компьютерами с одним процессором. Основной задачей таких операционных систем была организация легкого доступа пользователей и призожений к разделяемым устройствам - процессору, памяти, дискам и перефирийным устройствам. Для приложения это выглядит так, словно эти ресурсы находатся в его полном распоряжении. В этом смысле говорят, что операционная система реализует виртуальную машину предоставляя приложениям средства многозадачности. Важно тут то, что приложения как-бы отделены друг от друга - например приложения A не может изменить данные приложения B просто обратившись в ту область памяти, где эти данные хранятся. Также важно то, что приложения могут использовать предоставленные их ресурсы только так, как это предписано операционной системой. Например приложениям обычно запрещено копировать данные напрямую в сетевой интерфейс - нужно использовать специальный API операционной системы.
Следовательно операционная система должна полностью контролировать распределение и использование аппаратных ресурсов. Поэтому большинство процессоров поддерживают как минимум 2 режима работы:
- режим ядра (kernel mode) - доступны для выполнения все инструкции процессора, доступна вся имеющаяся память и регистры;
- пользовательский режим (user mode) - доступ к регистрам и памяти ограничен, запрещены к исполнению некоторые инструкции процессора.
На время выполнения кода операционной системы процессор переключается в режим ядра. Единственный способ перейти из пользовательского режима в режим ядра - сделать системный вызов - одну из базовых служб предоставляемых операционной системой, полностью контролируемую ей.