register

Розробка високонавантажених сайтів

Часто розробка високонавантажених сайтів за всіма ознаками проходить ідеально: код функціоналу написаний, запуск відбувся в термін, замовник задоволений. Але як тільки на сайт приходять живі користувачі, сервер починає гальмувати, а в пікові години і зовсім зависає. Це призводить до фінансових і репутаційних втрат для бізнесу.

Падіння сайтів: наслідки для бізнесу

Міжнародне опитування від Statista показав, що 86% компаній втрачає понад 300 тисяч доларів у вигляді збитків і недоотриманого прибутку кожну годину, поки їх сайт недоступний.

Стеля втрат обмежена тільки масштабом бізнесу. Тому великі корпорації втрачають найбільше. Наприклад, авіаперевізник Delta Airlines зазнав збитків в 150 млн доларів за 5 годин, коли сайт був недоступний. Антирекорд ж належить Амазонії. У день розпродажів в 2018 році компанія втратила 99 млн доларів за одну годину.

Чому сайти не справляються з навантаженням

Всі інтернет-системи розраховані на певний поріг навантаження. Коли він перевищений, сервер починає погано працювати, а потім і зовсім падає. Користувач в такому випадку бачить замість сайту екран з номером помилки (500, 501, 502, 503 або 408).

Але додаток падає не через те, що всі її компоненти завантажені на 100%. У будь-якої системи є вузьке місце або боттлнек (англ. «Пляшкове горлечко»).

Що таке вузьке місце інтернет-додатка

Уявіть 3-смугову трасу, де трапилася аварія і одна зі смуг перекрита на невеликій ділянці. Через одне вузьке місця така 3-смугова магістраль пропускає стільки ж машин, скільки і 2-смугова.

Додатки також можуть складатися з компонентів з різною пропускною здатністю. Для сайтів вона вимірюється в одночасних запитах. Якщо 9 з 10 модулів сайту можуть обробляти 100 запитів, але один модуль здатний впоратися лише з 30, то загальна продуктивність дорівнює саме 30.

Слабкою ланкою може виступати процесор, пам'ять, жорсткий диск, інтернет-з'єднання або елемент ПО. Наприклад, поширена проблема сайтів на Вордпресс - неефективна робота з базою даних. Вона починає проявлятися в міру зростання трафіку на сайт. Тому великі проекти, як правило, не будують на шаблонних платформах.

Розробка високонавантажених сайтів: покроковий план

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

Ми склали покроковий план, який допоможе вам не допустити таку ситуацію при розробці highload-сайту.

Крок №1. Прогноз пікового навантаження

Створення високонавантаженого проекту починається з прогнозування пікового навантаження. Зробити це можна двома способами:

  1. Виходячи з бізнес-плану замовника і особливостей ніші, оцінити, скільки людей може відвідати сайт в годину пік. При цьому відвідувачі, які просто знаходяться на сторінці, не використовують ресурси системи. Тому потрібно розрахувати, яку частку із них буде здійснювати запити в один момент часу - т. Е. Не просто вивчати вміст сторінки, а переходити по внутрішнім посиланням, використовувати інтерактивні функції і т. Д. Для цього складаються User Stories - моделі поведінки користувачів на сайті.
    Приклад. У піковий час на сайт заходить 1 тис. Чоловік. При цьому одночасно запити здійснює 10%. Виходить, сайт повинен витримувати 100 одночасних запитів.
  2. Також можна протестувати, яке навантаження витримують сайти конкурентів. Це робиться за допомогою спеціалізованих інструментів. Наприклад, ми використовуємо сервіс Loadview.
    Число одночасних запитів, яке сайт повинен витримати, закріплюється в договорі.

Крок №2. Планування

На самому початку важливо правильно спроектувати систему: виявити потенційні вузькі місця і продумати, як їх оптимізувати.
У великих IT-компаніях цим займається Software Architect - архітектор ПО. У студіях поменше немає штатних архітекторів. Тому цей обов'язок лягає на розробника з найбільшим досвідом, наприклад, тімліда або старшого програміста.

Крок №3. Вибір технологій

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

Деякі мови були винайдені спеціально для високонавантажених проектів, серед них GO і Rust. Але, крім цього, є мови, які взяли тренд на адаптацію під хайлоад (англ. "Високе навантаження"). Серед них і Python , на якому пишемо ми.

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

