- •Оглавление
- •Аналитический раздел
- •Общая постановка задачи
- •Классические задачи принятия решений.
- •Многостадийный процесс
- •Задача линейного программирования
- •Задача о распределении ресурсов
- •Транспортная задача
- •Формула 11. Транспортная задача
- •Вывод по аналитическому разделу
- •Конструкторский раздел
- •Сценарий работы программы
- •Расчет функции прогнозируемой прибыли
- •Формула 13
- •Предлагаемый алгоритм работы программы
- •Алгоритмформирования групп для текущего распределения
- •Алгоритм поиска нового распределения для данного курса
- •Диаграмма классов
- •Спецификация основных классов
- •Требования к бд
- •Концептуальная модель базы данных
- •Спецификации таблиц
- •Вычисление расстояния поGps-координатам
- •1. Сферическая теорема косинусов
- •2. Формула гаверсинусов
- •Формула 16. Формула гаверсинусов
- •3. Модификация для антиподов
- •Формула 17. Формула для антиподов
- •Технологический раздел
- •Требования к вычислительной системе
- •Выбор субд
- •Выбор среды разработки
- •Выбор языка программирования
- •Используемые технологии asp.Net
- •Ado.Net
- •Пользовательский интерфейс
- •Интерфейс приложения
- •Интерфейс веб-приложения
- •Развертывание системы
- •Функциональная декомпозиция системы по уровням
- •Исследовательский раздел
- •Исследование зависимости времени работы алгоритма от числа учащихся
- •Нагрузочное тестирование
- •Вывод по исследовательскому разделу
- •Организационно-экономический раздел
- •Организация и планирование процесса разработки
- •Расчет трудоемкости выполнения работ
- •Расчет количества исполнителей
- •Календарный план-график разработки программного продукта
- •Расчет стоимости программного продукта
- •Расчет экономической эффективности
- •Промышленная экология и безопасность
- •Анализ вредных и опасных факторов
- •Освещенность
- •Электрические и магнитные поля
- •Статическое электричество
- •Электробезопасность
- •Опасность возникновения пожара
- •Вибрация
- •Травматизм
- •Микроклимат
- •Расчет системы освещенности
- •6.2.1 Расчет площади светопроемов
- •Расчет искусственного освещения
- •6.3.1 Общее освещение
- •6.3.2 Местное освещение
- •Заключение
- •Список использованных источников
Нагрузочное тестирование
Очень часто появляется необходимость протестировать работу сервера под реальной нагрузкой. Например, предприятие хочет закупить новое оборудование для развертываемого приложения, и необходимо узнать, насколько мощное оборудование необходимо закупать. Полезно было бы посмотреть, как поведет себя сервер, если с ним будут работать одновременно, например, 100 пользователей, но непонятно, как можно организовать такую проверку.
Данное исследование будем проводить на персональном компьютере с процессором Core i5 2410M 2300 Mhz. Это процессор, имеющий 2 физических ядра, на каждом из которых работают по 2 логических. Остальные характеристики компьютера не являются столь важными для данного исследования.
Для выполнения исследования, нам необходимо имитировать множества обращений клиентов к серверу. Для этого было разработано приложение, позволяющее ежесекундно посылать обрабатываться большое количество запросов к серверу. Данное приложение является многопоточным и рассчитано на то, что процессор машины будет иметь несколько физических или логических ядер. При помощи этого приложения можно определить загруженность процессора, среднее число обрабатываемых запросов (в секунду), а так же можно выбрать степень сложности запроса (простой, средний или сложный). Вид приложения представлен на рисунке .
Приложение позволяет нам построить связь между числом обрабатываемых запросов в единицу времени и текущей загруженностью процессора. Соберем данные для трех запросов различной сложности, отобразим их в таблице и построим соответствующие графики.
Рисунок 29. Приложение для осуществления нагрузочного тестирования
Стресс-тестирование при простом запросе
Для данного тестирования использовался следующий запрос: Выбрать пользователя, ID которого равен 1
Select *from tblUsers Where UserID=1
Результаты тестирования представлены в таблице .
Таблица 24. Тестирование на простом запросе | |||||
Число заявок (в сек) |
0 |
6000 |
9800 |
11400 |
12700 |
ЦП |
3% |
40% |
77% |
98% |
100% |
Рисунок 30
Стресс-тестирование на запросе средней сложности
Для данного теста использовался запрос: выбрать все совершенные платежи клиента с ID, равным 1
EXEC sp_get_payments 1; (запрос обращается к 4 таблицам)
Результаты тестирования представлены в таблице .
Таблица 25. Тестирование на простом запросе | |||||||
Число заявок (в сек) |
0 |
160 |
230 |
520 |
630 |
650 |
670 |
ЦП |
3% |
30% |
42% |
52% |
80% |
98 |
100 |
Рисунок 31
Стресс-тестирование на сложном запросе
Для данного теста использовался запрос: показать все курсы, на которые может записаться восьмиклассник, если предмет обучения включает комбинацию символов “англ”, а название курса включает комбинацию символов “adv”
EXEC sp_get_courses_using_class '%англ%','%adv%', 8
(запрос обращается к 6 таблицам)
Результаты тестирования представлены в таблице .
Таблица 26. Тестирование на простом запросе | |||||
Число заявок (в сек) |
0 |
110 |
240 |
310 |
330 |
ЦП |
3% |
35% |
58% |
85% |
100% |
Рисунок 32
Результаты показали, что степень загруженности процессора зависит от степени сложности процессора не меньше, чем от числа обрабатываемых запросов в единицу времени. Так, например, сервер будет работать на всю мощь, если к нему каждую секунду будут обращаться 12000 пользователей с простым запросом, или всего 330 со сложным. Такие результаты вполне могут устроить тех, кто рассчитывает посещаемость своего сайта в 1000-10000 человек в день. Но для сайтов с большой посещаемостью, этого недостаточно. Основное и при этом простое правило, которого должен придерживаться веб-программист, звучит так: “Страница должна грузиться не более 3-5 секунд”. И если это происходит дольше, нужно переписывать его код заново, либо использовать другие решения.
Рассмотрим зависимость времени, требуемого для загрузки страницы, от числа запросов, направляемых к серверу ежесекундно. Так как число запросов в единицу времени непосредственно влияет на производительность компьютера, достаточно будет провести анализ на запросе любого уровня сложности.
Для вывода результатов тестирования, поместим на страницу сайта поле TextBox, куда будет переноситься информация о времени загрузки страницы. После этого начнем непрерывно посылать запросы к базе данных, постепенно увеличивая их число. Результаты отразим в таблице и на графике.
Таблица 27. Время загрузки веб-страницы при различных уровнях загруженности сервера | |
Время загрузки страницы, когда никто не обращается к базе и ЦП работает на 1-3% |
Время загрузки страницы при максимально возможном числе обращений к базе, когда ЦП работает на 98-100% |
0 с 153 мс |
0 с 812 мс |
0 с 262 мс |
0 с 966 мс |
0 с 98 мс |
0 с 396 мс |
0 с 112 мс |
1 с 72 мс |
0 с 394 мс |
0 с 403 мс |
0 с 324 мс |
0 с 850 мс |
0 с 361 мс |
1 с 417 мс |
0 с 25 мс |
0 с 862 мс |
Среднее: 0 с 216 мс |
Среднее: 0 с 847 мс |
При максимальной загрузке сервера время загрузки веб-страницы в 4 раза больше, чем когда ЦП сервера не загружен. Тем не менее, это время считается удовлетворительным по отношению к веб-сайту, так как меньше 3 секунд. Такие результаты были получены в результате следования основным принципам программирования и создания веб-сайтов, а именно:
Использование хранимых процедур для получения доступа к данным;
Хеширование основных запросов;
Загрузка не всей веб-страницы, а только необходимых данных (при использовании Ajax и Jscript);
Улучшение и оптимизация кода.
Как еще можно увеличить скорость загрузки страниц:
Оптимизация таблиц стилей CSS
Не редко бывает, что таких CSS стилей оказывается несколько, а, ведь браузер делает запрос для каждого стиля, на что тратится дополнительное время. В связи с этим лучше всего объединить существующие стили в один файл.
Но это ещё не всё, полученный файл можно оптимизировать. Удалить пробелы, ненужные строки, сократить информацию о цветах. Например, заменить белый цвет “#FFFFFF” на короткое написание “#FFF”. Всё это в итоге скажется на размере конечного файла и процесс загрузки пусть немного, но ускорится.
Таблицы стилей лучше всего подключать в области тега HEAD, он находится в верхней части веб-страницы;
Оптимизация JavaScript
Коды самих скриптов и строк для подключения дополнительных библиотек, в отличие от CSS стилей, нужно помещать в конец страницы сайта. Связано это с тем, что браузер, находя JavaScript код, приостанавливает загрузку страницы до того момента пока не закончит обработку этого кода полностью. Кроме того, как и в случае с таблицами стилей, файлы со скриптами также стоит объединить;
Использование CSS спрайтов
В случае использования технологии CSS спрайтов всё множество запросов на картинки заменятся на один единственный. Суть этого подхода в том, что создаётся одна картинка, в которой в определённых местах с заранее известным местоположением размещаются несколько, в среднем до 20, которые ранее подгружались отдельно. Теперь не нужно писать несколько строк с подключением каждой картинки, а указать одну строку для вызова общей, и в дальнейшем просто указать определённые отступы для конкретной картинки, которая необходима. Таким способом мы сократим число запросов от браузера примерно с 20 до 1!
Увеличение производительности серверной машины
Использование нескольких серверов