Учебнопрактическое пособие Владимир 2021
Скачать 7.94 Mb.
|
Владимирский государственный университет Д. А. ГРАДУСОВ А. В. ШУТОВ РАСПРЕДЕЛЕННЫЕ ИНФОРМАЦИОННЫЕ СИСТЕМЫ Учебно-практическое пособие Владимир 2021 Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования «Владимирский государственный университет имени Александра Григорьевича и Николая Григорьевича Столетовых» Д. А. ГРАДУСОВ А. В. ШУТОВ РАСПРЕДЕЛЕННЫЕ ИНФОРМАЦИОНЫЕ СИСТЕМЫ Учебно-практическое пособие Электронное издание Владимир 2021 ISBN 978-5-9984-1303-2 © Градусов Д. А., Шутов А. В., 2021 УДК 004.41 ББК 65с51 Рецензенты: Доктор технических наук, профессор зав. кафедрой информационных систем и программной инженерии Владимирского государственного университета имени Александра Григорьевича и Николая Григорьевича Столетовых И. Е. Жигалов Кандидат экономических наук кредитный инспектор управления кредитования Владимирского отделения № 8611 Публичного акционерного общества Сбербанк России М. В. Ворыханов Градусов, Д. А. Распределенные информационные системы : учеб.- практ. пособие / Д. А. Градусов, А. В. Шутов ; Владим. гос. ун-т им. А. Г. и Н. Г. Столетовых. – Владимир : Изд-во ВлГУ, 2021. 386 с. – ISBN 978-5- 9984-1303-2. – Электрон. дан. (7,53 Мб). – 1 электрон. опт. диск (DVD- ROM). – Систем. требования: Intel от 1,3 ГГц ; Windows XP/7/8/10 ; Adobe Reader ; дисковод DVD-ROM. – Загл. с титул. экрана. Рассмотрены общие принципы проектирования распределенных информацион- ных систем, технические средства построения распределенных систем (в первую оче- редь технологии компьютерных сетей), программное обеспечение для построения рас- пределенных систем, включая распределенные системы управления базами данных, а также дан обзор современных технологий распределенного программирования. Приве- дены лабораторные работы по построению распределенных баз данных в СУБД MS SQL Server и MongoDB. Предназначено для студентов вузов направления подготовки 09.04.03 «При- кладная информатика» и может использоваться при проведении занятий по дисциплине «Корпоративные распределенные информационные системы. Рекомендовано для формирования профессиональных компетенций в соответ- ствии с ФГОС ВО. Ил. 89. Табл. 14. Библиогр.: 17 назв. ISBN ISBN 978-5-9984-1303-2 © Градусов Д. А., Шутов А. В., 2021 3 ОГЛАВЛЕНИЕ ВВЕДЕНИЕ ................................................................................................. 5 Глава 1. ПРИНЦИПЫ ПОСТРОЕНИЯ РАСПРЕДЕЛЕННЫХ СИСТЕМ ОБРАБОТКИ ИНФОРМАЦИИ ............................................... 6 1.1. Понятие распределенной информационной системы ................... 6 1.2. Базовая модель и метод «клиент-сервер» .................................... 24 1.3. Модификации модели и метода «клиент-сервер»....................... 27 1.4. Программы-агенты и модель «клиент-агент-сервер» ................. 31 1.5. Технологии одноранговых сетей .................................................. 36 1.6. Архитектура грид............................................................................ 41 1.7. Облачные вычисления .................................................................... 46 1.8. Особенности управления в распределенных информационных системах .................................................................................................. 58 Глава 2. ОРГАНИЗАЦИЯ ПРОЦЕССОВ ПЕРЕДАЧИ ДАННЫХ В РАСПРЕДЕЛЕННЫХ ИНФОРМАЦИОННЫХ СЕТЯХ ..................... 73 2.1. Информационные сети и системы ................................................ 73 2.2. Архитектура локальных сетей типа Ethernet ............................... 78 2.3. Технологии и архитектура современных беспроводных сетей . 83 2.4. Магистральные сети передачи данных ...................................... 138 Глава 3. ИНФОРМАЦИОННЫЕ РЕСУРСЫ РАСПРЕДЕЛЕННЫХ ИНФОРМАЦИОННЫХ СИСТЕМ ....................................................... 165 3.1. Системы управления базами данных ......................................... 165 3.2. Системы распределенных вычислений ...................................... 180 3.3. Особенности распределенных баз данных и СУБД .................. 184 3.4. Архитектура центра обработки данных ..................................... 208 3.5. Репликация баз данных ................................................................ 211 Глава 4. СЕРВЕРНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ .............. 218 4.1. Общие понятия и принципы построения серверного ............... 218 4 программного обеспечения ................................................................ 218 4.2. Средства для проектирования и разработки серверного программного обеспечения ................................................................ 234 4.3. Принцип построения и работы распределенного приложения 240 Глава 5. ТЕХНОЛОГИЯ ПОСТРОЕНИЯ РАСПРЕДЕЛЕННЫХ ИНФОРМАЦИОННЫХ СИСТЕМ ....................................................... 244 5.1. Технология COM/DCOM ............................................................. 244 5.2. Технология CORBA ...................................................................... 251 5.3.Технология inetd ............................................................................ 272 5.4. Технология RPC ............................................................................ 278 5.5. Сервис-ориентированная архитектура ..................................... 288 Глава 6. ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ РЕПЛИКАЦИИ В СОВРЕМЕННЫХ СУБД........................................................................ 299 6.1. Репликация в MS SQL Server ...................................................... 299 6.2. Репликация в СУБД MongoDB.................................................... 321 ТЕСТЫ ..................................................................................................... 347 Глава 1 ................................................................................................... 347 Глава 2 ................................................................................................... 354 Глава 3 ................................................................................................... 361 Глава 4 ................................................................................................... 369 Глава 5 ................................................................................................... 374 ЗАКЛЮЧЕНИЕ ....................................................................................... 382 БИБЛИОГРАФИЧЕСКИЙ СПИСОК ................................................... 383 5 ВВЕДЕНИЕ Наличие информационной системы является непременным тре- бованием к любой современной организации. При этом следует учи- тывать, что трансформация бизнеса приводит к изменениям в исполь- зуемых информационных технологиях. В частности, одной из глав- ных тенденций становится резкое увеличение объема используемых данных совместно с увеличением требований к оперативности их об- работки и надежности хранения. Одним из ключевых путей решения возникающих проблем становится использование сетевых информа- ционных технологий, в первую очередь клиент-серверных и распре- деленных информационных систем. Данным технологиям и посвяще- но учебное пособие. В пособии рассмотрены общие принципы проектирования рас- пределенных информационных систем, технические средства постро- ения распределенных систем (в первую очередь технологии компью- терных сетей), программное обеспечение для построения распреде- ленных систем, включая распределенные системы управления базами данных, а также дан обзор современных технологий распределенного программирования. Приведены лабораторные работы по построению распределен- ных баз данных в СУБД MS SQL Server и MongoDB. 6 Глава 1. ПРИНЦИПЫ ПОСТРОЕНИЯ РАСПРЕДЕЛЕННЫХ СИСТЕМ ОБРАБОТКИ ИНФОРМАЦИИ 1.1. Понятие распределенной информационной системы Информационные технологии – это процессы, использующие совокупность средств и методов сбора, обработки и передачи данных для получения информации нового качества о состоянии объекта, процесса или явления (нового информационного продукта). Информационная система (база) – это организационно- упорядоченная взаимосвязанная совокупность средств и методов ин- формационных технологий, используемых для хранения, обработки и выдачи информации в интересах достижения поставленной цели. Информационные системы создаются для обеспечения взаимодей- ствия информационных процессов в природе и обществе, и связанно- го с этим взаимодействием обмена какими-либо сигналами или све- дениями в рамках организационно-технической системы. Сами же информационные процессы (ИП) представляют собой совокупность взаимосвязанных и взаимообусловленных процессов выявления, отбора, формирования из совокупности сведений инфор- мации, ее ввода в техническую систему, анализа, обработки, хранения и передачи. В качестве основных технических средств обработки и передачи информации в информационных системах выступают компьютеры и средства связи. Под распределенной информационной системой (базой) пони- мается неограниченное количество баз данных, дистанционно отда- ленных друг от друга, функционирующих и осуществляющих обмен данными по единым правилам, определенным централизованно для всех баз данных, входящих в распределенную информационную базу. Приведем также несколько альтернативных определений рас- пределенных информационных систем. 7 Распределенная информационная система – информацион- ная система, объекты данных и/или процессы которой физически распределяются на две или более компьютерные системы. Распределенная система – это набор независимых компью- теров, представляющийся их пользователям единой объединенной системой. Распределенная система – это такая система, в которой взаимодействие и синхронизация программных компонентов, выпол- няемых на независимых сетевых компьютерах, осуществляется по- средством передачи сообщений. Распределенная система – набор независимых компью- теров, не имеющих общей совместно используемой памяти и общего единого времени (таймера) и взаимодействующих через коммуника- ционную сеть посредством передачи сообщений, где каждый ком- пьютер использует свою собственную оперативную память и на котором выполняется отдельный экземпляр своей операционной системы. однако эти операционные системы функционируют сов- местно, предоставляя свои службы друг другу для решения общей за- дачи. Термин "распределенная система" описывает широкий спектр систем от слабо связанных многомашинных комплексов, представляемых, например, набором персональных компьютеров, объединенных в сеть, до сильно связанных многопроцессорных си- стем. Отметим также шуточное определение распределенной инфор- мационной системы, принадлежащее американскому ученому в обла- сти теории вычислительных систем Лесли Лэмпорту. Согласно его утверждению, вы понимаете, что пользуетесь распределенной систе- мой, когда поломка компьютера, о существовании которого вы даже не подозревали, приводит к останову всей системы, а для вас – к не- возможности выполнить свою работу. Большинство современных распределенных информационных систем обладают следующими общими признаками. 8 Отсутствие единого времени для компонентов распреде- ленной системы. Это важное предположение для решения задач про- ектирования и построения распределенных систем. Оно характеризу- ет территориальное распределение компонентов системы, а именно процессоров, входящих в ее состав, но что более важно, из него сле- дует отсутствие синхронности в их работе. Отсутствие общей памяти. Это ключевая характеристика, из которой следует необходимость обмена сообщениями между про- граммными компонентами распределенной системы для их взаимо- действия и синхронизации. Кроме того, эта характеристика подразу- мевает отсутствие единого для всех процессоров физического време- ни Географическое распределение. Вполне естественно, что чем сильнее удалены процессоры друг от друга территориально, тем понятнее, что система будет рассматриваться как распределенная. Однако совсем не обязательно, чтобы компьютеры были объединены в глобальную вычислительную сеть (ГВС). В последнее время кла- стер из обыкновенных рабочих станций, соединенных с помощью ло- кальной вычислительной сети (ЛВС), также все чаще рассматривается как небольшая распределенная система. При этом все оборудование такой распределенной системы может находиться в одном или не- скольких соседних зданиях. Подобные кластеры становятся все по- пулярнее из-за относительно низкой стоимости входящих в нее ком- понентов с одной стороны и неплохой производительности – с дру- гой. Независимость и гетерогенность. Компьютеры, входящие в состав распределенной системы слабо связаны в том смысле, что они могут иметь различный состав и различную производительность и, следовательно, обеспечивать различное время выполнения иден- тичных задач. Обычно они не являются частями одной специализиро- ванной системы, но функционируют совместно, предоставляя свои службы друг другу для выполнения общей задачи. Более того, в об- щем случае на компьютерах, составляющих распределенную систему, могут выполняться различные операционные системы. 9 За последние несколько лет распределенные системы станови- лись все более популярными и их роль только возрастала. Среди ос- новных причин роста их значимости можно выделить следующие: Географически распределенная вычислительная среда. Се- годня в большинстве случаев сама вычислительная среда по своей природе представляет собой территориально распределенную систе- му. В качестве примера можно привести банковскую сеть. Каждый банк обслуживает счета своих клиентов и обрабатывает операции с ними. В случае же перевода денег из одного банка в другой требует- ся осуществление межбанковской транзакции и взаимодействие си- стем банков друг с другом. Другим примером географически распре- деленной вычислительной среды является всем хорошо знакомая сеть Интернет. Требование увеличения производительности вычислений. Быстродействие традиционных однопроцессорных систем стреми- тельно приближается к своему пределу. Различные архитектуры (та- кие как суперскалярная архитектура, матричные и векторные процес- соры, однокристальные многопроцессорные системы) призваны уве- личивать производительность вычислительных систем за счет раз- личных механизмов параллельного исполнения команд. Однако все эти приемы способны повысить производительность максимум в де- сятки раз по сравнения с классическими последовательными решени- ями. Кроме того, масштабируемость подобных подходов оставляет желать лучшего. Чтобы повысить производительность в сотни или тысячи раз и при этом обеспечивать хорошую масштабируемость ре- шения необходимо свести воедино многочисленные процессоры и обеспечить их эффективное взаимодействие. Этот принцип реализу- ется в виде больших многопроцессорных систем и многомашинных комплексов. Совместное использование ресурсов. Важной целью со- здания и использования распределенных систем является предостав- ление пользователям (и приложениям) доступа к удаленным ресурсам и обеспечение их совместного использования. В данной формули- ровке термин ресурс относится как к компонентам аппаратного обес- 10 печения вычислительной системы, так и к программным абстракци- ям, с которыми работает распределенная система. Например, пользо- ватель компьютера 1 может использовать дисковое пространство компьютера 2 для хранения своих файлов. Или приложение А может использовать свободную вычислительную мощность нескольких компьютеров для ускорения собственных расчетов. Распределенные базы данных и распределенные системы объектов могут быть отлич- ным примером совместного использования программных компонен- тов, когда соответствующие программные абстракции распределены по нескольким компьютерам и согласованно обслуживаются несколь- кими процессами, образующими распределенную систему. Отказоустойчивость. В традиционных «нераспределен- ных" вычислительных системах, построенных на базе единичного компьютера (возможно высокопроизводительного), выход из строя одного из его компонентов обычно приводит к неработоспособности всей системы. Такой сбой в одном или нескольких компонентах си- стемы называют частичным отказом, если он не затрагивает другие компоненты. Характерной чертой распределенных систем, которая отличает их от единичных компьютеров, является устойчивость к ча- стичным отказам, т.е. система продолжает функционировать после частичных отказов, правда, незначительно снижая при этом общую производительность. Подобная возможность достигается за счет из- быточности, когда в систему добавляется дополнительное оборудова- ние (аппаратная избыточность) или процессы (программная избыточ- ность), которые делают возможной правильное функционирование системы при неработоспособности или некорректной работе некото- рых из ее компонентов. В этом случае распределенная система пыта- ется скрывать факты отказов или ошибок в одних процессах от дру- гих процессов. Эффективная распределенная система должна обладать следу- ющими свойствами: прозрачность, открытость, безопасность, мас- штабирование. Однако стоит отметить, что, несмотря на кажущуюся простоту и очевидность перечисленных свойств, их реализация на практике часто представляет собой непростую задачу. 11 Прозрачность Под прозрачностью распределенной системы понимают ее спо- собность скрывать свою распределенную природу, а именно, распре- деление процессов и ресурсов по множеству компьютеров, и пред- ставляться для пользователей и разработчиков приложений в виде единой централизованной компьютерной системы. Стандарты эта- лонной модели для распределенной обработки в открытых системах Reference Model for Open Distributed Processing (RM-ODP) определяют несколько типов прозрачности. Наибо- лее важные из них перечислены ниже. Прозрачность доступа. Вне зависимости от способов до- ступа к ресурсам и их внутреннего представления, обращения к ло- кальным и удаленным ресурсам осуществляется одинаковым обра- зом. На базовом уровне скрывается разница архитектур вычисли- тельных платформ, но, что более важно, достигается соглашение о том, как ресурсы разнородных машин, будут представляться пользо- вателям распределенной системы единым образом. В качестве приме- ра можно привести прикладной программный интерфейс (англ. application programming interface, API) для работы с файлами, храня- щимися на множестве компьютеров различных архитектур, который предоставляет одинаковые вызовы операций как с локальными, так и с удаленными файлами. Прозрачность местоположения. Позволяет обращаться к ресурсам без знания их физического местоположения. В этом случае имя запрашиваемого ресурса не должно давать никакого представле- ния о том, где ресурс расположен. Поэтому важную роль для обеспе- чения прозрачности местоположения играет именование ресурсов. Например, чтобы отправить электронное сообщение на адрес user@company.com не требуется знать физического местоположения получателя, его почтового ящика или почтового сервера. В свою оче- редь обращение к файлу \\server\foo подразумевает знание имени сер- 12 вера, на котором он расположен, а значит, не является полностью прозрачным с точки зрения местоположения. Прозрачность перемещения. Перемещение ресурса или процесса в другое физическое местоположение остается незаметным для пользователя распределенной системы. Здесь стоит отметить, что выполнение требования прозрачности местоположения не гарантиру- ет прозрачности перемещения. Другими словами, если распределен- ная система скрывает местоположение ресурса, это не означает, что его можно сменить незаметно для пользователя. Например, распре- деленные файловые системы позволяют монтировать файловые си- стемы удаленных компьютеров в локальное пространство имен кли- ента, предоставляя единое дерево каталогов и тем самым обеспечивая прозрачность местоположения. Однако если файлы на удаленных компьютерах будут перемещены в другое место, в большей части распределенных файловых систем они станут недоступны для поль- зователя. Прозрачность смены местоположения. Более строгое по отношению к предыдущему требование скрыть факт перемещения ресурса вовремя его использования. Примером могут служить мо- бильные пользователи, использующие сотовые телефоны. В этом случае, если рассматривать вызывающего абонента в качестве поль- зователя распределенной системы, а вызываемого – в качестве ее ре- сурса, то система будет прозрачной с точки зрения смены местопо- ложения. Действительно, перемещение «ресурса» из соты в соту в процессе разговора остается незаметным для звонящего. Прозрачность репликации. Если для повышения доступно- сти или увеличения производительности используется несколько ко- пий ресурса (реплик), этот факт остается скрытым от пользователя, и он полагает, что в системе присутствует только один экземпляр ре- сурса. Для обеспечения прозрачности репликации необходимо, что- бы все реплики имели одно и то же имя, очевидно, не зависящее от местоположения копии ресурса. Таким образом, системы, которые обеспечивают прозрачность репликации, также должны поддержи- вать и прозрачность местоположения. 13 Прозрачность одновременного доступа. Позволяет не- скольким пользователям (конкурирующим процессам) одновременно выполнять операции над общим, совместно используемым ресурсом без взаимного влияния друг на друга. Иначе говоря, скрывается факт использования ресурса другими пользователями (процессами). Стоит отметить, что сам ресурс должен оставаться в непротиворечивом со- стоянии, что может достигаться, например, с помощью механизма блокировок, когда пользователи (процессы) по очереди получают ис- ключительные права на запрашиваемый ресурс. Прозрачность отказов. Подразумевается, что система должна пытаться скрывать частичные отказы, позволяя пользовате- лям и приложениям выполнить свою работу вне зависимости от сбоев в аппаратных или программных компонентах распределенной систе- мы, а также скрывать факт их последующего восстановления. В свя- зи с тем, что любой процесс, компьютер или сетевое соединение мо- гут отказывать независимо от других в произвольные моменты вре- мени, каждый компонент распределенной системы должен быть готов к сбоям в других компонентах и обрабатывать подобные ситуации соответствующим образом. Прозрачность сохранности, маскирующая реальную (диск) или виртуальную (оперативная память) сохранность ресурсов. Так, например, многие объектно-ориентированные базы данных предо- ставляют возможность непосредственного вызова методов для сохра- ненных объектов. За сценой в этот момент происходит следующее: сервер баз данных сначала копирует состояние объекта с диска в опе- ративную память, затем выполняет операцию и, наконец, записывает состояние на устройство длительного хранения. Пользователь, одна- ко, остается в неведении о том, что сервер перемещает данные между оперативной памятью и диском. Сохранность играет важную роль в распределенных системах, однако не менее важна она и для обычных (не распределенных) систем. Степень прозрачности. Важно отметить, что степень, до кото- рой каждое из перечисленных выше свойств должно быть выполнено, может сильно варьироваться в зависимости от задач построения рас- 14 пределенной системы. Действительно, полностью скрыть распреде- ление процессов и ресурсов вряд ли удастся. Из-за ограничения в скорости передачи сигнала, задержка на обращение к ресурсам, тер- риториально удаленным от клиента, всегда будет больше, чем к ре- сурсам, расположенным поблизости. Поэтому не каждая система в состоянии или даже должна пытаться скрывать все свои особенности от пользователя. Обычно, это утверждение выражается в поиске компромисса между прозрачностью распределенной системы и ее производительностью. Например, если для повышения отказоустойчивости в системе присутствуют географически распределенные копии ресурса, то под- держка их идентичного состояния для обеспечения прозрачности ре- пликации потребует гораздо большего времени выполнения каждой операции обновления. Другими словами, каждая операция обновле- ния должна будет распространиться на все реплики до того, как будет разрешена следующая операция с данным ресурсом. Или, например, многие приложения предпринимают несколько последовательных попыток связаться с сервером, пытаясь скрыть его временную недо- ступность, тем самым замедляя работу системы. Однако, в некоторых случаях, например, если на самом деле сервер вышел из строя, было бы разумнее сразу уведомить пользователя о недоступности ресурса. Открытость Согласно определению, принятому комитетом IEEE POSIX 1003.0, открытая система – это система, реализующая открытые спе- цификации (стандарты) на интерфейсы, службы и поддерживаемые форматы данных, достаточные для того, чтобы обеспечить: Возможность переноса разработанного прикладного про- граммного обеспечения на широкий диапазон систем с минимальны- ми изменениями (мобильность приложений, переносимость); совместную работу (взаимодействие) с другими приклад- ными приложениями на локальных и удаленных платформах (инте- роперабельность, способность к взаимодействию); 15 взаимодействие с пользователями в стиле, облегчающим последним переход от системы к системе (мобильность пользовате- ля). Ключевой момент в этом определении – использование понятия открытая спецификация, которое, в свою очередь, определяется как общедоступная спецификация, которая поддерживается открытым, гласным согласительным процессом, направленным на постоянную адаптацию к новым технологиям, и соответствует стандартам. Согласно этому определению открытая спецификация не зави- сит от конкретной технологии, т.е. не зависит от конкретных техни- ческих и программных средств или продуктов отдельных производи- телей. Открытая спецификация одинаково доступна любой заинтере- сованной стороне. Более того, открытая спецификация находится под контролем общественного мнения, поэтому заинтересованные сторо- ны могут принимать участие в ее развитии. В контексте распределенных систем приведенное выше опреде- ление означает, что свойство открытости не может быть достигнуто, если спецификация и описание ключевых интерфейсов программных компонентов системы не доступны для разработчиков. Одним сло- вом, ключевые интерфейсы должны быть описаны и опубликованы. Важно отметить, что здесь в первую очередь подразумеваются ин- терфейсы внутренних компонентов системы, а не только интерфейсы верхнего уровня, с которыми работают пользователи и приложения. При этом синтаксис интерфейсов, т.е. Имена доступных функций, типы передаваемых параметров, возвращаемых значений и т.п., обычно описывается посредством языка определения интерфейсов. В свою очередь семантика интерфейсов, т.е. то, что на самом деле де- лают службы, предоставляющие эти интерфейсы, обычно задается неформально, с помощью естественного языка. Подобное описание позволяет произвольному процессу, нуж- дающемуся в определенной службе, обратиться к другому процессу, реализующему эту службу, через соответствующий интерфейс. Кроме того, такой подход позволяет создавать несколько различных реали- 16 заций одной и той же службы, которые с точки зрения внешних про- цессов будут работать абсолютно одинаково. Как следствие, несколь- ко реализаций программных компонентов (возможно, от различных производителей) могут взаимодействовать и работать совместно, об- разуя единую распределенную систему. Таким образом, достигается свойство интероперабельности или, другими словами, способности к взаимодействию. Более того, в этом случае прикладное приложение, разработанное для распределенной системы A, может без изменений выполняться в распределенной системе B, реализующей те же интер- фейсы, что и А. То есть достигается свойство переносимости. Еще одно важное преимущество заключается в том, что откры- тая распределенная система потенциально может быть образована из разнородного аппаратного и программного обеспечения (опять-таки, возможно, от разных производителей). При этом добавление новых компонентов или замена существующих может осуществляться отно- сительно легко, не затрагивая других компонентов. На аппаратном уровне это выражается в способности простого подключения к си- стеме дополнительных компьютеров или замены существующих на более мощные. На программном – в возможности простого внедре- ния новых служб или новых реализаций уже существующих. Други- ми словами, важным свойством открытой распределенной системы является расширяемость. Масштабируемость В общем случае масштабируемость определяют, как способ- ность вычислительной системы эффективно справляться с увеличе- нием числа пользователей или поддерживаемых ресурсов без потери производительности и без увеличения административной нагрузки на ее управление. При этом систему называют масштабируемой, если она способна увеличивать свою производительность при добавлении новых аппаратных средств. Другими словами, под масштабируемо- стью понимают способность системы расти вместе с ростом нагрузки на нее. 17 Масштабируемость является важным свойством вычислитель- ных систем, если им может потребоваться работать под большой нагрузкой, поскольку означает, что вам не придется начинать с нуля и создавать абсолютно новую информационную систему. Если у вас есть масштабируемая система, то, скорее всего, вам удастся сохра- нить то же самое программное обеспечение, попросту нарастив аппа- ратную часть. Для распределенных систем обычно выделяют несколько пара- метров, характеризующих их масштаб: количество пользователей и количество компонентов, составляющих систему, степень территори- альной отдаленности сетевых компьютеров системы друг от друга и количество административных организаций, обслуживающих части распределенной системы. Поэтому масштабируемость распределен- ных систем также определяют по соответствующим направлениям: Нагрузочная масштабируемость. Способность системы увеличивать свою производительность при увеличении нагрузки пу- тем замены существующих аппаратных компонентов на более мощ- ные или путем добавления новых аппаратных средств. При этом пер- вый случай увеличения производительности каждого компонента си- стемы с целью повышения общей производительности называют вер- тикальным масштабированием, а второй, выражающийся в увеличе- нии количества сетевых компьютеров (серверов) распределенной си- стемы – горизонтальным масштабированием. Географическая масштабируемость. Способность системы сохранять свои основные характеристики, такие как производитель- ность, простота и удобство использования, при территориальном раз- несении ее компонентов от более локального взаимного расположе- ния до более распределенного. Административная масштабируемость. Характеризует простоту управления системой при увеличении количества админи- стративно независимых организаций, обслуживающих части одной распределенной системы. Построение масштабируемых систем подразумевает решение широкого круга задач и часто сталкивается с ограничениями реализо- 18 ванных в вычислительных системах централизованных служб, дан- ных и алгоритмов. А именно, многие службы централизованы в том смысле, что они реализованы в виде единственного процесса и могут выполняться только на одном компьютере (сервере). Проблема тако- го подхода заключается в том, что при увеличении числа пользовате- лей или приложений, использующих эту службу, сервер, на котором она выполняется, станет узким местом и будет ограничивать общую производительность. Если даже предположить возможность неогра- ниченного увеличения мощности такого сервера (вертикальное мас- штабирование), то тогда ограничивающим фактором станет пропуск- ная способность линий связи, соединяющих его с остальными компо- нентами распределенной системы. Аналогично, централизация дан- ных требует централизованной обработки, приводя к тем же самым ограничениям. В качестве примера преимуществ децентрализованного подхода можно привести службу доменных имен, которая на сегодняшний день является одной из самых больших распределенных систем име- нования. Служба DNS используется в первую очередь для поиска IP- адресов по доменному имени и обрабатывает миллионы запросов с компьютеров по всему миру. При этом распределенная база данных DNS поддерживается с помощью иерархии DNS-серверов, взаимо- действующих по определенному протоколу. Если бы все данные DNS централизовано хранились бы на единственном сервере, и каждый за- прос на интерпретацию доменного имени передавался бы на этот сер- вер, воспользоваться такой системой в масштабах всего мира было бы невозможно. Отдельно стоит отметить ограничения, создаваемые применени- ем централизованных алгоритмов. Дело в том, что централизованные алгоритмы для своей работы требуют получения всех входных дан- ных и только после этого производят соответствующие операции над ними, а уже затем распространяют результаты всем заинтересован- ным сторонам. С этой точки зрения проблемы использования центра- лизованных алгоритмов эквивалентны рассмотренным выше пробле- мам централизации служб и данных. Поэтому для достижения хоро- 19 шей масштабируемости следует применять распределенные алгорит- мы, предусматривающие параллельное выполнение частей одного и того же алгоритма независимыми процессами. В отличие от централизованных алгоритмов, распределенные алгоритмы обладают следующими свойствами, которые на самом де- ле значительно усложняют их проектирование и реализацию: Отсутствие знания глобального состояния. Как уже было сказано, централизованные алгоритмы обладают полной информаци- ей о состоянии всей системы и определяют следующие действия, ис- ходя из ее текущего состояния. В свою очередь, каждый процесс, ре- ализующий часть распределенного алгоритма, имеет непосредствен- ный доступ только к своему состоянию, но не к глобальному состоя- нию всей системы. Соответственно, процессы принимают решения только на основе своей локальной информации. Следует отметить, что информацию о состоянии других процессов в распределенной си- стеме каждый процесс может получить только из пришедших сооб- щений, и эта информация может оказаться устаревшей на момент по- лучения. Аналогичная ситуация имеет место в астрономии: знания об изучаемом объекте (звезде / галактике) формируются на основании светового и прочего электромагнитного излучения, и это излучение дает представление о состоянии объекта в прошлом. Например, зна- ния об объекте, находящемся на расстоянии пяти тысяч световых лет, являются устаревшими на пять тысяч лет. Отсутствие общего единого времени. События, составля- ющие ход выполнения централизованного алгоритма полностью упо- рядочены: для любой пары событий можно с уверенностью утвер- ждать, что одно из них произошло раньше другого. При выполнении распределенного алгоритма вследствие отсутствия единого для всех процессов времени, события нельзя считать полностью упорядочен- ными: для некоторых пар событий мы можем утверждать, какое из них произошло раньше другого, для других – нет. Отсутствие детерминизма. Централизованный алгоритм чаще всего определяется как строго детерминированная последова- тельность действий, описывающая процесс преобразования объекта 20 из начального состояния в конечное. Таким образом, если мы будем запускать централизованный алгоритм на выполнение с одним и тем же набором входных данных, мы будем получать один и тот же ре- зультат и одинаковую последовательность переходов из состояния в состояние. В свою очередь выполнение распределенного алгоритма носит недетерминированный характер из-за независимого исполнения процессов с различной и неизвестной скоростью, а также из-за слу- чайных задержек передачи сообщений между ними. Поэтому, не- смотря на то, что для распределенных систем может быть определено понятие глобального состояния, выполнение распределенного алго- ритма может лишь ограниченно рассматриваться как переход из од- ного глобального состояния в другое, т.к. для этого же алгоритма вы- полнение может быть описано другой последовательностью глобаль- ных состояний. Такие альтернативные последовательности обычно состоят из других глобальных состояний, и поэтому нет особого смысла говорить о том, что то или иное состояние достигается по хо- ду выполнения распределенного алгоритма. Устойчивость к отказам. Сбой в любом из процессов или каналов связи не должен вызывать нарушения работы распределенно- го алгоритма. Для обеспечения географической масштабируемости требуются свои подходы. Одна из основных причин плохой географической масштабируемости многих распределенных систем, разработанных для локальных сетей, заключается в том, что в их основе лежит прин- цип синхронной связи. В этом виде связи клиент, вызывающий ка- кую-либо службу сервера, блокируется до получения ответа. Это не- плохо работает, когда взаимодействие между процессами происходит быстро и незаметно для пользователя. Однако при увеличении за- держки на обращение к удаленной службе в глобальной системе по- добный подход становится все менее привлекательным и, очень ча- сто, абсолютно неприемлемым. Другая сложность обеспечения географической масштабируе- мости состоит в том, что связь в глобальных сетях по своей природе ненадежна и взаимодействие процессов практически всегда является 21 двухточечным. В свою очередь, связь в локальных сетях является вы- соконадежной и подразумевает использование широковещательных сообщений, что значительно упрощает разработку распределенных приложений. Например, если процессу требуется обнаружить адрес другого процесса, предоставляющего определенную службу, в ло- кальных сетях ему достаточно разослать широковещательное сооб- щение с просьбой для искомого процесса откликнуться на него. Все процессы получают и обрабатывают это сообщение. Но только про- цесс, предоставляющий требуемую службу, отвечает на полученную просьбу, указывая свой адрес в ответном сообщении. Очевидно, по- добное взаимодействие перегружает сеть, и использовать его в гло- бальных сетях нереально. Технологии масштабирования. В большинстве случаев сложности масштабирования проявля- ются в проблемах с эффективностью функционирования распреде- ленных систем, вызванных ограниченной производительностью ее отдельных компонентов: серверов и сетевых соединений. Существу- ют несколько основных технологий, позволяющих уменьшить нагрузку на каждый компонент распределенной системы. К таким технологиям обычно относят распространение, репликацию и кэши- рование. Распространение предполагает разбиение множества поддержи- ваемых ресурсов на части с последующим разнесением этих частей по компонентам системы. Простым примером распространения мо- жет служить распределенная файловая система при условии, что каж- дый файловый сервер обслуживает свой набор файлов из общего ад- ресного пространства. Другим примером может являться уже упоми- навшаяся служба доменных имен DNS, в которой все пространство DNS-имен разбивается на зоны, и имена каждой зоны обслуживаются отдельным DNS-сервером. Важную роль для обеспечения масштабируемости играют ре- пликация и кэширование. Репликация не только повышает доступ- 22 ность ресурсов в случае возникновения частичного отказа, но и помо- гает балансировать нагрузку между компонентами системы, тем са- мым увеличивая производительность. Кэширование представляет со- бой особую форму репликации, когда копия ресурса создается в непосредственной близости от пользователя, использующего этот ре- сурс. Разница заключается лишь в том, что репликация инициируется владельцем ресурса, а кэширование – пользователем при обращении к этому ресурсу. Однако стоит отметить, что наличие нескольких копий ресурса приводит к другим сложностям, а именно к необходимости обеспечи- вать их непротиворечивость (англ. consistency), что, в свою очередь, может отрицательно сказаться на масштабируемости системы. Таким образом, распространение и репликация позволяют распределить по- ступающие в систему запросы по нескольким ее компонентам, в то время как кэширование уменьшает количество повторных обращений к одному и тому же ресурсу. Кэширование призвано не только снижать нагрузку на компо- ненты распределенной системы, но и позволяет скрывать от пользо- вателя задержки коммуникации при обращении к удаленным ресур- сам. Подобные технологии, скрывающие задержки коммуникации, важны для достижения географической масштабируемости системы. К ним, в частности, еще можно отнести механизмы асинхронной свя- зи, в которых клиент не блокируется при обращении к удаленной службе, а получает возможность продолжить свою работу сразу после обращения. Позже, когда будет получен ответ, клиентский процесс сможет прерваться и вызвать специальный обработчик для заверше- ния операции. Сложности разработки распределенных систем Реализация перечисленных выше свойств распределенных си- стем на практике представляет непростую задачу. Основные сложно- сти вытекают именно из того факта, что компоненты распределенной системы территориально удалены друг от друга и выполняются на не- 23 зависимых компьютерах в сети. Игнорирование этого обстоятельства на этапе проектирования и разработки соответствующего программ- ного обеспечения часто приводит к существенным проблемам в функционировании распределенной системы. В этой связи еще в 90-х годах прошлого века сотрудник компа- нии Sun Microsystems Питер Дейч в своей статье «Восемь заблужде- ний относительно распределенных вычислений» сформулировал ос- новные ошибки, которые допускают при создании распределенных приложений. Он писал: «По существу, каждый, кто впервые создает распределенное приложение, делает следующие предположения. Все они, в конце концов, оказываются ложными, и все вызывают большие неприятности. Вот эти восемь заблуждений: 1. Сеть является надежной. 2. Задержки передачи сообщений равны нулю. 3. Полоса пропускания не ограничена. 4. Сеть является безопасной. 5. Сетевая топология неизменна. 6. Систему обслуживает только один администратор. 7. Издержки на транспортную инфраструктуру равны нулю. 8. Сеть является однородной». Важно отметить, что перечисленные предположения как раз и отличают разработку традиционных локальных приложений и систем от распределенных в том смысле, что для нераспределенных прило- жений большинство из этих допущений остается верным, а пробле- мы, возникающие при нарушении любого из них, скорее всего, не бу- дут проявляться. Большая же часть принципов, лежащих в основе распределенных систем, имеет непосредственное отношение к пере- численным предположениям. Поэтому в области распределенных вычислений рассматриваются методы и алгоритмы, позволяющие ре- ализовывать распределенные системы, при условии того, что хотя бы одно из представленных допущений является ложным. Например, по- нятно, что надежных сетей не существует, что, в свою очередь, при- водит к невозможности достижения абсолютной прозрачности отка- зов. Другим примером может являться необходимость принимать во 24 внимание доступную полосу пропускания и ненулевую задержку об- мена сообщениями в сети при реализации и использовании механиз- мов репликации. |