Часть 1: Почему бессерверная?

Если вы разработчик программного обеспечения, который в настоящее время ищет что-то новое, то такие модные слова, как Serverless, Lambda, скорее всего, натолкнулись на ваши поисковые запросы. За последние несколько недель я потратил несколько раз на изучение бессерверного мира, особенно в экосистеме AWS. Таким образом, я решил начать серию статей Перейти без сервера.

Помимо кратких идей о том, что на самом деле такое бессерверное, эта серия статей также направлена ​​на более глубокое изучение бессерверной экосистемы AWS. Мы постепенно пройдемся по его строительным блокам и посмотрим, как все они будут реализованы в реальности.

Давайте начнем!

Означает ли бессерверное… отсутствие сервера?

Интересно ... нет

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

Итак - бессерверная - меньше работы для вас, больше работы для облачного провайдера вашего приложения.

Бессерверное приложение запускается в компьютерных контейнерах без сохранения состояния (также управляемых облачными провайдерами) в течение очень короткого количества раз, что может быть всего одним вызовом. Кроме того, это событие-триггер. Это означает, что ваш сервер всегда спит, пока не будет разбужен определенным триггером события. После обработки события сервер снова переходит в спящий режим.

Бессерверные провайдеры

Есть ряд технологических гигантов, которые вкладывают огромные средства в бессерверные сервисы и инфраструктуры. Их платформы предлагают широкий спектр инструментов и услуг, которые помогают в создании приложений.

Теперь вы можете задаться вопросом: чем все это отличается от обычного, говорит сервер AWS, с которым вы знакомы много лет?

По правде говоря, довольно сложно выяснить причину, основываясь исключительно на определении serverless и его архитектуре. Однако, как упоминалось ранее:

Разработчикам необходимо полностью полагаться на бессерверных провайдеров, чтобы они выполняли работу по выделению и предоставлению ресурсов для сервера

Что именно выделяет и инициализирует сервер? 🤔 Давайте возьмем AWS в качестве примера и кратко рассмотрим несколько сервисов, которые он предоставляет, чтобы разобраться в этом непростом вопросе 💪

Что мы делаем меньше?

Вот краткий обзор бессерверной архитектуры AWS. Мы рассмотрим эти блоки, которые полностью управляются AWS для внутренних разработчиков.

Создавайте и поддерживайте API с помощью API Gateway

Обычно одной из первых задач при создании серверного приложения является инициализация приложения, скорее всего, из фреймворка. Затем вы разработаете другие API:

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

За исключением третьей части, обрабатываемой Lambda, API Gateway поможет вам сделать все остальное. Как?

Все это будет более подробно рассмотрено в следующих частях этой серии, поскольку мы будем работать над созданием REST API с нуля 😎. А теперь, чтобы вы могли познакомиться с этим, вот сладости, которые вы можете получить прямо из коробки с помощью API Gateway:

  • Объявление ресурса и метода
  • Запросить валидатор
  • Запросить отображение и преобразование данных перед передачей в Lambda для обработки
  • Измените форму данных, возвращаемых Lambda, прежде чем отправлять их обратно клиенту
  • Ведение журнала: в большом приложении вам может потребоваться создать и поддерживать отдельную службу для ведения журнала. AWS предоставляет для этого AWS CloudWatch.

Запустить код приложения с помощью Lambda

AWS Lambda - это вычислительная служба, которая запускает код без необходимости управлять сервером. Таким образом, вам не нужно беспокоиться о поддержке сервера, его ЦП, сети и ОС. Когда ваше приложение получает больше трафика, Lambda автоматически масштабируется.

Еще одно большое преимущество Lambda и serverless в целом - это экономия средств. Нам нужно платить только за время, в течение которого наш код действительно выполняется.

Это здорово благодаря своей модели исполнения. Лямбда-функции выполняются в контейнерах, управляемых AWS. В ответ на триггер события контейнер инициализирует экземпляр и выполняет в нем функцию-обработчик Lambda. Если поступают другие запросы, создаются новые экземпляры. Если его больше нет, контейнер снова переводится в спящий режим и не используется.

Как они связаны друг с другом?

Вернемся к бессерверной архитектуре AWS. Мы уже знали, что API Gateway - это место для создания наших API и управления ими. Он принимает и изменяет данные, полученные по запросам клиентов, и отправляет эти значимые данные в обработчик функции. Но как ресурс шлюза API взаимодействует с лямбда-функцией?

В бессерверном приложении нам нужно добавить конфигурацию для этого соединения. Это выглядело бы примерно так:

Эта настройка по существу указывает приложению использовать функцию todos.handler в ответ на событие HTTP с помощью метода GET и маршрута /todos. Итак, когда клиент делает запрос GET для этого маршрута нашего API, будет вызвана функция todos.handler, получит данные задач и отправит их обратно в API-шлюз (! Понятно). Метод API Gateway при необходимости преобразует эти данные перед возвратом данных клиенту. Мы углубимся в это в следующей части серии.

Быстрые обновления и уменьшение задержки

Помимо отсутствия ресурсов сервера, масштабирования управления и экономии затрат, бессерверное решение дает существенные преимущества.

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

Затем бессерверные приложения могут быть распределены по всему миру. Это означает, что коды наших приложений запускаются не на сервере с фиксированным происхождением, а ближе к конечным пользователям. Самое приятное то, что облачные провайдеры предоставляют нам потрясающие инструменты и помогают управлять всей инфраструктурой за сценой. Хорошими примерами являются Lambda @ Edge от AWS и Cloudflare Workers от Cloudflare. Этот уникальный вид архитектуры значительно снижает задержку запросов и, таким образом, повышает производительность наших приложений.

Ключевые выводы

  • Бессерверные приложения работают на реальных серверах.
  • Облачные провайдеры помогают разработчикам в решении критически важных задач по распределению ресурсов и обеспечению. Эти работы включают создание API, обслуживание и автоматическое масштабирование сервера (операционной системы, ЦП и сети), а также базы данных.
  • Бессерверные провайдеры и внешние фреймворки предоставляют нам API и инструменты для соединения строительных блоков архитектуры вместе.
  • Одно из ключевых преимуществ бессерверной архитектуры по сравнению с традиционным сервером - это оплата по мере использования, предоставляемая поставщиками услуг. Это означает, что нам нужно платить только за фактически используемые ресурсы.
  • Бессерверная архитектура также дает большие преимущества, такие как более быстрое обновление и повышение производительности приложений.

Ресурсы

Что такое бессерверная архитектура? Каковы его плюсы и минусы?
Lambda-AWS Docs
Что такое AWS Lambda? | Бессерверный стек
Amazon API Gateway - Amazon Web Services

Пограничные вычисления | CDN, глобальный бессерверный код, распространение | AWS Lambda @ Edge

Это конец серии «Часть 1: Почему бессерверные в Go Serverless»!

В следующей части мы создадим бессерверный API с нуля с помощью API Gateway, Lambda и Serverless framework. Так что следите за обновлениями и счастливого кодирования! 💪👨🏻‍💻

Я хотел бы услышать ваши идеи и мысли 🤗 Пожалуйста, запишите их ниже 👇👇👇

✍️ Автор

Винь Ле @ vinhle95

👨🏻‍💻🤓🏋️‍🏸🎾🚀

Деловой человек, ученик на протяжении всей жизни, любитель технологий и разработчик программного обеспечения

Сказать привет 👋 на

Github

LinkedIn

Средний

LinkedIn