Выпуск №6 (Июнь)
V Международная научная конференция "Science and Global Studies", 30 декабря 2020 (Прага, Чехия)

V Международная научная конференция «Научные исследования: парадигма инновационного развития» (Прага, Чехия), «28» декабря 2020 года

IV Международная научная конференция "Science and Global Studies", 30 ноября 2020 (Прага, Чехия)

IV Международная научная конференция «Научные исследования: парадигма инновационного развития» (Прага, Чехия), «27» ноября 2020 года

ІІІ Международная научная конференция "Science and Global Studies", 30 октября 2020 (г. Прага, Чехия)

ІIІ Международная научная конференция «Научные исследования: парадигма инновационного развития» (Братислава - Вена), «26» мая 2020 года

ІІ Международная научная конференция «Научные исследования: парадигма инновационного развития» (Братислава - Вена), «27» апреля 2020 года

Science and Global Studies, 31 марта 2020 (г. Братислава, Словакия)

Международная научная конференция «Научные исследования: парадигма инновационного развития» (Братислава - Вена), «25» марта 2020 года

Science and Global Studies, 30 декабря 2019 (г. Братислава, Словакия)

XLV Международная научно-практическая конференция «Актуальные проблемы современной науки», 28.11.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XLIV Международная научно-практическая конференция «Актуальные проблемы современной науки», 30.10.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XLIІI Международная научно-практическая конференция «Актуальные проблемы современной науки», 29.08.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XLIІI Международная научно-практическая конференция «Актуальные проблемы современной науки», 30.07.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XLII Международная научно-практическая конференция «Актуальные проблемы современной науки», 27.06.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XLI Международная научно-практическая конференция «Актуальные проблемы современной науки», 30.05.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XL Международная научно-практическая конференция «Актуальные проблемы современной науки», 28.03.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

МНПК "Цифровая трансформация и инновации в экономике, праве, государственном управлении, науке и образовательных процессах", 18-21.03.2019

XXXIX Международная научно-практическая конференция «Актуальные проблемы современной науки», 27.02.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XIII Международная научно-практическая конференция «Научный диспут: вопросы экономики и финансов», 31.01.2019 (Совместная конференция с Финансово-экономическим научным советом)

XXXVIII Международная научно-практическая конференция «Актуальные проблемы современной науки», 30.01.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XXXVІI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.12.2018 (Совместная конференция с Международным научным центром)

XXXVI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.11.2018 (Совместная конференция с Международным научным центром)

XIII Международная научно-практическая конференция «Актуальные проблемы экономики и финансов», 31.10.2018 (Совместная конференция с Финансово-экономическим научным советом)

XXXV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.10.2018 (Совместная конференция с Международным научным центром)

XXXIV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.09.2018 (Совместная конференция с Международным научным центром)

ХXXIII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.08.2018 (Совместная конференция с Международным научным центром)

ХXXII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 31.07.2018 (Совместная конференция с Международным научным центром)

XII Международная научно-практическая конференция «Актуальные проблемы экономики и финансов», 31.07.2018 (Совместная конференция с Финансово-экономическим научным советом)

ХXXI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.06.2018 (Совместная конференция с Международным научным центром)

ХІ Международная научно-практическая конференция «Глобальные проблемы экономики и финансов», 31.05.2018 (Совместная конференция с Финансово-экономическим научным советом)

XXХ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.05.2018 (Совместная конференция с Международным научным центром)

XXIХ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.04.2018 (Совместная конференция с Международным научным центром)

ХХVIІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.03.2018 (Совместная конференция с Международным научным центром)

ІІІ МНПК "Экономика, финансы и управление в XXI веке: анализ тенденций и перспективы развития", 19-22.03.2018 (Совместная конференция с Финансово-экономическим научным советом)

X Международная научно-практическая конференция «Глобальные проблемы экономики и финансов», 28.02.2018 (Совместная конференция с Финансово-экономическим научным советом)

ХХVІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 27.02.2018 (Совместная конференция с Международным научным центром)

ХХVІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.01.2018 (Совместная конференция с Международным научным центром)

XІІ Международная научно-практическая конференция «Научный диспут: вопросы экономики и финансов», 29.12.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХХV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.12.2017 (Совместная конференция с Международным научным центром)

ХХІV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.11.2017 (Совместная конференция с Международным научным центром)

XI Международная научно-практическая конференция «Актуальные проблемы экономики и финансов», 31.10.2017 (Совместная конференция с Финансово-экономическим научным советом)

XІ Международная научно-практическая конференция «Научный диспут: вопросы экономики и финансов», 29.09.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХХIІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.09.2017 (Совместная конференция с Международным научным центром)

