Розуміння безсерверних обчислень для початківців

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

Після розвіяння цього міфу, ви, можливо, запитаєте, яка логіка криється за назвою “безсерверний”?

Дозвольте підказати: справа не у “відсутності сервера”, а в тому, ЯК сервери управляються та реалізуються. Саме це визначає поняття “безсерверний”.

Звучить дещо заплутано?

Звісно, ми заглибимось у деталі безсерверних обчислень та пов’язаних термінів, щоб розвіяти всі ваші сумніви. Почнімо з того, що безсерверний підхід набирає обертів. Згідно з прогнозами, ринок безсерверних технологій досягне 7,7 мільярда доларів США до 2021 року, порівняно з 1,9 мільярда у 2016 році.

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

Що ж таке безсерверні обчислення?

Безсерверні обчислення – це хмарна модель виконання, де постачальники хмарних послуг надають обчислювальні ресурси на вимогу, беручи на себе відповідальність за управління серверами замість клієнтів або розробників. Це спосіб поєднання послуг, стратегій та практик, який дозволяє розробникам зосередитися на коді, не турбуючись про адміністрування серверів.

Від розподілу ресурсів, планування потужностей, керування, конфігурацій та масштабування до виправлень, оновлень, планування та обслуговування, постачальник хмарних послуг (наприклад, AWS або Google Cloud Platform) бере на себе повну відповідальність за всі звичайні завдання інфраструктури. Це дає розробникам можливість сфокусуватися на бізнес-логіці своїх програм та процесів.

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

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

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

Як розвивалася безсерверна модель?

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

Безсерверна модель розвивалась поетапно: від монолітної архітектури до мікросервісів, а потім до безсерверної архітектури або Функції як послуги (FaaS).

  • Монолітна архітектура – це традиційний, уніфікований підхід до розробки програмного забезпечення. Це тісно пов’язана модель, де кожен компонент і його підкомпоненти компілюють або виконують код. Якщо одна служба виходить з ладу, це може спричинити збій усього сервера додатків та служб, які на ньому працюють.
  • Архітектура мікросервісів – це набір менших служб у межах однієї великої програми, які розгортаються незалежно для виконання конкретної функції. Вона забезпечує швидку доставку великомасштабних додатків, надаючи розробникам гнучкість завдяки інфраструктурі як послузі (IaaS) та платформі як послузі (PaaS). Однак вибір між PaaS та IaaS у цій моделі є непростим.
  • Безсерверна архітектура розвивалась паралельно з хмарними обчисленнями та пропонує більшу масштабованість та гнучкість для бізнесу. Замість IaaS та PaaS вона використовує FaaS та Backend-as-a-Service (BaaS). Тут програми розгортаються разом з необхідними ресурсами лише за потреби. Вам не потрібно турбуватися про управління сервером, і ви припиняєте платити, як тільки виконання коду завершується.

Характеристики безсерверних обчислень

Ось деякі з характеристик безсерверних обчислень:

  • Більшість безсерверних програм складаються з окремих функцій та невеликих фрагментів коду.
  • Код запускається лише на вимогу, зазвичай в програмному контейнері без збереження стану, та плавно масштабується залежно від потреби.
  • Клієнтам не потрібно керувати серверами.
  • Функції виконуються на основі подій. Обчислювальне середовище створюється після того, як функція запускається або отримує подію для обробки запиту.
  • Гнучке масштабування дозволяє легко збільшувати або зменшувати ресурси. Після завершення виконання коду інфраструктура припиняє працювати, і ви заощаджуєте кошти. Аналогічно, під час виконання функції ви можете нескінченно масштабувати її за потреби.
  • Ви можете використовувати керовані хмарні служби для вирішення складних завдань, таких як зберігання файлів, черги, бази даних тощо.

Як працюють безсерверні обчислення?

Безсерверна архітектура поєднує дві ключові концепції – Функцію як послугу (FaaS) та Бекед як послугу (BaaS). Вона значною мірою залежить від FaaS, що дозволяє хмарним сервісам виконувати код без необхідності у повністю підготовлених екземплярах. FaaS складається з функцій без збереження стану, які керуються подіями, масштабуються та повністю адмініструються хмарними сервісами.

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

Таким чином, безсерверна модель забезпечує економічну ефективність та зручність завдяки функціям автоматичного масштабування, виконання на вимогу та оплаті лише за фактичне використання. Саме тому сьогодні багато компаній та DevOps-команд відмовляються від прямого управління серверами.

Хто використовує безсерверні обчислення і чому?

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

