Портал магистров

Автореферат по теме:
Разработка и исследование клиент-серверной системы для взаимодействия мобильных устройств с сервером c использованием технологии Java

Выполнил Шелуденков А. В.


  Актуальность темы
  Введение
     1.Архитектура "клиент-сервер"
     2.Модели взаимодействия клиент-сервер
     3. Преимущества архитектуры клиент-сервер
     4. Функции сервера
     5. Java платформа
       5.1 Объектно-ориентированность
       5.2 Надежность
       5.3 Безопасность
       5.4 Независимость от архитектуры
       5.5 Высокая производительность
     6. CGI и Java технологи
     Заключение
     Литератута
Актуальность темы

В наше время практически во всех сферах жизни человеческого общества применяются те или иные системы обработки данных. Это могут быть банковские системы, промышленные программные комплексы, средства автоматизации торговли и многие другие приложения. Постоянное расширение областей применения вычислительной техники и всевозрастающая сложность решаемых задач требуют совершенствования методов создания современных информационных систем.
С начала 90-х годов XX века известна такая технология реализации программных приложений как архитектура "клиент-сервер". Ее основная особенность состоит в том, что приложение делится на два уровня - представление данных (клиент) и хранение данных (сервер БД). Обработка информации происходит на клиенте, на сервер посылаются запросы и обрабатываются полученные в ответ на них данные.
С появлением мульти-платформенных технологий программирования и телекоммуникационных систем возникла возможность внедрения архитектуры клиент-сервер в портативные устройства.
В рамках данной работы будет рассмотрены преимущества этой архитектуры для мобильных устройств с использованием технологии Java.
Введение

Архитектура клиент-сервер предполагает сервер баз данных, представляющий собой приложение, осуществляющее комплекс действий по управлению данными - выполнение запросов, хранение и резервное копирование данных, отслеживание ссылочной целостности, проверку прав и привилегий пользователей, ведение журнала транзакций.
Одним из важнейших преимуществ клиент-серверных информационных систем по сравнению с их аналогами является снижение сетевого трафика при выполнении запросов.
Вторым преимуществом архитектуры клиент-сервер является возможность хранения бизнес-правил на сервере, что позволяет избежать дублирования кода в различных приложениях, использующих общую базу данных. Кроме того, в этом случае любое редактирование данных, в том числе и редактирование нештатными средствами, может быть произведено только в рамках этих правил.
Помимо перечисленных возможностей, современные серверные СУБД обладают широкими возможностями управления пользовательскими привилегиями и правами доступа к различным объектам базы данных, резервного копирования и архивации данных, а нередко и оптимизации выполнения запросов. Они также, как правило, предоставляют возможность параллельной обработки данных, особенно в случае использования многопроцессорных компьютеров в качестве сервера баз данных.
Итак, клиент-серверная информационная система состоит в простейшем случае из двух основных компонентов:
• сервер баз данных, управляющий хранением данных, доступом и защитой, резервным копированием, отслеживающий целостность данных в соответствии с бизнес-правилами и, самое главное, выполняющий запросы клиента;
• клиент, предоставляющий интерфейс пользователя, выполняющий логику приложения, проверяющий допустимость данных, посылающий запросы к серверу и получающий ответы от него;
1. Архитектура "клиент-сервер"

Как правило, компьютеры и программы, входящие в состав информационной системы, не являются равноправными. Некоторые из них владеют ресурсами (файловая система, процессор, принтер, база данных и т.д.), другие имеют возможность обращаться к этим ресурсам. Компьютер (или программу), управляющий ресурсом, называют сервером этого ресурса (файл-сервер, сервер базы данных, вычислительный сервер...). Клиент и сервер какого-либо ресурса могут находиться как в рамках одной вычислительной системы, так и на различных компьютерах, связанных сетью.
Основной принцип технологии "клиент-сервер" заключается в разделении функций приложения на три группы:
• ввод и отображение данных (взаимодействие с пользователем);
• прикладные функции, характерные для данной предметной области;
• функции управления ресурсами (файловой системой, базой данных и т.д.);
Поэтому, в любом приложении выделяются следующие компоненты:
• компонент представления данных;
• прикладной компонент;
• компонент управления ресурсом;
Связь между компонентами осуществляется по определенным правилам, которые называют "протокол взаимодействия".
2. Модели взаимодействия клиент-сервер

