Модернізація серверного ПЗ для оптимізації віддачі контенту за запитом



В тезах був проаналізований вплив деяких критеріїв налаштування програмного забезпечення серверу та їх вплив на швидкість віддачі контенту за запитом. Була змодельована ситуація навантаження на сервери apache-сервер та nginx-сервер змінено основні параметри в налаштуваннях бази даних та моніторинг їх впливу на обробку запитів за обраним критерієм – швидкість завантаження сторінки.

Ключові фрази: Веб-сервер, бази даних, nginx-сервер, apache-сервер, модернізація серверного ПЗ, покращення швидкості завантаження сторінки.

Improving server settings software to optimize content return by request

Stepanyuk A.I.

Poltorak V.P.

Ukraine, Kyiv

Tags: Web-server, nginx, apache, improving server settings, page speed load improving.

Annotation: In theses analyzed the influence of certain criteria server software settings and their effect on the rate of return for content. The situation was simulated load on servers apache-server and nginx- server modified main options in database and monitor their impact on the processing of requests for selected criteria - speed pageload

Вступ

Впроцесі розробки високо навантаженого сервісу з передачі медіа, а саме аудіо та відео потоків в режимі реального часу постала проблема швидкості завантаження контенту зі сторони користувача. Було вирішено провести дослідження які параметри налаштування ПЗ необхідно змінити для більш швидкої віддачі контенту за запитом.

Дослідження проводились таким чином щоб всі користувачі знаходились в Україні. Дев’яносто п’ять відсотків навантаження на сервери імітувалось скриптами. Інші п’ять відсотків реальні користувачі. Отже загальна кількість умовних користувачів на сайті було 10 тисяч. Середня кількість звернень до БД та apache-серверу ~ 1000.

Отже на нашу думку у використанні високо навантаженого проекту значну роль відіграє налаштування серверів, та ПЗ, а надто у сервісу типу онлайн стріму – система що віддає відео та аудіо зображення в режимі реального часу, та й являється одночасно хостингом відео, з можливістю його онлайн перегляду. Умовно поділимо множину файлів нашого проекту на складові частини, яких дві: статичний та динамічний контент. Статичний контент обробляється nginx-сервер – веб сервером, який є високо продуктивний, та буде займатися віддачею статичного контенту, а саме: картинок, файлів формату html та css, аудіо та відео файлів. Динамічним контентом або бекендом всього сайту, що складає переважно файли формату php, буде оброблятися apache-сервером. Таке розподілення обов’язків знімає з apache-сервера усе навантаження по запитах статичного контенту адже передає його nginx-серверу який в свою чергу їх обробляє поки apache-сервер обробляє динамічний контент.

Всі користувачі сайту використовують ресурси сервера, переглядають відео, або слухають онлайн лекції, це створює значне навантаження на сервер та серверну базу. Apache-сервер та база даних БД (в нашому випадку MySQL 5.5) постійно змагаються за серверні ресурси.

Отже умовно будемо вважати що кожним розділом обробки даних займається свійсервер – обробкою php файлів та динамічного контенту буде займатися apache-сервер, а обробкою статичного контенту, html, css файлів, картинок та відео буде займатися nginx-сервер.

Умовно розділимо статичний контент на дві частини, це необхідно для того щоб краще зрозуміти які параметри краще редагувати:

««Легкий» контент на який припадають файли типу html, css, js, xml, rss,txt – добре піддається стисканню, отже будемо стискати їх використовуючи функцію gzip.

«Важкий» контент відео та аудіо-файли. Такі типи файлів значно залежать від дискової системи, кількості оперативної пам’яті, та пропускної властивості каналу, адже вони великі за розміром, тому необхідні велика швидкість їх передачі.»[2] Задача роздачі такого типу контенту поділяється на дві підзадачі – зберігання та роздача контенту. В випадку з нашим проектом, проект займається роздачею відео, та передачі медіа в режимі реального часу отже основне звернення буде саме до важкого контенту - відео, тобто необхідно швидко обробити великі об’єми інформації та зберегти на диск, та так само швидко віддати за запитом користувача. Додатково підключаємо ще один резервний каналзі швидкістю 1 ГБ\с (резервний канал), що спілкується з іншим сервіс провайдером. Підключення налаштоване за допомогою динамічного протоколу маршрутизації BGP, що дає змогу за замовчення використовувати обидва канали, і відповідати на запити по тому каналу звідки прийшов запит. Налаштовуємо на сервері RAID масив 10 з чотирьох дисків. Обрали саме 10-й рейд масив адже він являється найнадійнішим варіантом для зберігання даних, це зумовлено тим що запис даних на цю систему відбувається послідовно на декілька дисків. Швидкість зчитування, та запису даних на диск є високою [1].

