Розробка високонавантажених додатків
Розробка високонавантажених додатків має на увазі створення програм, які не відрізняються від інших у плані призначення та функціоналу, але мають свої особливості. Як випливає із назви, вони адаптовані до сильних навантажень. Такі програми здатні витримувати великий наплив користувачів, одночасні запити, величезні масиви інформації та комплексні обчислення. Через всі ці особливості розробка програми стає непростим завданням.
Що являє собою розробка високонавантажених додатків?
Розробка високонавантаженого додатка — це процес створення програми, яка має витримувати безліч одночасних запитів. Сюди можна віднести онлайн-магазини, програми для спілкування та листування, соцмережі, банкінг. У таких випадках йдеться про тисячі користувачів, які одночасно роблять покупки, переписуються і завантажують мультимедійний контент. Серверу в такій ситуації доводиться опрацьовувати запити в безперервному режимі. При цьому немає чіткої грані, яка відокремлює високонавантажений додаток від звичайного. Цей поділ зазвичай умовний, і кожен розробник сам вирішує, що вважати високим навантаженням.
Розробка високонавантаженої програми потрібна, щоб сервер справлявся з великою кількістю запитів. Якщо він почне збоїти, то це загрожує втратою деякої кількості користувачів, і, як наслідок, зменшенням конверсій. Збої в роботі перевантаженого сервера можна визначити за такими симптомами:
- програма занадто довго завантажується або взагалі не відкривається;
- періодично зникає з'єднання з сервером;
- з'являються дивні помилки, які заважають нормально використовувати програму.
При розробці високонавантаженої програми необхідно враховувати, що багато запитів фактично еквівалентні великим обсягам даних. Якщо користувачі почнуть завантажувати відеозаписи та інші об'ємні файли, то це все треба буде десь зберігати і якось встигати обробляти. Отже, для розробки високонавантаженої програми знадобиться велика кількість серверів. А якщо проект не обмежується однією країною та позиціюється як міжнародний, то треба подбати, щоби він добре працював і в Європі, і за океаном. Розробка ускладнюється і тим, що обсяги інформації, що завантажується, зазвичай складно передбачити заздалегідь.
Особливості розробки високонавантажених програм
Розробка високонавантаженої програми відрізняється "жорсткістю". Така програма повинна бути жорсткою, міцною і монолітною системою, в якій змінам можуть піддаватися лише окремі фрагменти. Гнучкою вона не може бути в принципі, тому що це може призвести до неприємних наслідків після розробки. Це буде рівносильно будівництву гнучкого мосту через річку, який через недостатню жорсткість просто не зможе виконувати своє пряме призначення.
При розробці високонавантаженої програми важко зробити універсальним те, що пов'язане з доступом до інформації. Для забезпечення стабільності системи необхідно добре усвідомлювати, з якою базою даних вона має взаємодіяти. Орієнтуючись на обсяги інформації та частоту звернень, можна використовувати переваги бази даних у процесі розробки високонавантаженої програми. Не варто навіть намагатися зробити щось гнучким у високонавантаженій системі, оскільки для цього доведеться залучити надто великий обсяг ресурсів.
Займаючись розробкою високонавантаженої програми, потрібно заздалегідь подумати про прискорення відгуку. Це дуже важливий нюанс, якому слід приділити особливу увагу. Коли користувач надсилає запит, то відповідь на нього має прийти якщо не миттєво, то як мінімум протягом декількох секунд. Сучасні користувачі не відрізняються терпінням, тому не варто розраховувати, що вони погодяться довго чекати. Варто також замислитись про розширення. У проект має бути закладена основа для майбутнього масштабування, адже невідомо, як швидко навантажений додаток набере популярність, і коли на нього “накинуться” тисячі користувачів зі своїми запитами.
При розробці високонавантаженої програми зазвичай використовується один із двох способів масштабування: вертикальний або горизонтальний. У першому випадку мається на увазі підвищення потужності окремих фрагментів системи задля збільшення загальної продуктивності. Горизонтальне масштабування — це розподіл системи на структурні фрагменти, розподілені на різних серверах. При цьому передбачається збільшення кількості серверів, які виконують різні функції. Можуть бути потрібні зміни в коді програми, щоб ефективніше застосовувати всі доступні ресурси.
Розробка високонавантаженої програми на прикладі Google
Ніхто не сперечається з тим фактом, що Google — це королі розробки високонавантажених додатків. Ця корпорація спочатку прославилася завдяки своєму масштабному пошуковому сервісу, яким багато років користуються мільйони користувачів у всьому світі. Пізніше вони почали розробку напрочуд конкурентоспроможних високонавантажених додатків, які відмінно адаптовані для масштабування та здатні охоплювати мільйони користувачів з різних країн. І коли вже почало здаватися, що Google досягли межі розширення, вони знову здивували весь світ, оскільки продовжили своє ефективне масштабування.
Як платформу для розробки високонавантажених програм Google використовують Linux, а як мови програмування — Python, JavaScript і C++. Станом на 2007 рік корпорація мала вже понад 400 тис. серверів. На 2006 рік їхня пошукова система проіндексувала понад 7 млрд сторінок, а зараз ця цифра зросла багаторазово. У них зберігаються мільярди посилань, терабайти супутникових знімків та налаштування мільйонів користувачів. Сотні тисяч серверів одержують інформацію з кластерів, в яких об'єм дискового простору вимірюється астрономічними цифрами.
У процесі розробки високонавантажених програм Google вирішили візуалізувати свою структуру у вигляді трьох шарів:
- Продукти. Сюди входить пошукова система, реклама, сервіс e-mail, карти, відеохостинг, месенджери та ін.
- Обчислювальні потужності. Це велика кількість серверів у різних датацентрах.
- Розділена інфраструктура. Сюди відносяться GFS, Map Reduce та Big Table.
Для розробки високонавантажених програм Google довелося вирішити завдання з організації величезної кількості комп'ютерів. При цьому було вирішено використати просте та бюджетне обладнання. Для нього було збудовано спеціальне програмне забезпечення, яке дозволяє легко пережити вихід з ладу одного або декількох серверів. В результаті Google продовжують розробляти нові сервіси, і при цьому їхня якість така, що вони просто поза конкуренцією. Інші компанії використовують інший підхід. Вони менше уваги приділяють плануванню та організації всієї системи, а свою структуру розглядають здебільшого з погляду супутніх витрат. Але якщо всі частини системи взаємопов'язані, поліпшення однієї з них позитивно впливає на інші компоненти. У Google такі нюанси розуміють краще за інших.