Исторически первой появилась модель распределенного представления данных, которая реализовывалась на универсальной ЭВМ с подключенными к ней неинтеллектуальными терминалами. Управление данными и взаимодействие с пользователем при этом объединялись в одной программе, на терминал передавалась только "картинка", сформированная на центральном компьютере.
Затем, с появлением персональных компьютеров (ПК) и локальных сетей, были реализованы модели доступа к удаленной базе данных. Некоторое время базовой для сетей ПК была архитектура файлового сервера. При этом один из компьютеров является файловым сервером, на клиентах выполняются приложения, в которых совмещены компонент представления и прикладной компонент (СУБД и прикладная программа). Протокол обмена при этом представляет набор низкоуровневых вызовов операций файловой системы. Такая архитектура, реализуемая, как правило, имеет очевидные недостатки - высокий сетевой трафик и отсутствие унифицированного доступа к ресурсам.
С появлением первых специализированных серверов баз данных появилась возможность другой реализации модели доступа к удаленной базе данных. В этом случае ядро СУБД функционирует на сервере, протокол обмена обеспечивается с помощью языка SQL. Такой подход по сравнению с файловым сервером ведет к уменьшению загрузки сети и унификации интерфейса "клиент-сервер". Однако, сетевой трафик остается достаточно высоким, кроме того, по- прежнему невозможно удовлетворительное администрирование приложений, поскольку в одной программе совмещаются различные функции.
Позже была разработана концепция активного сервера, который использовал механизм хранимых процедур. Это позволило часть прикладного компонента перенести на сервер (модель распределенного приложения). Процедуры хранятся в словаре базы данных, разделяются между несколькими клиентами и выполняются на том же компьютере, что и SQL-сервер. Преимущества такого подхода: возможно централизованное администрирование прикладных функций, значительно снижается сетевой трафик (т.к. передаются не SQL-запросы, а вызовы хранимых процедур). Недостаток - ограниченность средств разработки хранимых процедур по сравнению с языками общего назначения.
На практике сейчас обычно используется смешанный подход: простейшие прикладные функции выполняются хранимыми процедурами на сервере; более сложные реализуются на клиенте непосредственно в прикладной программе.
Сейчас ряд поставщиков коммерческих СУБД объявило о планах реализации механизмов выполнения хранимых процедур с использованием языка Java. Это соответствует концепции "тонкого клиента", функцией которого остается только отображение данных (модель удаленного представления данных).
В последнее время также наблюдается тенденция ко все большему использованию модели распределенного приложения. Характерной чертой таких приложений является логическое разделение приложения на две и более частей, каждая из которых может выполняться на отдельном компьютере. Выделенные части приложения взаимодействуют друг с другом, обмениваясь сообщениями в заранее согласованном формате. В этом случае двухзвеньевая архитектура клиент-сервер становится трехзвеньевой, а в некоторых случаях, она может включать и больше звеньев (рис 1).

CGI
Рисунок 1 - 3-х уровневая архитектура клиент-сервер
3. Преимущества архитектуры клиент-сервер

