Проектування високонавантажених систем

Високонавантажениq проект - система, розрахована на роботу з постійним або піковим високим навантаженням. Зазвичай це системи, що обробляють тисячі RPS (запитів у секунду) й оперують із БД у сотні гігабайт. Замовити проектування високонавантажених систем 7

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

Високонавантажені проекти

Зазвичай до високонавантажених проектів відносять соціальні мережі, високонавантажені API, платіжні системи, BigData-системи, розподілені системи, realtime-API та ін.

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

  • призначене для користувача;
  • внутрішнє;
  • точкове;
  • комплексне.

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

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

Наприклад, сайт при розмірі бази даних 100MB і 200GB буде працювати по-різному, хоча кількість одночасних користувачів буде однаковою. В іншому випадку при неправильно підібраних компонентах відбудуться гальмування сайту: навантаження, створена зсередини об'ємом даних така, що апаратна складова просто не впорається з обробкою бази даних.

Точкове навантаження виникає, коли відбувається навантаження тільки на одну підсистему.

Комплексне навантаження виникає, коли навантажено відразу кілька (дві та більше) систем, і перевантаження іншої не залежить від першої.

Критерії високонавантаженого проекту

З підвищенням потужностей серверів, каналів зв'язку і зниженням ціни на них, абсолютні значення критеріїв змінюються. При цьому самі критерії можна вважати +/- стандартними:

  • кількість одночасних запитів, пікових, асинхронних наростаючих запитів по мережевим протоколам http(s), tcp/ip, udp, socket;
  • обсяг оброблюваних даних у базах даних;
  • обсяг переданої інформації у запиті.

Наприклад, зараз високонавантаженими можна вважати проекти, що повинні витримувати постійне або точкове навантаження приблизно 8000 rps без додаткових маніпуляцій з боку DevOps інженерів. При цьому проекти, в яких загальний обсяг бази даних перевищує 200GB, теж вважатимуться високонавантаженими. Так само як і проекти, в яких між підсистемами "переміщаються" запити об'ємом в 1GB кожен.

 

База даних для високонавантажених проектів

Для розробки таких проектів ми в Evergreen використовуємо у першу чергу хмарні рішення стека AWS.

Розміщувати бази даних високонавантажених проектів у хмарі простіше, оскільки при виникненні проблем із продуктивністю завжди можна моментально збільшити обсяг доступних ресурсів (процесор, пам'ять, диск), оптимізувати/усунути вузькі місця і потім так само швидко відкотити кількість ресурсів до прийнятного рівня.

З проектами on-premise у цьому плані складніше: завжди потрібно займатися оптимізацією і контролем показників, оскільки різко збільшити кількість ресурсів, як у випадку з розміщенням у хмарі, не вийде.

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

Якщо рішення обрано на власних серверах, то SSD диски для сервера бази даних повинні бути не просто "хоч якимись" (хостинг провайдери часто продають ssd хостинги з дисками для домашніх ПК, що погано справляються з роботою 4K блоків, і маленьким IOPS). Диски, мережі та гаряча заміна обладнання завжди залишаються вузьким місцем в ідеально складеній хайлоад системі, тому потрібно максимально акуратно вибирати їх від початку.

Для навантаженої архітектури (НА) дуже важливі оптимальний вибір СУБД, побудова запитів до БД, їхня оптимізація, вибір правильних типів даних і їхньої довжини. У нас в Evergreen є досвід роботи з різними реляційними (Galera Cluster for MySQL, PostgreSQL і т.п.) й об'єктними (MongoDB, Elasticsearch, AWS Document DB і т.п.) СУБД. Також у нас є досвід роботи з системами кешування і балансування навантаження.

Управління розробкою високонавантажених проектів

Щоб не створювати собі проблем на етапі розробки, потрібно архітектурно закладати основні патерни, властиві навантаженії архітектурі (НА). Наприклад, партіціонування даних (розбиття однотипних даних між нодамі баз даних) і т.п.

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

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

 

Замовити проектування високонавантажених систем

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

Цей сайт є українською мовою. Ви можете переключити мову у меню, або зробити це зараз.