Автор работы: Пользователь скрыл имя, 29 Апреля 2014 в 17:16, дипломная работа
Web-приложение – клиент-серверное приложение, в котором сервером выступает web-сервер, клиентом программа или устройство, способное получить доступ к web-серверу. Логика web-приложения распределена между сервером и клиентом, хранение данных осуществляется преимущественно на сервере, обмен информацией происходит по сети.
Web - сервер — это сервер, принимающий HTTP-запросы от клиентов, обычно веб-браузеров, и выдающий им HTTP-ответы, обычно вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными.
CMS (Content management system) – компьютерная система или программа, используемая для обеспечения и организации совместного процесса создания, редактирования и управления текстовыми и мультимедиа документами.
Обозначения и сокращения 6
Определения 7
Введение 9
1. Описание основных используемых технологий и языков программирования 10
1.1. Общие сведения 10
1.2. Язык программирования PHP 10
1.3. Web-сервер Apache 11
1.4. СУБД MySQL 12
1.5. Язык программирования JavaScript 12
1.6. Технология AJAX 13
1.7. Таблица стилей CSS 14
1.8. Общая схема работы web-приложения 14
2. Описание системы «1С – Битрикс: Управление сайтом» 16
2.1. Общие сведения 16
2.2. Преимущества и недостатки системы 16
2.3. Целесообразность использования системы 18
2.4. Сравнение с другими системами 19
3. Описание API системы «1С – Битрикс: Управление сайтом» 21
3.1. Общие сведения 21
3.2. API модуля «Главный модуль» 21
3.3. API модуля «Информационные блоки» 23
4. Формирование требований к сценариям работы web-приложения 26
4.1. Общие сведения 26
4.2. Список требований 26
5. Диаграмма информационных блоков 29
5.1. Общие сведения 29
5.2. ER – диаграмма данных web-приложения 29
5.3. Определение информационных блоков 31
6. Описание программных компонентов 34
6.1. Создание общей структуры страниц web-приложения 34
6.2. Реализация структуры страниц web-приложения, физическая структура 36
6.3. Список программных компонентов 39
6.3.1. Компонент «Список всех игр» 39
6.3.2. Компонент «Список новых и выходящих игр» 40
6.3.3. Компонент «Список лучших игр» 42
6.3.4. Компонент «Список 100 лучших игр» 43
6.3.5. Компонент «Фильтр по играм» 44
6.3.6. Компонент «Поиск по играм» 45
6.3.7. Компонент «Автоподсказки в поиске» 46
6.3.8. Компонент «Список обзоров к игре» 47
6.3.9. Компонент «Детальная страница игры» 48
6.3.10. Компонент «Форма поиска» 48
6.3.11. Компонент «Страница разработчика игры» 49
6.3.12. Компонент «Список лучших игр за год» 50
6.4. Диаграмма связей между страницами web-приложения и компонентами 51
6.5. Особенности реализации сценариев работы web-приложения. 51
6.5.1. Общие сведения 51
6.5.2. Сохранение состояния страниц при использовании AJAX – запросов 52
6.5.3. Обработка событий панели управления. 55
7. Резервное копирование данных web-приложения. Система управления версиями 59
7.1. Общие сведения 59
7.2. Реализация резервного копирования 59
7.3. Система управления версиями 62
7.3.1. Описание системы Subversion 62
7.3.2. Настройка Subversion для работы с web-приложением 64
8. Нагрузочное тестирование 69
8.1. Общие сведения 69
8.2. Техника проведения нагрузочного тестирования 69
8.3. Оценка результатов тестирования 71
Заключение 76
Список использованных источников 77
Приложение A. Принцип работы системы «1С – Битрикс: Управление сайтом» 78
А.1. Общие сведения 78
А.2. Модульная структура системы 78
А.2.1. Главный модуль 79
А.2.2. Модуль «Управление структурой» 79
А.2.3. Модуль «Информационные блоки» 80
А.3. Компоненты 81
А.3.1. Общие сведения 81
А.3.2. Файловая структура компонента 81
А.3.3. Схема обмена данными между файлами компонента 85
А.3.4. Публичный раздел системы 87
А.3.4.1. Порядок загрузки страницы web-приложения 87
А.3.4.2. Подключение модулей системы 87
А.3.4.3. Подключение шаблонов web-приложения 88
А.3.4.4. Подключение компонентов web-приложения 88
Приложение Б. Требования заказчика к работе web-приложения и дизайн-концепция 90
Приложение В. Исходные коды программных компонентов 95
В.1. Компонент games.calendar 95
В.2. Компонент games.raiting 99
В.3. Компонент games.filter 102
В.4. Компонент games.search 113
В.5. Компонент games.detail 117
В.6. Компонент search_autocomplete 121
В.7. Компонент reviews.list 126
В состав дистрибутива GNU/Linux, установленного на компьютере web-приложения, Subversion входит и установлен. Для настройки системы Subversion, таким образом, необходимо выполнить следующую последовательность действий:
Создание и настройка репозитория.
Для того чтобы создать и настроить репозиторий, необходимо в командной строке операционной системы выполнить команду svnadmin create <имя_репозитория>. В нашем случае репозиторий будет носить имя metagames. Соответственно, команда будет иметь вид:
[root@v8733 ~]# svnadmin create /home/svn/metagames
Все хранилища расположены в директории /home/svn.
Далее следует настроить доступ к репозиторию, указав логин и пароль доступа к репозиторию, название репозитория и права доступа разных групп пользователей к репозиторию. Для этого нужно править файл svnserve.conf, находящийся в файле /home/svn/metagames:
anon-access=none
auth-access=write
password-db=passwd
realm=metagames
В данном файле мы запретили доступ к репозиторию всем пользователям, кроме авторизованных, указали имя репозитория (metagames) и указали имя файла, содержащего логин и пароль доступа к репозиторию (passwd).
После внесения изменений необходимо перезапустить процесс системы Subversion, выполнив последовательно команды killall и svnserve.
[bitrix@v8733 ~]# killall svnserve;
[bitrix@v8733 ~]# svnserve –d –r /home/svn
Важно отметить, что процесс web-сервера Apache (httpd) на компьютере web-приложения запущен от имени пользователя с именем bitrix. Соответственно, владельцем файлов web-приложения является указанный выше пользователь. Поэтому запуск процесса системы Subversion svnserve следует выполнить от имени пользователя с именем bitrix, чтобы обеспечить сохранность настроек доступа и владельца изменяемых файлов.
Стандартная структура файлов верхнего уровня репозитория содержит следующую структуру:
branches
trunk
tags
Для того чтобы зафиксировать такую файловую структуру в репозитории, необходимо создать какую – нибудь папку в файловой структуре компьютера (например, init) web-приложения, выполнить команду checkout
svn checkout svn://metagames.ru/metagames/ init
, создать в данной папке указанные выше подпапки, выполнить для каждой из созданных подпапок команду add
svn add init/branches
….
и выполнить команду commit
svn commit init –m “Start doings”.
После этого в репозитории будет создана и версионирована требуемая структура.
Версионирование файлов и папок web-приложения.
Для того, чтобы версионировать файлы и папки web-приложения, нужно заранее определиться, какие именно файлы и папки стоит заносить в репозиторий, какие нет. После этого для выбранных папок следует выполнить команду checkout, например:
svn checkout svn://metagames.ru/metagames/t
Далее следует выполнить команду добавления требуемых файлов и подпапок выбранной папки и выполнить команду add.
svn add home/bitrix/www/index/all/
svn add home/bitrix/www/index/index.
В конце следует зафиксировать изменения в репозитории, выполнив команду commit
svn commit home/bitrix/www/index –m “Сценарии всех платформ“.
Таким образом, выполнив данные процедуры для всех папок и файлов web-приложения, можно сформировать структуру репозитория.
Создание рабочей копии на локальном компьютере.
Теперь, когда репозиторий на компьютере web-приложения создан, можно выполнить снимок репозитория и создать рабочую копию репозитория на удаленном компьютере. Для этого можно воспользоваться программой – клиентом системы Subversion Tortoise SVN. Данная программа позволяет работать с репозиторием, вносить изменения в файлы и фиксировать их. В данной программе в графическом режиме доступны команды update, add, commit и т.д. В процессе разработки web-приложения на локальном копьютере была развернута копия web-приложения, затем для корневой папки с помощью команды Tortoise SVN checkout было выполнено версионирование файлов локального компьютера. Дальнейшие изменения файлов web-приложения проходили и проходят по следующему сценарию:
Данная технология управления версиями была использована при разработке web-приложения и используется в данный момент для поддержания работы web-приложения и обеспечения возможности работы над web-приложением нескольких разработчиков. Также стоит отметить важное для разработки свойство сохранения истории разработки в виде версий, которое позволяет следить за процессом разработки и делать откаты изменений в сценариях web-приложения, если разработчиками допущены какие – либо ошибки. Плюсом является то, что для доступа к файловой структуре web-приложения более не требуется доступов по протоколам FTP и HTTP, весь процесс разработки проходит на локальном компьютере, что позволяет максимально отладить сценарии перед обновлением репозитория и файлов web-приложения. Минусами использования системы управления версиями при разработке web-приложения является то, что от разработчиков в данном случае требуется наличие знаний по работе с данной системой. Также следует отметить то, что приходится разворачивать локальную копию web-приложения на компьютере разработчика, но наличие таких пакетов разработки, как «Джентльменский набор Web-разработчика», заметно упрощает данный процесс.
Нагрузочное тестирование применяется для того, чтобы определить, насколько производительно разработанное web-приложение и насколько оно готово к обслуживанию большого количества клиентов. Проведение нагрузочного тестирования, которое еще называют «стресс-тест», позволяет не только определить среднее значение пользователей, которые могут быть обслужены web-приложением без существенных задержек, но и определить «узкие места» web-приложения, т.е. ошибки в работе сценариев web-приложения, большие расходы ресурсов при запросах к СУБД, неверные конфигурации web-сервера и другие ошибки, которые могут вызвать замедление работы web-приложения.
Для того чтобы провести нагрузочное тестирование, необходимо выполнить следующие действия:
Имитация нагрузки
Требования к способам имитации нагрузки:
Наиболее подходящим средством является программа Siege [12], которая реализует указанные выше требования. Данная программа должна быть установлена на сторонний компьютер с операционной системой GNU/Linux, в нашем случае – GNU/Linux Ubuntu 10.4. После установки программу можно запустить из командной строки ОС.
Получение показателей нагрузки.
Для того чтобы получать показатели производительности, в системе «1С – Битрикс: Управление сайтом» предусмотрен модуль «Производительность». Данный модуль предоставляет возможность для просмотра результатов нагрузки на web-приложение, таких как время генерации страницы, количество и время запросов к СУБД в сценариях компонентов, расположенных на странице web-приложения и средние показатели нагрузки на компьютер web-приложения при обращении пользователя к той или иной странице. Для того чтобы осуществить анализ нагрузки на компьютер web-приложения, в модуле «Производительность» необходимо запустить временной сценарий, который принято в системе называть «панелью производительности».
Рисунок 9 – Данные, предоставляемые модулем “Производительность”
Таким образом, техника нагрузочного тестирования, выбранная мной, заключается в сколь возможно одновременном запуске программы Siege на стороннем компьютере и панели производительности на компьютере web-приложения и последующей оценки данных, предоставляемых панелью производительности после завершения имитации нагрузки на компьютер web-приложения.
Проведение нагрузочного тестирования.
Для того, чтобы начать имитацию нагрузки на компьютер web-приложения, необходимо запустить в командной строке ОС стороннего компьютера процесс программы Siege:
[root@v8733 ~]# siege -c 50 -d 1 -t300S -f /home/dima/access_log.log
-c 50 – количество одновременных запросов к компьютеру web-приложения, t300S – время имитации, -d 1 – интервал между запросами (от 0 до 1 секунды), /home/dima/access_log.log – файл с адресами, на которые необходимо осуществлять запросы. Наиболее простым способом получения файла access_log.log является написание специальной функции, которая будет вызываться каждый раз при загрузке какой – либо страницы web-приложения и фиксировать в определенном файле уникальные адреса страниц. Далее следует открывать страницы web-приложения, чтобы файл автоматически пополнялся адресами. Примерное количество адресов, достаточных для выполнения имитации, будем считать 150 адресов. Это число больше, чем физическое число страниц web-приложения, но в списке адресов имеются адреса запросов к страницам с разными параметрами GET и POST.
Для реализации сбора адресов была написана функция:
void write_access_log(string filepath)
, где filepath – имя файла, в который
будут записаны адреса
После запуска процесса Siege следует сразу же запустить панель производительности. В течение некоторого времени будет осуществляться анализ и фиксация данных нагрузки и в конце будет выведен результат в виде таблицы, по которому можно будет судить о способности web-приложения выдерживать нагрузки.
Для проведения первого теста было выбрано число одновременных пользователей, равное 100 (с=100) и время имитации, равное 300 секунд (t=300S).
[root@v8733 ~]# siege -c 100 -d 1 -t300S –i -f /home/dima/access_log.log
При проведении данного теста были получены следующие результаты:
Таблица 2 – результаты теста 1; с=100, t=300S
Адрес страницы |
Нагрузка, % |
Среднее время формирования страницы, сек |
/pc/index.php |
49.43 |
6.0035 |
/index/new/all/index.php |
18.92 |
10.6723 |
/pc/new/index.php |
9.87 |
3.7513 |
/detail/index.php |
5.99 |
1.7449 |
/index/top/index.php |
1.39 |
3.0484 |
/xbox_360/index.php |
1.20 |
2.0960 |
/about/index.php |
0.80 |
1.9985 |
/advertisement/index.php |
0.74 |
1.8442 |
/contacts/index.php |
0.63 |
1.5661 |
/pc/upcoming/index.php |
0.57 |
1.6750 |
/pc/top/index.php |
5.62 |
0.4352 |
/search/index.php |
2.92 |
0.7424 |
/index/new/index.php |
1.94 |
2.6039 |
Данные результаты позволяют судить о том, что в сценариях компонентов имеются серьезные недочёты, из-за которых используется большое количество ресурсов компьютера и замедляется процесс формирования страницы и отправки её пользователю. Наиболее серьёзному анализу следует подвергнуть компоненты страниц /index/new/all/index.php. Как следует из диаграммы, размещенной на рисунке 7 (раздел 6), на данной странице находится компонент games.calendar. В процессе реализации логики работы компонента для получения свойств элементов информационного блока, указанного в настройках компонента, используется метод _CIBElement::GetProperties(), который выбирает все свойства элемента, следствием чего стало большое число запросов к web-приложению и формирование большого файла кэша (свыше 1 Мб). Данный метод был использован для универсальности работы компонента: в одном из шаблонов компонента можно было бы получить значение любого из свойств без дополнительных действий. Но платой за универсальность является замедление работы компонента. После совещания с заказчиком было принято решение изменить сценарий работы компонента, устранив указанные выше недостатки и тем самым понизив универсальность компонента, но значительно повысив производительность работы компонента.
После внесения изменений для тех же показателей был проведен второй тест, который дал результаты, указанные в таблице 3.
Таблица 3 – результаты теста 2. с=100, t=300S
Адрес страницы |
Нагрузка, % |
Среднее время формирования страницы, сек |
/pc/index.php |
29.72 |
0.9559 |
/index/new/all/index.php |
22.06 |
0.6110 |
/pc/new/index.php |
4.13 |
0.7122 |
/detail/index.php |
5.37 |
0.4817 |
/index/top/index.php |
2.11 |
0.4624 |
/xbox_360/index.php |
1.51 |
0.6463 |
/about/index.php |
0.48 |
0.2360 |
/advertisement/index.php |
0.72 |
0.5875 |
/contacts/index.php |
0.48 |
0.4291 |
/pc/upcoming/index.php |
1.03 |
0.9263 |
/pc/top/index.php |
3.31 |
1.0613 |
/search/index.php |
9.08 |
1.9390 |
/index/new/index.php |
3.43 |
0.4970 |