Силой, способствующей развитию систем с архитектурой клиент-сервер, служит то, что подключение к недорогим серверам недорогих ПК позволит получить оптимальное соотношение цены и производительности. Чаще всего это предположение верно.
Используя множество небольших компьютеров, разработчики систем клиент-сервер могут эмулировать вычислительную мощность больших ЭВМ, распределяя прикладную задачу по различным микрокомпьютерам и серверам.
Каждый из них берет на себя свою часть вычислительной нагрузки, используя информацию совместно с другими процессорами сети. Суть идеи в том, что чтобы повысить мощность системы, не наращивая производительность одного компьютера, а суммируя средства многих.
Быстродействие - основной фактор целесообразности разработки систем для архитектуры клиент-сервер. Технологи серверов баз данных становится проще в использовании и сочетаются в одних системах со средствами RAD. Таким образом, ожидается, что с помощью этой скоростной и практически защищенной платформы сократится время, необходимое для подготовки и передачи прикладной программы пользователю.
Привлекательность ГИП (графического интерфейса пользователя) - еще один фактор, склоняющий пользователей к применению архитектуры клиент-сервер . К преимуществам прикладных программ клиент-сервер относятся также простота использования и удобство для пользователей, работающих с такими ГИП, как Windows 3.1, Windows 95, Windows NT и OS/2 Warp. Пользователи чувствуют себя более комфортно и работают продуктивнее с такими прикладными программами, такими как текстовые процессоры, средства просмотра Internet (браузеры) и электронные таблицы, и подобными им .
Наконец, клиент-сервер - это технология, предоставляющая больше самостоятельности пользователям. Прикладные программы и данные находятся на небольших, более доступных системах, а не в недрах мини-ЭВМ и мощных вычислительных центров.
Наиболее простая форма архитектуры клиент-сервер - это разделение вычислительной нагрузки между двумя отдельными процессами: клиентом и сервером. Хотя и клиент, и сервер могут находиться на одном и том же компьютере, большинство систем этой архитектуры запускают клиентский процесс на одном компьютере, а процесс-сервер на другом, используя для обмена информацией сетевые связи. В этой модели один процесс может работать независимо от другого, выполнять определенные задания и разделять вычислительную нагрузку.
Обычно клиентом служит настольный ПК, выполняющий программное обеспечение конечного пользователя. Программное обеспечение (ПО) конечного пользователя (front-end software) - это любая прикладная программа или пакет, способные направлять запросы по сети серверу и обрабатывать получаемую в ответ информацию. Сервер, в свою очередь, получает запросы и предпринимает действия от имени клиента.
Промежуточное обеспечение (middleware) предоставляет общий интерфейс для ПО конечного пользователя и сервера, проникающий сквозь слои ГИП, ОС, вычислительной сети и собственных драйверов базы данных с помощью общих вызовов. Для завершения операции сервер базы данных выполняет запрос и передает клиенту затребованные данные для обработки их программой клиента.
4. Функции сервера

Серверы баз данных занимаются не только обслуживанием данных. В них предусмотрены также механизмы блокировок и элементы управления многопользовательским доступом, которые обеспечивают защиту данных от опасности параллельного доступа. Кроме этого, серверу баз данных приходится ограждать данные от несанкционированного доступа, оптимизировать запросы к базе данных, обеспечивать кэширование и предоставлять место для размещения словаря данных.
Две другие важные особенности, на которые стоит обратить внимание, - способность сервера обеспечивать целостность ссылочных данных и обоюдный контроль завершения транзакции. Ссылочная целостность данных (referential integrity) - это механизм, обеспечивающий каждому внешнему ключу соответствующий первичный ключ. Обоюдный контроль завершения транзакций (two-phase commit) - гарантия того, что ваши данные не будут повреждены даже при аппаратном сбое.
С помощью хранимых процедур, триггеров и правил разработчики могут составить программу непосредственно самого сервера баз данных и, таким образом, появляется еще одно место для размещения логики программы. Хранимые процедуры (stored procedures) - это группа предложений на языке SQL и процедурная логика, которые разработчики могут компилировать и хранить на сервере баз данных в качестве объектов. Программы-клиенты способны выполнять хранимые процедуры, также как и другой вид хранимых процедур или триггеров, путем посылки сообщений серверу баз данных.
Триггеры (triggers) - это хранимые процедуры, которые активизируются автоматически, как только серверу баз данных встречается связанное с данными событие. Правило (rule) - это специальный тип триггера, который проверяет данные до внесения их в базу данных.
Большая часть имеющихся на данный момент хранимых процедур, триггеров и правил обладает весьма узкой специализацией и отличающимися возможностями. SQL Server способен запускать только один триггер для операции вставки, в то время как CA-OpenIngres обеспечивает работу нескольких триггеров. Более того, расширения процедур SQL у разных изготовителей разные.
5. Java платформа

"Написано однажды, работает везде!" Технология Java - это объектно-ориентированная, платформо-независимая, многопоточная среда программирования.
Когда программный продукт, написанный на языке программирования Java компилируется с использованием технологии Java, получается байткод. Виртуальная машина Java может интерпретировать этот байткод на любой платформе, на которой установлена виртуальная машина Java. Это означает, что нет необходимости в портировании программ.
В Java не включены некоторые редко используемые, плохо понимаемые и усложняющие работу возможности С++, которые приносят больше проблем, чем преимуществ. Пришлось отказаться от перегрузки операторов (но перегрузка методов в Java осталась), множественного наследования, автоматического расширяющего приведения типов.
Добавилась автоматическая сборка мусора, упрощающая процесс программирования, но несколько усложняющая систему в целом. В С и С++ управление памятью вызывало всегда массу проблем, теперь же об этом не придется много заботиться.