X Международная научно-практическая конференция «Актуальные проблемы экономики и финансов», 31.07.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХXII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.07.2017 (Совместная конференция с Международным научным центром)

ХXI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.06.2017 (Совместная конференция с Международным научным центром)

IX Международная научно-практическая конференция «Глобальные проблемы экономики и финансов», 31.05.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХX Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.05.2017 (Совместная конференция с Международным научным центром)

"Тенденции развития национальных экономик: экономическое и правовое измерение" 18-19.05.2017 (Совместная конференция с Финансово-экономическим научным советом и ККИБиП)

ХIX Международная научно-практическая конференция: "Актуальные проблемы современной науки", 27.04.2017 (Совместная конференция с Международным научным центром)

IX Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 31.03.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХVIII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.03.2017 (Совместная конференция с Международным научным центром)

МНПК "Экономика, финансы и управление в XXI веке: анализ тенденций и перспективы развития", 20–23.03.2017 (Совместная конференция с Финансово-экономическим научным советом)

VIII Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 28.02.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХVII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 27.02.2017 (Совместная конференция с Международным научным центром)

VIII Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 31.01.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХVI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.01.2017 (Совместная конференция с Международным научным центром)

ХV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.12.2016 (Совместная конференция с Международным научным центром)

VIII Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 28.12.2016 (Совместная конференция с Финансово-экономическим научным советом)

VII Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 30.11.2016 (Совместная конференция с Финансово-экономическим научным советом)

ХІV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.11.2016 (Совместная конференция с Международным научным центром)

VII Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 31.10.2016 (Совместная конференция с Финансово-экономическим научным советом)

ХІІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.10.2016 (Совместная конференция с Международным научным центром)

VII Международная научно-практическая конф. «Научный диспут: вопросы экономики и финансов», 30.09.2016 (Совместная конференция с Финансово-экономическим научным советом)

ХІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.09.2016 (Совместная конференция с Международным научным центром)

XI Международная научно-практическая конференция «Актуальные проблемы современной науки», 30.08.2016 (Совместная конференция с Международным научным центром)

ІV Международная научно-практическая конф. "Экономика и управление в XXI веке: анализ тенденций и перспектив развития", 29.07.2016 (Совместная конференция с Финансово-экономическим научным советом)

X Международная научно-практическая конференция "Актуальные проблемы современной науки", 28.07.2016 (Совместная конференция с Международным научным центром)

VІ Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 30.06.2016 (Совместная конференция с Финансово-экономическим научным советом)

ІX Международная научно-практическая конференция "Актуальные проблемы современной науки", 29.06.2016 (Совместная конференция с Международным научным центром)

VI Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 31.05.2016 (Совместная конференция с Финансово-экономическим научным советом)

VIIІ Международная научно-практическая конференция "Актуальные проблемы современной науки", 30.05.2016 (Совместная конференция с Международным научным центром)

V Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 29.04.2016 (Совместная конференция с Финансово-экономическим научным советом)

VIІ Международная научно-практическая конференция "Актуальные проблемы современной науки", 28.04.2016 (Совместная конференция с Международным научным центром)

VІ Международная научно-практическая конференция "Актуальные проблемы современной науки", 31.03.2016 (Совместная конференция с Международным научным центром)

ІI Международная научно-практическая конф. "Экономика и управление в XXI веке: анализ тенденций и перспектив развития", 30.03.2016 (Совместная конференция с Финансово-экономическим научным советом)

V Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 21-24.03.2016 (Совместная конференция с Финансово-экономическим научным советом)

V Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 26.02.2016 (Совместная конференция с Финансово-экономическим научным советом)

II Международная научно-практическая конференция: "Научный диспут: актуальные вопросы медицины" 20.02.2016 (Совместная конференция с Международным научным центром)

ІV Международная научно-практическая конференция "Актуальные проблемы современной науки", 29.12.2015 (Совместная конференция с Международным научным центром)

IV Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 28.12.2015 (Совместная конференция с Финансово-экономическим научным советом)

IV Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 30.11.2015 (Совместная конференция с Финансово-экономическим научным советом)

IV Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 29.10.2015 (Совместная конференция с Финансово-экономическим научным советом)

Международная научно-практическая конференция: "Научный диспут: актуальные вопросы медицины" 28.10.2015 (Совместная конференция с Международным научным центром)

III Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 30.09.2015 (Совместная конференция с Финансово-экономическим научным советом)

III Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 31.08.2015 (Совместная конференция с Финансово-экономическим научным советом)

ІІІ Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 30.06.2015 (Совместная конференция с Финансово-экономическим научным советом)

ІІ Международная научно-практическая конференция "Актуальные проблемы современной науки", 29.06.2015 (Совместная конференция с Международным научным центром)

II Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 28.05.2015 (Совместная конференция с Финансово-экономическим научным советом)

Актуальные проблемы экономики и финансов, 29.04.2015 (Совместная конференция с Финансово-экономическим научным советом)

Научный диспут: вопросы экономики и финансов, 31.03.2015 (Совместная конференция с Финансово-экономическим научным советом)

Актуальные проблемы современной науки, 27.03.2015 (Совместная конференция с Международным научным центром)

Глобальные проблемы экономики и финансов, 27.02.2015 (Совместная конференция с финансово-экономическим научным советом)



Аннотация: Исследованы принципы уменьшения нагрузки на web-приложение путем его оптимизации и масштабирования. Рассмотрены методы масштабирования и способы их применения.

Ключевые слова: уменьшение нагрузки, оптимизация, масштабирование, web-приложение, хост.

 


Отрасль науки: Технические науки
Скачать статью (pdf)

Технічні науки

УДК 519.6, 004.7

Якимець Роман Вікторович

студент

Національний технічний університет України

«Київський політехнічний інститут»

Якимец Роман Викторович

студент

Национальный технический университет Украины

 «Киевский политехнический институт»

Yakymets Roman V.

Student

National Technical University of Ukraine  «Kyiv Polytechnic Institute»

Яременко Костянтин Миколайович

студент

Національний технічний університет України

«Київський політехнічний інститут»

Яременко Константин Николаевич

студент

Национальный технический университет Украины

 «Киевский политехнический институт»

Yaremenko K. N.

Student

National Technical University of Ukraine  «Kyiv Polytechnic Institute»

МАСШТАБУВАННЯ НАВАНТАЖЕННЯ WEB-ДОДАТКІВ

МАСШТАБИРОВАНИЕ НАГРУЗКИ WEB-ПРИЛОЖЕНИЙ

SCALING OF LOAD WEB-APPLICATIONS

Анотація: Досліджені принципи зменшення навантаження на web-додаток шляхом його оптимізації та масштабування. Розглянуті методи масштабування та способи їх застосування.

Ключові слова: зменшення навантаження, оптимізація, масштабування, web-додаток, хост.

Аннотация: Исследованы принципы уменьшения нагрузки на web-приложение путем его оптимизации и масштабирования. Рассмотрены методы масштабирования и способы их применения.

Ключевые слова: уменьшение нагрузки, оптимизация, масштабирование, web-приложение, хост.

Summary: Researched principles of reduce the load on web-application through optimization and scaling. There was considered the methods of scaling and methods of their application.

Key words: load reduction, optimization, scale, web-application, host.

Вступ

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

Оптимізація

Насамперед необхідно перевірити наступні положення:

  • Оптимальність запитів до БД.
  • Правильність збереження даних в БД.
  • Використання кешування.
  • Відсутність зайвих запитів до ФС чи БД.
  • Оптимальність алгоритмів обробки даних.

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

Масштабування

Припустимо, що оптимізація вже проведена, але додаток все одно не справляється з навантаженням. В такому випадку рішенням проблеми, може бути його розподілення на  декілька хостів, з метою збільшення загальної продуктивності додатку за рахунок збільшення доступних ресурсів. Такий підхід має офіційну назву - «масштабування» (scale) додатку. Точніше кажучи, під «масштабністю» (scalability) називається можливість системи збільшувати свою продуктивність при збільшенні кількості виділених для неї ресурсів. Розрізняють два способи масштабування: вертикальний і горизонтальний. Вертикальне масштабування має на увазі збільшення продуктивності додатка при додаванні ресурсів (процесора, пам’яті, диска) в рамках одного вузла (хоста). Горизонтальне масштабування характерне для розподілених додатків і має на увазі зростання продуктивності додатка при додаванні ще одного вузла (хоста).

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

Архітектура програми

Більшість web-додатків є розподіленими, так як в їх архітектурі можна виділити мінімум три шари: web-сервер, бізнес-логіка, дані (БД, статика).

Рисунок 1 Архітектура програми

Кожен з цих шарів може бути масштабований. Тому якщо у системі бізнес-логіка і БД живуть на одному хості – першим кроком повинно стати розподілення їх на різні хости.

Вузьке місце

Приступаючи до масштабування системи, перш за все варто визначити, який з шарів є «вузьким місцем» - тобто працює повільніше за решту системи. Для початку можна скористатися банальними утилітами типу top (htop) для оцінки споживання процесора/пам’яті і df, iostat для оцінки споживання диска. Однак, бажано виділити окремий хост, з емуляцією бойового навантаження (з допомогою AB або Jmeter), на якому можна буде профілювати роботу програми за допомогою таких утиліт як xdebug, oprofile і так далі. Для виявлення вузьких запитів до БД можна скористатися утилітами типу pgFouine.

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