Крок №4. Оптимізація навантаження

Балансування по серверам

Навантаження можна розподілити на кілька комп'ютерів (серверів). А спеціальний алгоритм буде направляти запит користувача на найменш завантажений сервер. Так досягається вирівнювання навантаження і підвищення відмовостійкості сайту.

Винос частини програми на окремий сервер

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

Вибір архітектури

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

Розглянемо два сценарії, коли доречні різні архітектури.

  1. Додаток з кількома ключовими функціями і поруч другорядних. У цьому випадку має сенс розмістити основні функції в мікроядрі, а другорядні фічи реалізувати у вигляді плагінів. Приклад: браузер Хром з його розширеннями.
  2. Додаток з різнорідними затребуваними функціями, у кожної функції піки попиту припадають на різний час і масштабування має проходити окремо. Тут кращим архітектурним рішенням буде використання мікросервісов - маленьких програм всередині загального проекту. Приклад: Amazon, який об'єднує масу різноманітних послуг на одній платформі.

Закладіть можливість масштабування в інфраструктуру

Масштабувати додаток можна за рахунок інвестиції в обладнання. Підключення нових серверів називають горизонтальним масштабуванням. А збільшення потужності одного сервера - вертикальним.

Більшість хостингів дає можливість дозакупки нових ресурсів і апгрейда тарифного плану, аж до оренди власного сервера. Для найбільших проектів оптимальний варіант - хмарні платформи з автомасштабованими серверами. Вони дозволяють підключати на ходу практично необмежені ресурси. Найбільш відомі платформи на ринку: Amazon AWS, Google Cloud і Microsoft Azure.

Спеціалізовані бібліотеки

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

Кешування

Деякі об'єкти на сайтах дублюються з сторінки в сторінку і рідко змінюються. Їх називають статикою. До неї можуть відноситися картинки, Javascript, CSS і файли для завантаження. Такі матеріали можна кешувати - зберегти для віддачі на спеціальному сервері або в браузері користувачів. Так ми знімемо навантаження з основного сервера.

CDN

CDN-сервіси - це мережі серверів, розподілені по різних регіонах. Вони виконують три важливі функції:

  1. Автоматично кешують контент на своїх серверах, знімаючи навантаження з вашої системи.
  2. Роздають кеш з найближчого для користувача дата-центру, що прискорює запити між браузером і сервером.
  3. Захищають сайт від спамерів, хакерів і спамерських пошукових роботів.

Існує багато надійних CDN-провайдерів, наприклад: StackPath, Securi, Amazon CloudFront, Cloudflare. Останній найчастіше використовується в наших проектах.

Крок №5. Стрес-тести

В процесі розробки високонавантажених проектів і на фінальній стадії обов'язково проводяться стрес-тести. Так перевіряється, кількість одночасних запитів яких може витримати кожна сторінка сайту. З цією метою в нашій компанії використовуються такі інструменти, як wrk, apache benchmark і locust.

Для сторінок, які провалили тест і не витримують заявлену навантаження, проводиться аналіз всіх функцій окремо. Для цього існують спеціальні бібліотеки. Для Python - це cprofile.

Моніторинг

Після запуску хайлоад-сайту потрібно безперервно відстежувати його продуктивність.

Згадані раніше хмарні платформи надають для цього готові інструменти. Наприклад, просунуті монітори продуктивності додатків (APS). А для оперативного усунення багів також важливо впровадити постійне логування.

Як вибрати підрядника для високонавантаженого проекту

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

  • наявність штатних технічних фахівців;
  • компетентність розробників, наявність вузьких спеціалістів (архітекторів ПО, фронтенд і бекенд розробників, QA-інженерів);
  • рейтинги та відгуки про компанію на незалежних майданчиках (Clutch, LinkedIn, DOU).

Також ви можете замовити розробку високонавантаженого додатки у нас. Зв'яжіться з нами по контактах на сайті, і ми обговоримо вашу ідею.

Види складних сайтів

Розробка високонавантажених сайтів відноситься до списку складних проектів. Дізнатися про список складних проектів які, ми можемо реалізувати натисніть кнопку докладніше.

Детальніше

Ми спеціалізуємося на:

Факти про WEBCASE

Дякуємо за ваш інтерес!

Ми з вами зв'яжемося найближчим часом