5.1 Объектно-ориентированность

Язык Java с самого начала проектировался как объектно-ориентированный. Задачам распределенных систем клиент-сервер отвечает объектно-ориентированная парадигма: использование концепций инкапсуляции, наследования и полиморфизма. Java предоставляет ясную и действенную объектно-ориентированную платформу разработки.

5.2 Надежность

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

Модель управления памятью предельно проста: объекты создаются с помощью оператора new. В Java, в отличие от С++, механизм указателей исключает возможность прямой записи в память и порчи данных: при работе с указателями операции строго типизированы, отсутствуют арифметические операции над указателями. Работа с массивами находится под контролем управляющей системы. Существует автоматическая сборка мусора.
Данная модель управления памятью исключает целый класс ошибок, так часто возникающих у программистов на С и С++. Программы на Java можно писать, будучи уверенным в том, что машина не "повиснет" из-за ошибок при работе с динамически выделенной памятью.

5.3 Безопасность

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

5.4 Независимость от архитектуры

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

5.5 Высокая производительность

Производительность всегда заслуживает особого внимания. Java достигает высокой производительности благодаря специально оптимизированному байт-коду, легко переводимому в машинный код. Автоматическая сборка мусора выполняется как фоновый поток с низким приоритетом, обеспечивая высокую вероятность доступности требуемой памяти, что ведет к увеличению производительности. Приложения, требующие больших вычислительных ресурсов, могут быть спроектированы так, чтобы те части, которые требуют интенсивных вычислений, были написаны на языке ассемблера и взаимодействовали с Java платформой. В основном, пользователи ощущают, что приложения взаимодействуют быстро, несмотря на то, что они являются интерпретируемыми.
6. CGI и Java технологи

При помощи сервлетов можно извлекать данные из баз данных. Предлагаемый подход актуален для широкого спектра задач объектно–ориентированного дизайна для построения объектно–ориентированных моделей обеспечивающих работу с базами данных различных организаций.
Рассмотрим разницу между CGI и Fast CGI технологиями и работой Java based Web Server. Когда Web-сервер получает CGI (Common Gateway Interface) - запрос, ему нужно запустить постороннюю программу, дать возможность этой программе выполниться и затем завершиться, и после этого вернуть полученный в результате выполнения текст в Web-браузер. Ещё больше осложняет ситуацию то, что большинство современных Web-приложений предполагают наличие некоего подобия доступа к базам данных. Каждый раз во время выполнения CGI должно создаваться новое обращение к базе данных, которое занимает несколько секунд. Процесс получения ответа от CGI скрипта изображён на рисунке 2.

CGI
Рисунок 2 - CGI

Время отработки скрипта часто сопоставимо со временем создания нового процесса. Технология FastCGI даёт 6-10 кратное увеличение производительности по сравнению с CGI за счёт того, что отработавший процесс не удаляется из памяти. Также в FastCGI предусмотрены API-функции, с помощью которых скрипт использует может использовать некоторые ресурсы сервера, что также повышает производительность системы. FastCGI изображён на рисунке 3.

FastCGI
Рисунок 3 - FastCGI

Сервлеты являются объектами, которые образуют специфический интерфейс, с помощью которого их можно свободно встраивать в Java-ориентированные Web-сервера. На рис. 4. показана работа Java Web Server. Отметим многопоточность в едином процессе. Множество сервлетов выполняются параллельно в рамках одного процесса на сервере и по своей производительности превосходят как CGI, так и Fast-CGI приложения. Сервлетам нет необходимости перезагружать процесс при каждом новом запросе, и это также повышает их быстродействие.

Servlet
Рисунок 4 - Servlet

