Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Современные технологии разработки распределенных вычислительных систем. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
1 Мб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра автоматизированных систем управления

О.А. НАЗАРКИН, В.А. АЛЕКСЕЕВ

СОВРЕМЕННЫЕ ТЕХНОЛОГИИ РАЗРАБОТКИ РАСПРЕДЕЛЕННЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ

УЧЕБНОЕ ПОСОБИЕ

Липецк Липецкий государственный технический университет

2017

УДК 004.75, 004.773 H191

Рецензенты:

кафедра информатики, информационных технологий и защиты информации ФГБОУ ВО «Липецкий государственный педагогический университет имени П.П. Семенова-Тян-Шанского»;

старший преподаватель кафедры информатики, математики и общегуманитарных наук Липецкого филиала ФГОБУ ВО

«Финансовый университет при Правительстве Российской Федерации», канд. физ.-мат. наук И.В. Черпаков

Назаркин, О.А.

H191 Современные технологии разработки распределенных вычислительных систем [Текст]: учебное пособие / О.А. Назаркин, В.А. Алексеев. – Липецк : Изд-во Липецкого государственного технического университета, 2017. – 66 с.

ISBN 978-5-88247-840-6

Учебное пособие по дисциплине «Параллельное и распределенное программирование» посвящено вопросам синтеза системотехнических решений и выбора платформы реализации распределенных вычислительных систем. Рассмотрена платформа NodeJS, сервис PubNub, облачная база данных Firebase Realtime Database. Материал пособия направлен на получение навыков разработки программного обеспечения распределенных систем с использованием современных технологий.

Предназначено для студентов, обучающихся в магистратуре по направлениям «Информатика и вычислительная техника», «Прикладная математика», а также студентов других направлений подготовки, осваивающих программирование распределенных вычислительных систем.

УДК 004.75, 004.773

ISBN 978-5-88247-840-6

© ФГБОУ ВО «Липецкий

 

государственный технический

 

университет», 2017

 

Содержание

 

Введение ...................................................................................................................

4

1.

Методика синтеза структуры и алгоритмов вычислительной системы ............

5

 

1.1. Принципы структурной декомпозиции........................................................

5

 

1.2. Аспекты организации распределенных вычислительных систем ..............

7

2.

Основные конструктивные элементы и решения распределенных

 

 

вычислительных систем ..................................................................................

10

 

2.1. Тип реестра узлов-исполнителей ...............................................................

10

 

2.2. Способы активации прикладного кода ......................................................

12

 

2.3. Развертывание прикладного программного обеспечения

 

 

распределенных систем .............................................................................

14

 

2.4. Распределенные системы с активными сообщениями .............................

15

3.

Распределенные вычислительные системы на платформе NodeJS .................

17

 

3.1. Общие сведения о платформе NodeJS .......................................................

17

 

3.2. Установка NodeJS и NPM...........................................................................

18

 

3.3. Использование NodeJS Cluster для организации

 

 

параллельных вычислений ..........................................................................

19

 

3.4. Использование сетевых хранилищ типа “ключ-значение”

 

 

для организации обмена данными в распределенной среде .....................

23

4.

Сервис PubNub – глобальная программируемая

 

 

коммуникационная платформа (Programmable Network)...............................

33

5.

Firebase Realtime Database – облачная база данных

 

 

от корпорации Google ......................................................................................

41

6.

Реализация распределенной вычислительной системы

 

 

с активными сообщениями ..............................................................................

48

7.

Задания к лабораторному практикуму..............................................................

61

Заключение .............................................................................................................

64

Библиографический список ...................................................................................

65

 

3

 

Введение

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

доставки и синхронизации информации в многопользовательских системах, а

также построение гибких сетей обмена сообщениями для реализации различных прикладных алгоритмов. В рамках разработки распределенных систем сочетаются аспекты параллельных вычислений и сетевых коммуникаций.

В настоящем пособии рассматриваются оба этих аспекта. При этом авторами предпринята попытка систематизации различных подходов к параллельной декомпозиции вычислительных задач, построению структур данных и моделей управления, применяемых в распределенных системах, с

акцентами на особенностях рассматриваемого класса программных систем.

Наряду с теоретическими обобщениями важное внимание уделяется практическим вопросам реализации распределенных вычислений на основе современных программных технологий и платформ.