Ці технології корисні для:

  • Організацій, яким потрібна більша масштабованість та гнучкість з покращеними можливостями тестування додатків.
  • Розробників, які хочуть скоротити час виходу на ринок, створюючи гнучкі та високоефективні програми.
  • Компаній, яким не потрібно постійно підтримувати сервери. Вони можуть викликати модульні функції з програм за потреби для економії коштів.
  • Організацій, які хочуть створювати ефективні хмарні програми та спростити міграцію в хмару.
  • Розробників, які шукають способи зменшити затримку, щоб надати користувачам швидкий доступ до певних функцій або програм.
  • Компаній, які не мають достатніх ресурсів для обслуговування складної ІТ-інфраструктури. Вони можуть використовувати безсерверні обчислення для автоматичного вирішення проблем та зменшення потреби в ручному втручанні.

Серед відомих користувачів безсерверної моделі – Slack, Coca-Cola, Netflix та інші.

Завдяки своїм унікальним характеристикам, безсерверна модель підходить для багатьох випадків використання, наприклад:

  • Веб-програми: ви можете створювати швидкі та масштабовані веб-програми, які миттєво реагують на вимоги користувачів. Це ідеальний варіант для створення додатків без збереження стану, які запускаються миттєво, а також для обробки непередбачуваних сплесків запитів користувачів.
  • Сервери API: на безсерверних платформах будь-яка функція може бути легко перетворена на HTTP-кінцеву точку, готову до використання клієнтами. Ці функції або дії називаються веб-діями, якщо їх увімкнено для доступу з Інтернету. Після цього зібрати функції в повноцінний API стає просто. Ви також можете використовувати шлюз API для посилення безпеки, підтримки домену, обмеження швидкості та підтримки OAuth.
  • Мікросервіси: безсерверний підхід широко використовується в моделі мікросервісів, яка фокусується на створенні невеликих сервісів, здатних виконувати одне завдання та взаємодіяти один з одним через API. Хоча мікросервіси можна створювати за допомогою програмних контейнерів і PaaS, безсерверний підхід є більш ефективним. Він дозволяє легко створювати невеликі блоки коду, які виконують одне завдання, та забезпечує швидке розгортання, автоматичне масштабування та гнучкий підхід до ціноутворення, за якого клієнти платять лише тоді, коли ресурси використовуються.
  • Обробка даних: безсерверний підхід чудово підходить для роботи з даними, які містять відео, аудіо, зображення та структурований текст. Він також корисний для виконання різноманітних завдань, таких як валідація даних, перетворення, збагачення, очищення, нормалізація звуку та обробка PDF. Ви можете використовувати його для обробки зображень, що включає збільшення різкості, обертання, створення мініатюр, зменшення шуму. Іншими варіантами використання безсерверної обробки даних є перекодування відео та оптичне розпізнавання символів (OCR).
  • Потокова та пакетна обробка: ви можете створювати потужні потокові додатки та конвеєри даних за допомогою FaaS та баз даних на основі Apache Kafka. Безсерверна модель підходить для збору різних потоків даних, включаючи дані з журналів додатків, датчиків Інтернету речей, бізнес-логіку та фінансові дані.
  • Паралельні обчислення: безсерверний підхід чудово підходить для завдань, що передбачають паралельні обчислення, де кожне завдання виконується паралельно для досягнення певного результату. Це може включати пошук, обробку даних, операції з картами, сканування веб-сторінок, обробку геному, налаштування гіперпараметрів тощо.
  • Інші варіанти використання: безсерверний підхід також використовується для різних програм, таких як управління відносинами з клієнтами (CRM), фінанси, чат-боти, бізнес-аналітика та аналітика.

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

Переваги та недоліки безсерверних обчислень

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

Переваги 👍

Ось деякі з переваг безсерверної архітектури:

Економічність

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

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

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

Масштабованість

Безсерверні системи забезпечують високий рівень масштабованості, оскільки ви можете збільшувати або зменшувати ресурси залежно від потреб. Тому їх часто називають “еластичними”.

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

Зменшення затримки

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

Продуктивність

Безсерверна модель допомагає підвищити продуктивність розробників, оскільки їм не потрібно керувати серверами. Їм також не потрібно турбуватися про обробку HTTP-запитів або багатопотоковість у коді.

Це спрощує розробку бекенду завдяки FaaS, де відкритий код є подіє-керованими функціями. Все це дозволяє заощадити час, який можна присвятити покращенню коду та програми.

Швидше розгортання програми

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

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

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

Недоліки 👎

Тепер давайте розглянемо недоліки безсерверних обчислень:

Продуктивність

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

Складність налагодження та тестування

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

Питання безпеки

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

Не підходить для тривалих процесів

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

Інші недоліки безсерверної системи – це складність переходу між різними провайдерами та проблеми з конфіденційністю.

Важливі терміни в безсерверній архітектурі

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

Функція як послуга (FaaS)