Сервлеты устойчивы, платформенно независимы, обладают всеми необходимыми качествами, включая защиту данных, упрощённый доступ к данным и облегченный способ интеграции с Java-аплетами. Сервлеты, являющиеся частью предлагаемого проекта, имеют целый ряд преимуществ по сравнению с CGI – технологиями. Основные преимущества сервлетов таковы:
Независимость от платформы. Сервлеты могут выполняться на любой платформе без необходимости рекомпилирования или модификации. Скрипты на PERL тоже могут мигрировать с платформы на платформу, однако расширения для CGI и серверов, написанные на языках высокого уровня типа С, не так подвижны.
Сервлеты загружаются только один раз, в то время как программы CGI должны загружаться в ответ на каждый новый запрос. Используемый в сервлетах метод init() позволяет программисту осуществлять ресурсопоглощающие операции (типа соединения с базой данных) в момент загрузки и многократно использовать их при повторных обращениях к сервлетам. Другими словами, вместо того чтобы входить в базу и обратно многократно, достаточно подсоединиться к ней один раз.
Расширяемость. Java является устойчивым, хорошо продуманным и полностью объектно-ориентированным языком. Специализированные библиотеки Java, инструментальные средства разработки и драйверы для работы с базами данных постоянно пополняются и обновляются. Фактически, сервлеты - это ключевой элемент для Java Server API (Application Programming Interface), который должен работать везде, начиная с Web-серверов и заканчивая сетевыми компьютерами.
Сервлеты часто используются при разработке Web-приложений. Применение сервлетов позволяет значительно упростить процесс динамического формирования содержимого Web- документов. Web –приложение представляет собой совокупность следующих компонентов: Java–сервлеты, Java Server Page, библиотека пользовательских дескрипторов, библиотека классов Java, дескриптор доставки, статические компоненты (HTML-страницы, изображения и т.д.), прочие ресурсы.
Для обеспечения работы данных приложения подходит любой сервер, поддерживающий эти компоненты. Если Web–приложение содержит сервлеты, JSP или библиотеки пользовательских дескрипторов, то Web-сервер должен быть снабжён специальным контейнером, поддерживающим данные компоненты. Это может быть либо контейнер, специально ориентированный для работы с Java-сервлетами и JSP, либо полнофункциональный сервер, предназначенный для обеспечения работы J2EE-приложений, например, Borland Enterprise Application Server. Одно из преимуществ использования языка Java для создания программ состоит в том, что написанный и скомпилированный код можно переносить с одной платформы на другую. В идеальном случае Web- приложение должно представлять собой автономную структуру, содержащую все необходимые файлы и определяющие особенности доставки и выполнения программных компонентов. Таким образом, преимущества, присущие языку Java , переносятся на целую платформу, содержащую корректное представление информации на различных серверах. Содержимое Web-узла и размещённых на них Web-приложений представляет собой сочетание статической, т.е. не изменяемой с течением времени, информации и динамически формируемых данных. К Web–узлам предъявляются требования, предполагающие формирование информации с учетом интересов конкретных пользователей. Кроме того, Web-страницы часто, например, в нашем случае, приходится формировать на основании информации, содержащейся в базах данных.
Заключение

В ходе выполнения работы магистра по данной теме было получено представление об архитектуре клиент-сервер и о роли этой технологии.
Были выполнены экспериментальные наработки клиент-серверной системы, базирующейся на Java Servlet и MIDlet технологиях. Производится передача контента между клиентом и сервером, связывающихся посредством GPRS.
В перспективе создание портала, способного принимать широкую разновидность контентов, расширение клиентской базы, адаптация одной из существующих БД для хранения специализированных типов информации.
Я считаю, что данная работа может быть использована как основа для дальнейшего изучения технологий, объединенных концепцией веб-серверов.
Литература

1. H. Мухамедзянов, Java. Серверные приложения, - Издательство: СОЛОН - Р, 2003

2. Роберт Орфали, Дэн Харки, "JAVA и CORBA в приложениях клиент-сервер"

3. Дуглас Камер, Дэвид Л. Стивенс, Сети TCP/IP, том 3. Разработка приложений типа клиент/сервер, издательство «Вильямс», 2002 г., 592 стр.

4. Фленов М.Е., Web-сервер глазами хакера: Проблемы безопасности Web-серверов; Ошибки в сценариях на PHP, Perl, ASP; SQL-инъекции

вверх
Для оформлении сайта использованы графические фрагменты из игры Winding Trail, что согласовано с её авторами