Огляд Serverless архітектури

6 хв. читання

Всім привіт! У даній статті ми:

  • розглянемо переваги й недоліки Monolith, Microservices і Serverless архітектур;
  • створимо перший застосунок з використанням AWS Lambda і Serverless Framework.

Типи архітектур бек-енду:

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

Тут ми знайомимось з першим типом архітектури:

Monolith

У монолітній архітектурі ми маємо один застосунок і всі частини цього застосунку знаходяться тісно зв'язані. Така архітектура має наступні плюси:

  1. легко встановлюються (пишемо один скрипт і ніяких танців з бубном);
  2. проста підтримка додатку, моніторинг, логування;
  3. додавання нової функціональності не викликає проблем;
  4. легкість у розгортанні застосунку.

Але разом з тим така простота має і свої недоліки:

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

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

Огляд Serverless архітектури

І тут з'являються мікросервіси, щоб врятувати наш проект.

Microservices

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

Огляд Serverless архітектури

Ми розбиваємо нашого суцільного монстра на декілька дрібних і отримуємо наступні переваги:

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

Але:

  1. налаштування такої системи потребує часу;
  2. виникають у складнощі моніторингу і логування кожної частини.

Ми витратили 100500 годин на налаштування, все налаштували й щасливі.

Огляд Serverless архітектури

А що якщо все може бути набагато простіше в налаштуванні й не потребує танців з бубном?

І тут з'являється наш новий герой.

Serverless

На Вікіпедії можна знайти наступне визначення:

Serverless — модель хмарних обчислень для яких платформа динамічно керує виділенням машинних ресурсів. Іноді безсерверні обчислення також іменують «Функція як послуга» (англ. Function as a Service, FaaS), тому що одиницею коду є функція, яка виконується платформою. По суті для виконання одного запиту створюється окремий контейнер, який знищується після виконання.

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

Отже, така архітектура моє такі переваги:

  1. просте встановлення системи;
  2. простий деплой, оскільки нам потрібно розгортати кожну функцію окремо;
  3. вартість такої системи вкрай мала (наприклад, перший мільйон запитів на AWS Lambda безкоштовний і по 20 центів за кожний наступний мільйон). Для порівняння вартість найдешевшої конфігурації сервера на DigitalOcean 5$/місяць;
  4. така архітектура проста для розуміння;
  5. і, напевно, найбільший плюс — автоматичне масштабування. Вам більше не потрібно переживати чи ваші сервери витримають навантаження, про це потурбується Amazon, Google чи Microsoft.

Звучить круто, але куди ж без мінусів ?

  1. структура проекту може виглядати заплутаною, але для вирішення таких проблем є Claudia.js;
  2. перший запит потребує додаткового часу (розгортання контейнеру тощо). Близько 2-3 секунд.

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

Теорія звичайно добре, але як це все самому спробувати?

Для старту нам потрібні наступні речі:

Перше. Акаунт AWS. Створити можна тут.

Друге. Налаштувати AWS акаунт:

  1. Переходимо на Identity & Access Management (IAM) сторінку
  2. Натискаємо на 'Users', а далі на 'Add user'
  3. Далі потрібно дати ім'я користувачу. Для кращого розуміння назвіть serverless-admin
  4. Виберіть 'Programmatic access' і 'Next'
  5. Далі клікаємо на 'Attach existing policies directly' і вибираємо 'AdministratorAccess' (перший рядок у таблиці)
  6. 'Next' i 'Create User'
  7. Далі з'явиться сторінка на якій будуть API Key & Secret. Скопіюйте їх або завантажте як CSV. Ці ключі нам і потрібні.

Третє. Node.js

Найважливіше. Хороший настрій.

Для початку потрібно становити Serverless CLI.

npm install -g serverless

Далі встановимо проект:

serverless create --template aws-nodejs --path my-service

Створяться serverless.yml. Це конфіг файл у якому ми вказуємо ім'я сервісу, ім'я провайдера й ім'я контейнеру, який потрібно підняти. І функції, які ми будемо деплоїти.

service: my-service

provider:
  name: aws
  runtime: nodejs6.10

functions:
  hello:
    handler: handler.hello

І handler.js у якому і буде жити наша функція.

module.exports.hello = (event, context, callback) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless v1.0! Your function executed successfully!',
      input: event,
    }),
  };

  callback(null, response);
};

Задамо ключі (API Key & Secret):

serverless config credentials --provider aws --key YOUR-API-KEY --secret YOUR-SECRET-KEY

Тепер потрібно розгорнути наш сервіс:

serverless deploy -v

І функцію:

serverless deploy function -f hello

Щоб викликати цю функцію:

serverless invoke -f hello -l

Наша функція працює:

{
    "statusCode": 200,
    "body": "{\\"message\\":\\"Go Serverless v1.0! Your function executed successfully!\\",\\"input\\":{}}"
}

Для перегляду логів:

  1. Відрийте нову вкладку у терміналі;
  2. serverless logs -f hello -t

І якщо вам потрібно буде видалити весь сервіс з AWS Lamda:

serverless remove

На цьому у мене все. Це моя перша стаття і я був би дуже радий отримати будь-які відгуки. Всім добра)

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 3.9K
Приєднався: 11 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація