Добавлен: 22.04.2023
Просмотров: 100
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Технология «клиент-сервер»
1.1. Описание технологии «клиент-сервер»
Глава 2. Распределенные системы обработки информации
2.1. Описание распределенных систем обработки информации
2.2. Возможности распределенных систем обработки информации
Глава 3. Программная разработка
Введение
Актуальность выполнения данной работы обусловлена тем, что характерной чертой нашего времени являются интенсивно развивающиеся процессы информатизации практически во всех сферах человеческой деятельности. Они привели к формированию новой инфраструктуры, которая связана с новым типом общественных отношений, с новой реальностью, с совершенно новыми информационными технологиями различных видов деятельности.
Информационные технологии становятся важнейшим инструментом научно-технического и социально-экономического развития общества, играя существенную роль в ускорении процессов получения, распространения и последующего использования новых знаний. Влияя на качество интеллектуальных ресурсов социума, информационные технологии повышают уровень и качество самой жизни человека.
Информационно-коммуникационные технологии включают в свой состав специализированные характеристики следующих понятий: система; информационная система; автоматизированная система. Определение перечисленных понятий позволяет более точно подобрать необходимые компоненты информационно-коммуникационной составляющей человеческой жизнедеятельности.
Несмотря на кажущуюся простоту процесса автоматизации, не так-то легко можно получить эффективное программное решение, кроме того, определенные трудности представляет постоянное изменение комплекса требований предъявляемых к учету обрабатываемой оперативной информации, постоянно увеличивающаяся потребность в быстро адаптируемых к новым изменчивым условиям прикладных программных комплексах. Автоматизация по средствам практического использования прототипного программирования позволяет получить многофункциональный продукт за достаточно короткое время.
Объект исследования – интернет-технологии.
Предмет исследования – технология «клиент-сервер»
Целью данной работы является изучение технологии «клиент-сервер».
В соответствии с целью была определена необходимость постановки и решения следующих задач:
– дать понятие технологии «клиент-сервер»;
– описать модели взаимодействия «клиент-сервер»;
– описать архитектуру «клиент-сервер»;
– дать характеристику современным технологиям «клиент-сервер»;
– описать практику использования технологий «клиент-сервер».
Глава 1. Технология «клиент-сервер»
1.1. Описание технологии «клиент-сервер»
«Клиент–сервер» (англ. client–server) представляет собой вычислительную или сетевую архитектуру, в которой задания или сетевая нагрузка распределяется между активными поставщиками услуг, которые называются серверами, и заказчиками услуг, называемыми клиентами. Фактически клиент и сервер представляет собой прикладное программное обеспечение. Обычно эти прикладные программы располагаются на разных вычислительных машинах и взаимодействуют между собой по средствам использования средств вычислительной сети с использованием сетевых протоколов, но в тоже время они могут быть расположены также и на одной машине [3].
Программы-серверы ожидают от клиентских прикладных программ запросы и предоставляют им свои вычислительные ресурсы в виде некоторых данных или в виде сервисных функций. В связи с тем, что одна программа-сервер может выполнять запросы от нескольких прикладных программ-клиентов, её размещают на специально выделенной вычислительной машине, которая настраивается особым образом, как правило, совместно с другими прикладными программами-серверами, поэтому производительность такой машины должна быть достаточно высокой [14].
Из-за особой роли такой машины в вычислительной сети, специфики её оборудования и прикладного программного обеспечения, её также называют сервером, а машины, которые выполняют клиентские прикладные программы, соответственно, клиентами [7].
Клиент и сервер взаимодействую друг с другом в сети Интернет или в любой другой компьютерной сети при помощи различных сетевых протоколов, например, IP протокол, HTTP протокол, FTP и другие. Протоколов на самом деле очень много и каждый протокол позволяет оказывать ту или иную услугу.
Например, при помощи HTTP протокола браузер отправляет специальное HTTP сообщение, в котором указано какую информацию и в каком виде он хочет получить от сервера, сервер, получив такое сообщение, отсылает браузеру в ответ похожее по структуре сообщение (или несколько сообщений), в котором содержится нужная информация, обычно это HTML документ [1].
Основным объектом манипуляции в HTTP является ресурс, на который указывает URI (Uniform Resource Identifier) в запросе клиента. Обычно такими ресурсами являются хранящиеся на сервере файлы, но ими могут быть логические объекты или что-то абстрактное. Особенностью протокола HTTP является возможность указать в запросе и ответе способ представления одного и того же ресурса по различным параметрам: формату, кодировке, языку и т. д. (в частности, для этого используется HTTP-заголовок). Именно благодаря возможности указания способа кодирования сообщения, клиент и сервер могут обмениваться двоичными данными, хотя данный протокол является текстовым.
HTTP – протокол прикладного уровня; аналогичными ему являются FTP и SMTP. Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI. В отличие от многих других протоколов, HTTP не сохраняет своего состояния [10]. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ». Компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами (например, «куки» на стороне клиента, «сессии» на стороне сервера). Браузер, посылающий запросы, может отслеживать задержки ответов. Сервер может хранить IP-адреса и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования.
Многие сетевые протоколы построены на архитектуре клиент-сервер, поэтому в их основе обычно лежат одинаковые или схожие принципы взаимодействия, а разницу можно увидеть лишь в деталях, которые обусловлены особенностями и спецификой области, для которой разрабатывался тот или иной сетевой протокол [5].
Архитектура клиент-сервер определяет лишь общие принципы взаимодействия между компьютерами, детали взаимодействия определяют различные протоколы. Данная концепция нам говорит, что нужно разделять машины в сети на клиентские, которым всегда что-то надо и на серверные, которые дают то, что нужно. При этом взаимодействие всегда начинает клиент, а правила, по которым происходит взаимодействие описывает протокол.
1.2. Двухзвенная архитектура
В любой сети (даже одноранговой), построенной на современных сетевых технологиях, присутствуют элементы клиент-серверного взаимодействия, чаще всего на основе двухзвенной архитектуры. Двухзвенной (two-tier, 2-tier) она называется из-за необходимости распределения трех базовых компонентов между двумя узлами (клиентом и сервером) [19].
Двухзвенная архитектура используется в клиент-серверных системах, где вычислительный сервер отвечает на клиентские запросы напрямую и в полном объеме, при этом используя только собственные вычислительные ресурсы [2].
Т.е. сервер не вызывает сторонние сетевые прикладные программные приложения и не обращается к сторонним вычислительным ресурсам для выполнения какой-либо части пользовательского структурированного запроса.
В классической ситуации (когда роль клиента выполняет браузер) для того, чтобы пользователь увидел графический интерфейс приложения в окне браузера, последний должен обработать полученный ответ веб-сервера, в котором будет содержаться информация, реализованная с применением HTML, CSS, JS (самые используемые технологии). Именно эти технологии «дают понять» браузеру, как именно необходимо «отрисовать» все, что он получил в ответе [16].
Веб-сервер – это сервер, принимающий HTTP-запросы от клиентов и выдающий им HTTP-ответы. Веб-сервером называют как прикладное программное обеспечение, выполняющее функции веб-сервера, так и непосредственно компьютер, на котором это программное обеспечение работает.
Наиболее распространенными видами программного обеспечения веб-серверов являются Apache, IIS и NGINX. На веб-сервере функционирует тестируемое приложение, которое может быть реализовано с применением самых разнообразных языков программирования: PHP; Python; Ruby; Java; Perl и пр.
База данных фактически не является частью веб-сервера, но большинство приложений просто не могут выполнять все возложенные на них функции без нее, так как именно в базе данных хранится вся динамическая информация приложения [21].
В настоящее время намечается тенденция возврата к тому, с чего начиналась клиент-серверная архитектура – к централизации вычислений на основе использования модели терминал-сервера. В современной реинкарнации терминалы отличаются от своих алфавитно-цифровых предков тем, что имея минимум программных и аппаратных средств, представляют мультимедийные возможности (в т.ч. графический пользовательский интерфейс) [4].
Работу терминалов обеспечивает высокопроизводительный сервер, куда вынесено все, вплоть до виртуальных драйверов устройств, включая драйверы видеоподсистемы.
Если говорить про многоуровневую архитектуру взаимодействия клиент-сервер, то в качестве примера можно привести любую современную СУБД (за исключением, наверное, библиотеки SQLite, которая в принципе не использует концепцию клиент-сервер).
Несколько процессов или потоков могут одновременно без каких-либо проблем читать данные из одной базы. Запись в базу можно осуществить только в том случае, если никаких других запросов в данный момент не обслуживается; в противном случае попытка записи оканчивается неудачей, и в программу возвращается код ошибки [12]. Другим вариантом развития событий является автоматическое повторение попыток записи в течение заданного интервала времени.
Старые версии SQLite были спроектированы без каких-либо ограничений, единственным условием было то, чтобы база данных умещалась в памяти, в которой все вычисления производились при помощи 32-разрядных целых чисел. Это создавало определённые проблемы. Из-за того, что верхние пределы не были определены и соответственно должным образом протестированы, часто обнаруживались ошибки при использовании SQLite в достаточно экстремальных условиях [17]. Поэтому в новых версиях SQLite были введены пределы, которые теперь проверяются вместе с общим набором тестов.
Сама библиотека SQLite написана на C; существует большое количество привязок к другим языкам программирования, в том числе Apple Swift, Delphi, C++, Java, C#, VB.NET, Python, Perl, Node.js, PHP, PureBasic, Tcl (средства для работы с Tcl включены в комплект поставки SQLite), Ruby, Haskell, Scheme, Smalltalk, Lua и Parser, а также ко многим другим [11].
Простота и удобство встраивания SQLite привели к тому, что библиотека используется в браузерах, музыкальных плеерах и многих других программах.
В частности, SQLite используется в:
– Adobe Integrated Runtime – среда для запуска приложений (частично);
– Gears;
– Autoit;
– Фреймворк Qt [8].
Суть многоуровневой архитектуры заключается в том, что запрос клиента обрабатывается сразу несколькими серверами. Такой подход позволяет значительно снизить нагрузку на сервер из-за того, что происходит распределение операций, но в то же самое время данный подход не такой надежный, как двухзвенная архитектура.
1.3. Трехзвенная архитектура
Еще одна тенденция в клиент-серверных технологиях связана со все большим использованием распределенных вычислений. Они реализуются на основе модели сервера приложений, где сетевое приложение разделено на две и более частей, каждая из которых может выполняться на отдельном компьютере.
Выделенные части приложения взаимодействуют друг с другом, обмениваясь сообщениями в заранее согласованном формате. В этом случае двухзвенная клиент-серверная архитектура становится трехзвенной (three-tier, 3-tier) [6].
N-уровневая архитектура приложения предоставляет модель, по которой разработчики могут создавать гибкие и повторно-используемые приложения. Разделяя приложение на уровни абстракции, разработчики приобретают возможность внесения изменений в какой-то определённый слой, вместо того, чтобы перерабатывать всё приложение целиком. Трёхуровневая архитектура обычно состоит из уровня представления, уровня бизнес-логики и уровня хранения данных.