Среди перспективных технологий, значительно упрощающих разработку распределенных вычислительных систем, можно выделить среду исполнения на основе языка JavaScript, сочетающую в себе кроссплатформенность,

высокую производительность, широкий спектр свободно распространяемого программного обеспечения, доступного для повторного использования в проектах любого уровня, всестороннюю поддержку со стороны крупных компаний – лидеров в области IT-индустрии. В пособии рассмотрены практические вопросы использования платформы NodeJS – серверной среды исполнения JavaScript – для организации высокопроизводительных параллельных и распределенных вычислений, а также набирающие популярность технологии и средства реализации так называемых бессерверных систем.

4

1. Методика синтеза структуры и алгоритмов вычислительной системы

1.1. Принципы структурной декомпозиции

Структура распределенной вычислительной системы может быть представлена ориентированным графом, в котором узлам соответствуют локализованные логические процессоры, а дугам – логические каналы обмена сообщениями. Локализованный логический процессор – это отдельный компьютер, подключенный к сети. Наличие (отсутствие) логического канала обмена сообщениями между узлами A и B означает принципиальную возможность (невозможность) доставки сообщения из A в B. Подключение всех узлов распределенной системы к одной и той же компьютерной сети

(например, глобальной сети Интернет) не обязательно предполагает возможность произвольного обмена сообщениями между любыми узлами на уровне прикладных алгоритмов.

Прикладные алгоритмы распределенной вычислительной системы используют принцип декомпозиции полного объема действий по обработке данных на элементы в двух независимых направлениях, которые можно условно обозначить как вертикальное и горизонтальное. Вертикальному направлению соответствуют фазы алгоритма, горизонтальному – распределение отдельных элементов обработки между различными логическими процессорами. Как правило, распределенные системы используют параллельную обработку, то есть, на одной горизонтальной линии (одна фаза алгоритма) присутствуют элементы, которые обрабатываются разными процессорами.

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

5

разделение обязанностей: один или несколько логических процессоров выполняют распределение заданий и сбор результатов (мастер-узлы),

остальные процессоры непосредственно выполняют элементарные действия по обработке данных (узлы-исполнители).

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

Такая схема может отличаться от организации параллельных вычислительных систем, не являющихся распределенными (например, SMP-

систем). Ключевое отличие состоит в том, что в SMP-системах параллельная декомпозиция обычно определена жестко (по числу физических процессоров), а

функция-ядро выполняет сразу несколько фаз алгоритма, обращаясь к общей памяти и пользуясь барьерами для разграничения фаз, а также средствами синхронизации доступа к разделяемым ресурсам. Этот тип алгоритма можно обозначить знаком Ж, символизирующим несколько “вертикальных” потоков-

ядер с “горизонтальной” синхронизацией. Ж-алгоритмы эффективны на тех системах, где запуск функций-ядер приносит более высокие накладные расходы, чем синхронизация доступа к общей памяти.

В распределенных системах состав узлов-исполнителей редко является фиксированным, общей оперативной памяти нет по определению, а

горизонтальная синхронизация приводит к высоким накладным расходам,

поскольку из-за отсутствия общей памяти любая ее реализация вынуждена

6

использовать интенсивный обмен сообщениями. Все эти факторы приводят к необходимости трансформации Ж-алгоритмов в E-алгоритмы.

В распределенных системах можно также организовать вспомогательные алгоритмы, которые удобно обозначить знаком 7. Здесь по окончании параллельной обработки на одной из фаз следует серия последовательных

“вертикальных” шагов со сменой активного узла и передачей промежуточных данных по цепочке. Это позволяет совмещать сбор результатов параллельной обработки с выполнением других алгоритмических действий. Обычно по такой схеме организуется аккумуляция данных (преобразование с накоплением) или композиция параметризованных функций fn ( fn-1 ( ... f1 ( x, a1 ), a2 )…, an ), здесь ai – параллельно вычисляемые параметры. 7-алгоритмы эффективны в распределенных системах с быстрым локальным кэшированием результатов параллельной обработки. (Очевидно, что в системах с общей памятью

7-алгоритмы не имеют смысла, если только не рассматриваются вопросы оптимизации использования аппаратного кэширования.)

1.2. Аспекты организации распределенных вычислительных систем