Масштабування БД

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

Знизити навантаження на БД можна розділивши її на кілька хостів. При цьому гостро встає проблема синхронізації між ними, вирішити яку можна шляхом реалізації схеми master/slave з синхронної або асинхронної реплікацією. У випадку з PostgreSQL реалізувати синхронну реплікацію можна за допомогою Slony-I, асинхронну - PGPool-II або WAL (9.0). Вирішити проблему поділу запитів читання і запису, а так само балансування навантаження між наявними slave'амі, можна за допомогою настройки спеціального шару доступу до БД (PGPool-II).

Проблему зберігання великого обсягу даних в разі використання реляційних СУБД можна вирішити за допомогою механізму партиціонування ( "поділ" в PostgreSQL), або розгортаючи БД на розподілених ФС типу Hadoop DFS.

Проте, для зберігання великих обсягів даних найкращим рішенням буде «шардінг» (Sharding) даних, який є вбудованим перевагою більшості NoSQL БД (наприклад, MongoDB).

Крім того, NoSQL БД в загальному працюють швидше своїх SQL-братів за рахунок відсутності overhead'а на розбір / оптимізацію запиту, перевірки цілісності структури даних і т.д.

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

Масштабування коду

Складнощі з масштабуванням коду залежать від того, скільки розподілених  ресурсів необхідно хостам для роботи вашої програми. Чи будуть це тільки сесії, або буде потрібно загальний кеш і файли? У будь-якому випадку в першу чергу потрібно запустити копії програми на декількох хостах з однаковим оточенням.

Далі необхідно налаштувати балансування навантаження / запитів між цими хостами. Зробити це можна як на рівні TCP (HAProxy), так і на HTTP (Nginx) або DNS.

Наступним кроком потрібно зробити так, що б файли статики, кеш і сесії веб-додатки були доступні на кожному хості. Для сесій можна використовувати сервер, який працює через мережу (наприклад, Memcached). Як сервер кеша цілком розумно використовувати той же Memcached, але  на іншому хості.

Файли статики можна змонтувати з якогось загального файлового сховища по NFS / CIFS або використовувати розподілену (HDFS ФС, GlusterFS, Ceph).

Так само можна зберігати файли в БД (наприклад, Mongo GridFS), вирішуючи тим самим проблеми доступності та масштабованості (з урахуванням того, що для NoSQL БД проблема масштабованості вирішена за рахунок шардінга).

Окремо варто відзначити проблему розміщення  на кілька хостів. Найпростішим рішенням  того щоб споживач, натискаючи «Оновити», не бачив різні версії програми буде виключення з конфігураційного файла балансувальника  навантаження (веб-сервера) не оновлених ​​хостів, і послідовного їх включення в міру оновлення. Так само можна прив'язати користувачів до конкретних хостам по куки або IP. Якщо ж оновлення вимагає значних змін у БД, найпростіше, взагалі тимчасово закрити проект.

Масштабування ФС

При необхідності зберігання великого обсягу статики можна виділити дві проблеми: брак місця і швидкість доступу до даних. Як вже було написано вище, проблему з нестачею місця можна вирішити як мінімум трьома шляхами: розподілена ФС, зберігання даних в БД з підтримкою шардінга і організація шардінга «вручну» на рівні коду.

При цьому варто розуміти, що роздача статики теж не найпростіше завдання, коли мова йде про високі навантаження. Тому в цілком резонно мати безліч серверів призначених для роздачі статики. При цьому, якщо ми маємо загальне сховище даних (розподілена ФС або БД), при збереженні файлу ми можемо зберігати його ім'я без урахування хоста, а ім'я хоста підставляти випадковим чином при формуванні сторінки. У разі, коли шардінг реалізується вручну (тобто, за вибір хоста, на який будуть залиті дані, відповідає логіка в коді), інформація про хоста заливки повинна або обчислюватися на основі самого файлу, або генеруватися на підставі інших  даних (інформація про користувача, кількості місця на дисках-сховищах) і зберігатися разом з ім'ям файлу в БД.

Висновок

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

Література:

  1. John H. Howard.  Scale and performance in a distributed file system/ John H. Howard, Michael L. Kazar, Sherri G. Menees, David A. Nichols, M. Satyanarayanan, Robert N. Sidebotham, and Michael J. ACM Transactions on Computer Systems,   1988.
  2. Title:RESTful Web Services By: Leonard Richardson, Sam Ruby Publisher:O'Reilly Media May , 2007  P. 454
  3. Clifford Neuman  .Scale in Distributed Systems, 1994
  4. Martin Kalin Java Web Services: Up and Running, 2nd Edition, O'Reilly, August 2013, P. 360