FaaS є основою безсерверних обчислень та діє як їх підмножина. Ця модель виконання коду, що керується подіями (програми, що запускаються у відповідь на запит), дозволяє розробляти логіку, що розгортається в контейнерах програмного забезпечення, які виконуються на вимогу, а хмарна платформа забезпечує їх управління.

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

Контейнери програмного забезпечення, де розгортається код, не зберігають стан, що спрощує інтеграцію даних, а код виконується протягом короткого проміжку часу. Розробники можуть запускати безсерверні програми через API за допомогою FaaS, управління якими здійснюють хмарні провайдери через API Gateway.

Backend-as-a-Service (BaaS)

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

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

Безсерверний стек

Як і інші програмні технології, безсерверна архітектура також має свій стек технологій. Він поєднує різні компоненти, необхідні для створення безсерверної системи або програми.

Безсерверний стек включає:

  • Мова програмування: мова, якою розробники будуть писати код. Залежно від провайдера, ви можете обрати Java, JavaScript, Python, C#, Go, Node.js, F# тощо.
  • Безсерверний фреймворк: фреймворк надає скелет або структуру коду. Є багато безсерверних фреймворків для початку роботи. Він дозволяє створювати, пакувати та компілювати код, а потім розгортати його в хмарі. Безсерверні фреймворки прискорюють процес розробки та спрощують масштабування, скорочуючи час налаштування. Прикладами фреймворків є Apex, AWS Serverless Application Model тощо.
  • Безсерверні бази даних: вони використовуються для зберігання даних, до яких має доступ код. Вони також необхідні для взаємодії з функціями тригерів. Ці бази даних поводяться як безсерверні функції, але зберігають дані необмежений час. Прикладами безсерверних баз даних є DynamoDB, Azure Cosmos DB, Aurora Serverless та Cloud Firestore.
  • Набір тригерів: вони допомагають ініціювати виконання коду, наприклад, HTTP-запити.
  • Програмні контейнери: вони розширюють можливості безсерверної моделі та пропонують контейнерні мікросервіси без ускладнень. Вони також діють як репозиторій коду та спрощують роботу розробників під час написання коду для різних платформ, таких як десктоп чи iOS.
  • Шлюзи API: вони діють як проксі для веб-дій. Вони пропонують маршрутизацію HTTP, обмеження швидкості, перегляд журналів використання API та відповідей, ідентифікатор клієнта тощо.

Як реалізувати безсерверну модель та оптимізувати її?

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

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

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

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

  • Розуміння ваших потреб і визначення відповідного стеку безсерверних технологій.
  • Вибору безсерверного провайдера, такого як Google Cloud Functions, Azure Functions, AWS Lambda тощо.
  • Надання вашій команді потужних інструментів для моніторингу продуктивності та функцій системи. Звертайте увагу на загальну кількість запитів, обмеження, кількість помилок, рівень успіху, тривалість запиту та затримку.

Безсерверні провайдери

На ринку є багато безсерверних провайдерів або хмарних провайдерів, з яких ви можете вибрати. Ось деякі з найкращих:

  • AWS Lambda: ідеально підходить для організацій, які вже використовують сервіси AWS. Він інтегрується з широким спектром служб для зберігання, потокової передачі та баз даних.
  • Microsoft Azure Functions: якщо ви використовуєте Visual Studio Code, це чудовий вибір. Він безперебійно працює з DevOps та Azure Pipelines для CI/CD. Він також підтримує Durable Functions для функцій із збереженням стану та пропонує вбудований моніторинг.
  • Google Cloud Functions: якщо ви користуєтеся сервісами Google, це хороший варіант. Він підтримує JS, Go та Python, дозволяє запускати функції з Google Assistant або GCP та пропонує вбудоване масштабування.
  • IBM Cloud Functions: якщо ви хочете обрати безсерверну модель на основі Apache OpenWhisk, IBM Cloud Functions для вас. Він включає чудовий моніторинг продуктивності, ініціацію подій з REST API або хмарних служб IBM та інтегрується з IBM API Gateway для управління кінцевими точками.
  • Knative: якщо ви використовуєте сервіси на Kubernetes, це правильний вибір. Його підтримують Google, Red Hat, IBM тощо.
  • Cloudflare Workers: це підходить для програм, які вимагають високої швидкості відгуку, особливо для JavaScript-додатків. Він підтримує Workers KV для зберігання даних та WebAssembly, щоб допомогти вам зібрати та надати кілька мов. Крім того, його широка мережа зі 193 центрами обробки даних покращує затримку та швидкість відгуку.

Висновок: майбутнє безсерверних обчислень

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

Згідно з опитуванням O’Reilly, 40% респондентів працюють у компаніях, які використовують безсерверну архітектуру.

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

Вас також може зацікавити: 7 способів безсерверних обчислень — це технологія, що розвивається