Конфігурація тестових серверів обрана з доступних варіантів. Отже кінцевий варіант конфігурації серверу наведений в таблиці 1.

Табл. 1 – Набір характеристик тестового серверу.

Критерієм оцінки якості обрано швидкість завантаження сторінок, адже швидкість віддачі контенту за запитом це показник оптимізації серверного забезпечення та сервера для користувача. Показник високої швидкості віддачі контенту сторінки користувачу єдине що його цікавить. Чим менше користувач чекає на необхідну йому інформацію тим краще. На момент проведення дослідження показники швидкості віддачі контенту наведені в таблиці 2 без попередньої оптимізації серверного ПЗ.

Табл. 2 – Середні показники швидкості завантаження сторінки вебсайту.

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

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

Дослідження системи проводилось на реальному сервері шляхом зміни наступних параметрів які впливають тим чи іншим чином на ПЗ щодо звернення до нього за запитом.

Оптимізація бази даних MySQL полягає у тому щоб зупинити значний потік запитів до БД який може не витримати навантаження, а, також, в оптимізації віддачі запитів типових запитів, а саме зберігання таблиць в кеші і їх миттєвої віддачі за наступним таким самим запитом.

Всі показники змінювалися відповідно до потужностей серверу, та кількості відвідувачів під час нашого імпровізованого навантаження наступним чином:

back_log - кількість з'єднань, які можуть знаходиться в черзі до того моменту, як сервер перестане відповідати на нові запити. Так як проект вважається високо навантаженим, то обираємо 6000 звернень. Як показують дослідження більша кількість звернень до нашого серверу погіршує швидкість обробки запитів.

max_connections = 1700 - скільки підключень може бути прийнято сервером, оптимальний показник який ми використовуємо відповідно до потужностей серверу та кількості користувачів.

table_cache = 3096 Відкриття таблиці вимагає деяких ресурсів, отже цей параметр відповідає за кількість відкритих таблиць які очікують наступного з'єднання деякий час після виконання останнього.

tmp_table_size = 64M Параметр відповідає за максимальний розмір тимчасової таблиці, що вміщуєтьсяв пам'яті. Якщо таблиця його досягає вона зберігається на диск. Отже необхідно намагатися що б таблиць на диску створювалося як можна менше.

thread_cache_size = 4096 Максимальна кількість потоків, які залишаються для повторного використання після виконання запиту. Корисно тримати достатнім для того що б MySQL якомога менше робив нових потоків і використовував старі.

Частина оптимізуючих налаштувань що відноситься до налаштувань Nginx-сервер виконувались наступним чином:

Gzip стискання допомагає швидше передавати дані статичного контенту шляхом зменшення ваги файлів що в свою чергу пришвидшує їх передачу. Отже включаємо gzip стискання для нашого проекту.

Вмикаємо online пакування динамічних файлів:

Після проведення вказаних вище маніпуляцій з серверним ПЗ ми отримуємо наступні показники швидкості завантаження сторінок, що наведені у Табл. 3.

Табл. 3 - Оптимізовані середні данні швидкості віддачі контенту за запитом

Висновок

Проведене дослідження показало, що серверне ПЗ, оптимізоване належним чином, дає змогу підвищити швидкість обслуговування клієнтів у сенсі видачі відео контента на 15% у порівнянні з не оптимізованими налаштуваннями ПЗ сервера.

Програмна оптимізація серверу являється невід’ємною частиною для високо навантажених проектів, вони дозволяють більш гнучко використовувати доступні потужності, та досягати значного покращення результатів зі швидкості доступу до різних частин сайту при невеликих обсягах тієї ж самої потужності серверів.

Перелік посилань

  1. RAID [Електронний ресурс] / Вікіпедія – 2016 – Режим доступу: https://ru.wikipedia.org/wiki/RAID#RAID\_0.2B1

  2. Черный О. Тюнинг nginx-сервер [Електронний ресурс] / Черный Олег // Хабрахабр – 2009 –Режим доступу: https://habrahabr.ru/post/56497/

  3. Ставинский А. Оптимизация связки Nginx-сервер, Apache, PHP, MySql [Електронний ресурс] / Ставинский Антон// Хабрахабр–2012 – Режим доступу: https://habrahabr.ru/post/146179/

  4. Nick Kew / The Apache Modules Book. Application development with apache / Nick Kew; - Indiana – 2007 – 558c.
May 26, 2016