Файл: Распределенная технология обработки информации (История развития распределенных вычислительных систем).pdf
Добавлен: 29.03.2023
Просмотров: 296
Скачиваний: 2
Несмотря на существенный прогресс в компьютерной технике за последние 60 лет, устройство компьютеров по-прежнему умещается в этих рамках. Несмотря на то, что компьютеры стали мощнее, а области их применения стали столь велики, что их невозможно было даже представить в конце второй мировой войны, основные идеи, заложенные фон Нейманом и его коллегами, среди которых были Алан Тьюринг, Энрико Ферми и другие видные ученые, пригодны и сегодня [[13]].
Компьютеры, входящие в вычислительную сеть, могут разнесены на значительные расстояния друг от друга. Они могут находиться на разных континентах, в одном здании или же в одной комнате. Отсюда вытекают следующие требования к распределенным вычислительным системам:
Параллельность выполнения. В группе нескольких компьютеров программы выполняются параллельно и независимо на каждой машине. Производительность системы в целом может быть увеличена добавлением новых узлом к сети. При этом особую важность приобретает логика координации параллельно выполняющихся программ при доступе к разделяемым ресурсам.
Отсутствие общих физических часов. Когда программам необходимо скоординировать действия они договариваются только через обмен сообщениями. Взаимодействие в пределах одной машины обычно тесно связано с понятием времени, когда данное событие произошло или команда была отправлена. Но в случае взаимодействия по вычислительной сети такой метод наталкивается на препятствие в виде точности, с которой возможно синхронизировать время на машинах, принадлежащих данной системе. Это прямое следствие факта, что взаимодействие внутри распределенной системы возможно только путем отправки асинхронных сообщений по коммуникационной сети [[14]].
Отсутствие общей памяти. Ключевая особенность распределенных систем, которая требует использования сообщений для обмена информацией. Эта особенность так же ведет к отсутствию общих часов. В то же время существуют различные методы для организации абстракции общего адресного пространства.
Пространственная распределённость. Возможны различные конфигурации распределенных систем. Например, соединенных посредством WAN (международной сети) или LAN (локальной вычислительной сети) – NOW/COW сеть/кластер рабочих станций.
Автономность и гетерогенность. Узлы распределенной сети слабо связаны, работают на разных скоростях и могут управляться разными операционными системами. Обычно они взаимодействуют друг с другом путем предоставления определенных сервисов или совместного решения поставленной задачи [[15]].
Независимость отказов. В практически любой компьютерной системе может возникнуть неисправность. Это является обязанностью системного архитектора спланировать ответы на случаи возможных отказов в работе. В случае распределенных систем появляются новые типы отказов. Ошибки в работе сети могут привести к изоляции отдельных узлов от остальной системы при том, что программа на этих узлах все еще может корректно выполняться. При это она может и не знать, что сетевое соединение не доступно или работает в нештатном режиме. С другой стороны, непредвиденное выключение отдельного компьютера или завершение запущенной на нем программы может остаться незамеченным для остальных компонентов системы в течение некоторого отрезка времени. Любой компонент распределенной системы может отказать независимо при том, что остальная система продолжить исправно работать. Чем больше компонентов входит в систему, тем вероятнее отказ. К примеру, на единичной машине вероятность отказа в течение часа практически нулевая, в то время как в системе из 10000 машин она приближается к 100%. Поэтому для распределенных систем необходимо создавать специальные механизмы разрешения таких ситуаций, предусматривать в программах возможности возникновения описанных проблем и закладывать в алгоритмы способы разрешения [[16]].
Возможность построения распределенных систем еще не означает полезность этого. Современная технология позволяет подключить к персональному компьютеру четыре дисковода. Это возможно, но бессмысленно [[17]]. Далее рассмотрим задачи, решаемые с помощью построения распределенной системы:
Поддержка изначально распределенных вычислений. Во многих типах приложений, таких как, например, перевод денежных средств в банковских системах, или же, например, достижение консенсуса между географически удаленными группами, задача изначально подразумевает распределенные вычисления.
Разделение общих ресурсов. Периферийные устройства (например, принтеры), полные базы данных, специальные библиотеки не могут полностью дублироваться на каждом узле системы, так как это не практично и не эффективно с точки зрения затрат. К тому же ресурсы такого типа не получится разместить на узле, та как он станет узким местом всей системы. Поэтому эти ресурсы распределяют по многим узлам системы.
Предоставление доступа к географически удаленным ресурсам. В некоторых случаях данные не могут быть дублированы на каждом узле из-за их размера или требований безопасности. К примеру, финансовые данные международной корпорации слишком объемисты для дублирования в каждом подразделении, поэтому они хранятся на центральном сервере [[18]].
Улучшенная надежность. Распределенные системы изначально хорошо справляются с возникновением неисправности за счет дублирования ресурсов на различных узлах. Выход из строя всех узлов значительно менее вероятен, чем выход из строя одного узла. Надежность включает несколько аспектов: улучшение доступности, улучшенная целостность данных, повышение устойчивости к отказам. Основным аспектом как правило считается доступность ресурсов. Доступность – это свойство вычислительной системы быть работоспособной тогда, когда это требуется. Важность этого аспекта обусловлена тем. Что если система не работает, то остальные ее достоинства не важны [[19]]. К причинам плохой доступности относят [[20]]:
- Нехватка вычислительных ресурсов
- Незапланированное увеличение нагрузки на систему
- Увеличение количества компонентов системы, которое может привести к непредвиденным взаимодействия внутри системы
- Проблемы во внешних зависимостях системы
- Технический долг (деградация качества программного кода системы)
Доступность измеряется в процентах времени, в течение которого системы была работоспособной за некоторый интервал времени (обычно это месяц или год). Общепринятые в современных проектах обозначения уровней доступности системы задаются количеством девяток [[21]]:
|
Количество девяток |
Доступность |
Простой системы в месяц |
|
2 |
99% |
432 мин |
|
3 |
99.9% |
43 мин |
|
4 |
99.99% |
4 мин |
|
5 |
99.999% |
26 сек |
|
6 |
99.9999% |
2.6 сек |
Для интернет-приложений приемлемым считается уровень трех девяток.
Улучшенное отношение производительность/стоимость. Распределение нагрузки на несколько машин как правило дает лучшие результаты чем использование специализированных высокопроизводительных одиночных машин.
Модульность и взаимозаменяемость. Узлы системы могут быть легко добавлены или заменены при условии, что используется совместимое программное обеспечение [[22]].
Масштабируемость. Масштабируемость – это способность подстраивать количество компонентов системы для достижения максимальной эффективности. Обычно это означает способность обработать больше данных, транзакций, запросов без ухудшения пользовательского опыта от пользования системой. Масштабируемость подразумевает как возможность увеличения емкости, так и ее уменьшения простым и дешевым способом [[23]].
Различают 3 направления масштабирования:
- Обработка большего объема данных. Например, с развитием компании приходится обрабатывать больше клиентских профилей или карточек товаров
- Обработка более высокого уровня параллельности. То есть сколько пользователей одновременно могут использовать приложение.
- Обработка большей интенсивности запросов. Это другое измерение предыдущего пункта – насколько часто отдельный пользователь может обращаться к приложению
Типовые архитектуры распределенных систем:
Remote Procedure Call. Использовался в ранних распределенных системах. Состоит из двух ассиметричных узлов – вызывающего и отвечающего. Вызывающий отправляет сообщение отвечающему с параметрами и ожидает прихода ответа. После выполнения вычислений отвечающий отправляет результат вызывающему, после чего он продолжает выполнение программы. При этом адресация в данной системе задавалась жестко – и вызывающий и отвечающий должны были знать друг друга.
Клиент-Сервер. Логичное улучшение предыдущего механизма. За счет динамической адресации система стала более гибкой. Механизм регистрации серверов предоставил возможность динамического выбора сервера.
Master-Slave (Ведущий–ведомый). Модификация предыдущей архитектуры, при которой инициатива в обмене исходит от одного узла – ведущего. Ведущий раздает задачи ведомым и агрегирует результат.
Peer-to-peer (Равный-равный). Идентичные узлы взаимодействует друг с другом для достижения общей цели. Взаимодействие как правило происходит через широковещательные сообщения или групповую передачу [[24]].
1.3 Масштабирование веб-приложений
Современные интернет-приложения могут быть отнесены к одному из следующих классов [[25]]:
- Традиционные многостраничные сайты. Нажатие по ссылке или кнопке вызывает новый запрос к веб-серверу и полную перезагрузку страницы
- Одностраничные приложения (SPA). Часть бизнес логики и вся логика отображения перенесены в браузер пользователя за счет использования специализированных JavaScript фреймворков. Функции веб-сервера ограничены предоставлением программного интерфейса к данным системы и аспектами безопасности.
- Гибридные приложения. Аналогичен традиционному многостраничному сайту, но с поддержкой частичного обновления страниц через AJAX. Как правило используется для обеспечения правильной индексации сайта в поисковых системах.
Прикладное программное обеспечение (ПО) может быть представлено в виде набора из трех частей, обычно называемых слоями (или уровнями):
- слой (уровень) логики (алгоритмов) представления, или презентационный слой;
- слой (уровень) бизнес-логики (вычислительных и управляющих алгоритмов), или слой прикладной логики;
- слой (уровень) логики доступа к данным, или слой управления ресурсами.
Происхождение термина «слой» связано с моделью, которая рассматривает каждую часть приложения в зависимости от ее положения относительно пользователя: от «переднего слоя» (front-end) – логики представления до «заднего слоя» (back-end) – логики доступа к данным). Одна из функций «среднего слоя» (бизнес-логики) состоит в обеспечении двунаправленного преобразования между структурами данных высокого уровня переднего слоя и низкоуровневыми структурами заднего слоя [[26]].
Важным свойство компонента системы при масштабировании является отсутствие состояния. Отсутствие состояния означает, что сервис, слой или сервер не хранят важных данных. Как следствие сервисы одного типа являются полностью взаимозаменяемыми, что обеспечивает хорошую масштабируемость. Если сервис не хранит каких-либо важных данных, то с точки зрения клиента он идентичен любому другому сервису такого же типа [[27]].
Рассмотрим особенности масштабирования каждого из этих слоев.
Уровень представления. Front-end. Масштабирование на данном уровне включает в себя следующие компоненты [[28]]:
CDN (Content Delivery Network) – Сервис, который предоставляет возможность глобального распространения статичных файлов (изображения, JavaScript, CSS). Как правило используется сторонний специализированный поставщик данного сервиса. В общем работает как дополнительный кэширующий слой между серверов компании и пользователями. При этом значительно снижая нагрузку на инфраструктуру компании и ускоряя загрузку на стороне пользователя [[29]].
DNS (Domain Name Service) – это первый элемент, к которому обращается пользователь, когда желает посетить веб-сайт. Данный сервис выдает клиенту IP-адрес веб-сервера по имени домена. И может предоставлять компании такие дополнительные возможности, как например выдача адреса ближайшего к пользователю веб-сервера или балансировка на группу веб-серверов [[30]].
Балансировщики нагрузки. Распределяют входящие запросы на группу идентичных серверов, тем самым уменьшая нагрузку. Существуют программные и более быстрые аппаратные балансировщики нагрузки.