Перечень основных ортогональных аспектов организации распределенных вычислительных систем с двумя типами узлов (мастер и исполнитель):

-тип реестра узлов-исполнителей:

1)фиксированный;

2)с динамической регистрацией;

3)неопределенный;

-тип узлов:

1)серверы со специализированным прикладным ПО;

2)универсальная программируемая облачная среда с реакцией на события

(бессерверная среда, [3, 6, 7]);

7

-мониторинг состояния узлов-исполнителей:

1)надежный мониторинг в реальном времени;

2)периодический опрос по инициативе мастер-узла;

3)отсутствует;

- возможности мастер-алгоритма при разрыве сетевого соединения с конкретным узлом-исполнителем:

1) поддержка предварительного определения сценария действий мастер-

узла при разрыве связи с узлом-исполнителем;

2)упрощенная стандартная фиксация статуса “offline”;

3)разрыв связи с исполнителем игнорируется мастер-узлом;

-тип адресации входных данных:

1)ключ в центральном репозитории;

2)глобальный адрес – “download URI”;

3)локальный ключ;

4)адресация данных не требуется – данные находятся непосредственно внутри задания;

-тип адресации результатов:

1)ключ в центральном репозитории;

2)глобальный адрес – “upload URI”;

3)локальное кэширование до востребования мастер-узлом;

-тип репозитория данных:

1)файловая система;

2)структурированная БД;

3)хранилище “ключ-значение”;

-наличие периода актуальности данных и заданий:

1)автоматическое удаление неактуальных ресурсов средствами хранилища;

2)контроль за актуальностью ресурсов со стороны мастер-узла;

8

-возможности обмена сообщениями:

1)доступен произвольный обмен между узлами – “peer-to-peer”;

2)узлам доступен обмен только с центральным сервером или облачной

средой;

-возможности реакции на внешние асинхронные события:

1)узлы получают push-оповещения;

2)узлы запрашивают информацию об актуальных событиях за период;

-возможность вызова узлом-исполнителем процедур на мастер-узле:

1)возможен вызов в реальном времени;

2)возможна отправка запроса в очередь;

3)отсутствует;

-синхронизация распределенных ресурсов:

1)отсутствует;

2)обеспечивается хранилищем данных;

3)обеспечивается мастер-узлом;

4)обеспечивается консенсусом;

-сцепление прикладного программного кода с узлом-исполнителем:

1) сильное – развертывается

реализация

конкретного

алгоритма

прикладной обработки данных;

2)слабое – развертывается универсальный фреймворк с последующим внедрением конкретных прикладных программ;

3)сопровождающее (ультраслабое) – с каждым заданием на обработку данных ассоциируется собственный программный блок, который внедряется на исполнительный узел только на время обработки и удаляется по ее окончании.

-тип прикладного программного кода:

1)инструкции аппаратной платформы;

2)машинно-независимый байткод;

3)модули NodeJS;

4)скрипты браузера;

9

-диспетчеризация заданий:

1)инициатива исполнителя – конкурентная выборка из очереди;

2)инициатива мастера – адекватная загрузка свободных исполнителей;

-стратегия управления распределением заданий между исполнителями:

1)генерация мастер-узлом эксклюзивных заданий для каждого конкретного исполнителя;

2)генерация узлом-исполнителем псевдослучайных индексов для равномерной выборки из пула заданий;

-стратегия обеспечения надежного сбора результатов:

1)повторная выдача заданий на обработку недостающих элементов;

2)дублирование заданий на старте обработки с целью статистического повышения надежности;

-развертывание прикладных программ на узлах-исполнителях:

1)требуется администрирование процесса установки и запуска;

2)требуется только загрузка файлов и запуск процессов с обычными правами;

3)развертывание не требуется – загрузка и запуск прикладного кода контролируется доверенными процессами типа веб-браузера;

-способ запуска прикладного программного кода на узлах-исполнителях:

1)запуск по инициативе пользователя;

2)при запуске не требуется контроль пользователя.

2.Основные конструктивные элементы

ирешения распределенных вычислительных систем

2.1.Тип реестра узлов-исполнителей

Важной составляющей частью распределенного алгоритма является процедура выдачи заданий узлам-исполнителям. Выдавать задания можно либо

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]