Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Оптимизация клиент-серверных приложений

Покупка
Новинка
Артикул: 831537.01.99
Доступ онлайн
2 000 ₽
В корзину
В методических указаниях сформулированы требования к выполнению курсового проекта по дисциплине «Оптимизация клиент-серверных приложений», даны рекомендации по оформлению, указаны критерии оценки, а также представлены рекомендуемые тематики работ. Предназначены для студентов, обучающихся в бакалавриате по направлению 09.03.02 «Информационные системы и технологии».
Жердев, А. А. Оптимизация клиент-серверных приложений : методические указания / А. А. Жердев. - Москва : Издательский Дом НИТУ «МИСиС», 2023. - 20 с. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2148217 (дата обращения: 27.07.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Москва 2023

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ

Университет науки и технологий МИСИС

ИНСТИТУТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И КОМПЬЮТЕРНЫХ НАУК

Кафедра инфокоммуникационных технологий

А.А. Жердев

ОПТИМИЗАЦИЯ КЛИЕНТСЕРВЕРНЫХ ПРИЛОЖЕНИЙ

Методические указания

Рекомендовано редакционно-издательским  
советом университета

№ 4352
УДК 004.9 
 
Ж59

Р е ц е н з е н т 
канд. техн. наук, доц. В.В. Стучилин

Жердев, Алексей Александрович.
Ж59  
Оптимизация клиент-серверных приложений : метод. 
указания / А.А. Жердев. – Москва : Издательский 
Дом НИТУ МИСИС, 2023. – 20 с.

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

по направлению 09.03.02 «Информационные системы и технологии».


УДК 004.9

 Жердев А.А., 2023
 НИТУ МИСИС, 2023
ОГЛАВЛЕНИЕ

Введение ......................................................................4

1 Задание на курсовой проект ........................................5
1.1 Сервис-ориентированная архитектура ....................5
1.2 Балансировщик нагрузки ......................................5
1.3 Отложенные вычисления (lazy evaluation) ...............6
1.4 Нагрузочное тестирование веб-сервиса ....................7
1.5 Кэширование .......................................................8
1.6 Шардинг, репликация и партицирование  
баз данных ................................................................9
1.7 Типовая оптимизация для frontend-приложения .... 11
1.8 Использование Single Sign-On (SSO) ...................... 11
1.9 Повышение уровня безопасности .......................... 12
1.10 Сокеты ............................................................ 13
1.11 Многопоточность .............................................. 13
1.12 Свой вариант (по согласованию  
с преподавателем) .................................................... 13

2 Этапы выполнения курсового проекта ........................ 14

3 Критерии выставления оценки .................................. 16

4 Требования к оформлению ........................................ 17
4.1 Требования к содержанию ................................... 17
4.2 Требования к оформлению .................................. 18
ВВЕДЕНИЕ

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

Необходимо оптимизировать клиентскую и (или) серверную 
часть программного обеспечения (база данных относится 
к серверной части). Для этой задачи необходимо использовать 
один или несколько инструментов или методов, 
указанных в настоящем пособии.
Представленный ниже материал – это краткое описание 

хорошо зарекомендовавших себя подходов и инструментов. 
Практическое применение потребует серьезной самостоятельной 
работы, в рамках которой вам необходимо самостоятельно 
изучить вопрос более детально, а затем адаптировать непосредственно 
для вашей задачи.
Многие темы курсовых проектов рассмотрены более детально 
в рамках следующих учебно-методических пособий:

 Практикум по дисциплине «Оптимизация клиентсерверных приложений». Часть 1;

 Практикум по дисциплине «Оптимизация клиентсерверных приложений». Часть 2.

1.1 Сервис-ориентированная архитектура

Программное обеспечение разделяется на отдельные сервисы. 
Каждый из них выполняет свою определенную функцию 
и связан с другими сервисами через API. Чаще всего каждый 
из сервисов имеет свою базу данных. Крайний случай сервисориентированной архитектуры называют микросервисной.
Подробнее об этом можно почитать тут: https://habr.
com/ru/company/oleg-bunin/blog/649319/.

1.2 Балансировщик нагрузки

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

на микросервисы либо невозможен, либо сопряжен с трудозатратами, которые не факт, что окупятся.
Альтернативой микросервисному подходу является способ, 
который позволяет запустить монолитное приложение на 
нескольких серверах.
Несколько одинаковых равнозначных копий монолитного 
приложения (либо некоторых его частей) поднимаются 
на нескольких серверах. Также в схему добавляется балансировщик 
нагрузки, который перенаправляет поступающие запросы 
на один из этих серверов. Чтобы такая схема сработала, 
необходимо, чтобы система не хранила состояний и общие 
узлы отсутствовали бы вовсе или были сведены к минимуму.
Как правило, после непродолжительных преобразований 
получается привести монолитное приложение к схеме, 
которая позволяет работать на нескольких серверах. Однако 
слабым местом является база данных (БД). Как правило, она 
все равно остается общей.
Подробней про балансироваку нагрузки можно почитать 
здесь:
https://habr.com/ru/company/first/blog/683870/
https://habr.com/ru/company/oleg-bunin/blog/423085/
http://nginx.org/en/docs/http/load_balancing.html
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

1.3 Отложенные вычисления (lazy evaluation)

Не все данные пользователю необходимо выдавать сразу 

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

но лучше воспользоваться имеющимися решениями. Лидерами 
здесь являются такие инструменты, как Apache Kafka 
и Rabbit MQ.
С полезными материалами можно ознакомиться здесь:
https://www.youtube.com/watch?v=dkp1_KXnOt4
https://upread.ru/art.php?id=911
https://habr.com/ru/company/southbridge/blog/550934/
Также можно использовать подход lazy evaluation для 

таких задач, как подгрузка пользователю только того контента, 
который он сейчас просматривает, и некоторых соседних. 
Например, быстрый просмотр изображений возможен, если 
при просмотре i-го изображения в память будут подгружаться 
i + 1 или даже i + 2 изображения. Таким образом, у пользователя 
будет мгновенный переход к просмотру следующего изображения, 
а пока он его просматривает, будут подгружаться 
соседние.
Аналогичный инструмент используется и при навигации 
по картам в таких привычных инструментах, как например 
Яндекс.Карты, да и практически во всех компьютерных 
играх.

1.4 Нагрузочное тестирование веб-сервиса

Если вы разрабатываете веб-приложение или API, то 

в качестве одной из задач курсового проекта вы можете провести 
нагрузочное тестирование. Например, с помощью инструмента 
Apache JMeter. Можно выполнить один или несколько 
видов нагрузочного тестирования:

 Performance;
 Stability;
Stress.
Для проведения качественного нагрузочного тестирования 
необходимо провести его в несколько этапов. Ниже представлен 
алгоритм, следование которому позволит повысить 
эффективность тестирования.

 Анализ требований и сбор информации о тестируемой 
системе.

 Конфигурация тестового стенда для нагрузочного тестирования.

 Разработка модели нагрузки.
 Выбор инструмента для нагрузочного тестирования.
 Создание и отладка тестовых скриптов.
 Проведение тестирования.
 Анализ результатов.

1.5 Кэширование

Может быть дополнительной задачей, так как в большинстве 
случаев кэширование устанавливается на уровне 
настроек приложения. Оценивается как самостоятельная задача 
только в том случае, если студент самостоятельно разработал 
и программно реализовал алгоритм кэширования.
Концепция кэширования довольно проста, часто запрашиваемый 
контент сохраняется поближе к потребителям. Например, 
браузер сохраняет в кэше картинки, js- и css-файлы. 
Эти данные сохраняются в специальных директориях на ПК 
пользователей и при последующих обращениях загружаются 
уже не из Интернета, а локально с диска. Специальными заголовками 
задается время жизни кэшированных данных, чтобы 
при последующих обращениях можно было их заменить 
на актуальные.
Вы наверняка обращали внимание, что самый первый 

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

Также можно повысить скорость обработки запросов, 

если считывать часто используемую информацию не из базы 
данных или из файлов, а из оперативной памяти. Доступ к 
оперативной памяти осуществляется гораздо быстрее, поэтому 
увеличение производительности, как правило, существенное 
и сразу заметно.
Многие средства разработки позволяют самому разработчику 
решать, что хранить в оперативной памяти, а что нет. 
Но также есть и специализированные решения, которые устанавливаются 
дополнительно. В этой области хорошо зарекомендовали 
себя такие InMemory базы данных, как Memcahed 
и Redis.
С полезными материалами можно ознакомиться здесь:
https://habr.com/ru/post/41166/
https://habr.com/ru/post/42607/
https://www.baeldung.com/memcached-vs-redis
https://aws.amazon.com/ru/elasticache/redis-vs-memcached/

1.6 Шардинг, репликация и партицирование 
баз данных

Шардинг позволяет разделить базу данных на части. 

Фактически шардинг является единственным гарантированным 
долгосрочным инструментом, позволяющим сохранять 
высокую производительность базы при любых ее размерах.
Партицирование (рисунок 1) является аналогом шардинга, однако базы разделяются по функциональному признаку. 
Часто используемые данные отделяются от редко используемых.

Хранение данных может осуществляться в разных 

СУБД. Например, для логов имеет смысл использовать noSQLрешения, но другие части буду работать на SQL-движке. Зача
стую партицирование используется наряду с разделением приложения 
на сервисы (сервис-ориентированная архитектура). 
Использование нескольких СУБД является типичной практикой 
для крупных проектов.

Рисунок 1 – Пример партицирования

Репликация баз данных может использоваться как самостоятельно, 
так и как дополнительное решение вместе с 
шардингом или партицированием. При репликации настраивается 
автоматическая синхронизация данных между базой 
данных и ее несколькими копиями. Одна из копий обязательно 
должна быть master, а остальные выполняют роли slave.
Данные, которые добавляются на master, реплицируются 
на другие slave базы данных с небольшой задержкой 
(порядка нескольких секунд). Указанный подход позволяет:

 повысить отказоустойчивость системы, так как если 

master вышел из строя, то его можно оперативно заменить 
на slave;

 повысить быстродействие системы, так как master 

можно использовать для записи, а slave – для чтения. Чтений 
обычно больше, можно создать много реплик и читать сних.
Подробнее можно почитать здесь:
https://highload.today/sharding-i-replikatsiya/
https://habr.com/ru/articles/56702/
https://habr.com/ru/articles/66151/
https://metanit.com/nosql/mongodb/
1.7 Типовая оптимизация для frontend-приложения

Типовые способы оптимизации клиентской части приложения 
позволяют существенно повысить удобство работы 
с ним. Ниже перечислены основные варианты, которые можно 
использовать в рамках выполнения курсового проекта:

 использование специализированных фреймворков (Angular, React, Vue и т.п.);

 применение бандлеров. Позволяют собирать js- и cssфайлы в пучок (bundle). Загрузка одного-двух больших файлов, 
как правило, осуществляется быстрее, чем нескольких 
сотен мелких;

 толстый клиент – перекладывание существенной части 
бизнес-логики на сторону фронт-енда, а с бэком обмениваться 
только данными;

 минимизация картинок (изменение разрешения, сжатие);

 использование потокового видео;
 ленивая загрузка (загружать только то, до чего пользователь «
долистал», а не сразу все);

 убрать лишнее:

 неиспользуемые пакеты,
 лишние CSS (PurgeCSS);

 минимизация JS и CSS-кода (Online CSS Minifier, 

Online JavaScript Minifier);

 размещать «тяжелые» скрипты в конце страницы перед 
закрывающим тегом body.
Указанный перечень не является полным. Набор инструментов 
оптимизации может предоставляться также конкретным 
фреймворком.

1.8 Использование Single Sign-On (SSO)

SSO – это технология единого входа. Примером ее использования 
является авторизация на одном ресурсе с помо
Доступ онлайн
2 000 ₽
В корзину