Обзор сервисов
Кратко:
- Yandex Cloud Functions - базовый сервис для serverless-разработки в Yandex Cloud.
- Функции, написанные на поддерживаемых языках программирования, исполняются на сервере Yandex Cloud.
- Резервное копирование дисков и обработка HTTP-запросов могут быть выполнены с использованием Cloud Functions.
- Yandex API Gateway - готовый serverless-решений для обработки HTTP-запросов, не требующий аренды ресурсов.
- Yandex Message Queue позволяет выполнять асинхронную и параллельную обработку запросов.
- Yandex YDB - распределенная отказоустойчивая база данных с SQL и Document API.
- Yandex Object Storage - масштабируемое облачное объектное хранилище данных.
- Yandex Serverless Containers - сервис для запуска Docker-контейнеров без создания виртуальных машин.
Обзор сервисов
Базовым сервисом для serverless-разработки в Yandex Cloud является Yandex Cloud Functions. Он относится к категории Function-As-A-Service (FaaS), его главная задача — исполнять программный код, который написан на одном из поддерживаемых языков программирования.
Допустим, вам нужно ежедневно делать резервные копии дисков нескольких ВМ, запущенных в Yandex Cloud. В старой парадигме вы бы создали ещё одну ВМ, настроили утилиту cron для запуска резервного копирования по расписанию, а затем были бы вынуждены всё время поддерживать эту ВМ в работоспособном состоянии.
Работая в парадигме serverless, вы можете адаптировать скрипт, с помощью которого делали бэкап, под использование в Cloud Functions, создать функцию через консоль управления и настроить расписание ее выполнения. Больше ни о чём думать не надо — сервис сделает всё остальное. При этом вы будете платить только за количество вызовов функции, а также за время её исполнения.
Второй типовой сценарий работы с Cloud Functions — это обработка HTTP-запросов. Приложение, обрабатывающее запросы из интернета, редко доступно пользователям напрямую. Обычно между клиентом и приложением размещается промежуточный компонент, или API-шлюз (API Gateway), который обеспечивает балансировку, поставку статического контента, маршрутизацию запросов на нужные сервисы, терминирование SSL.
На рынке существует множество готовых API-шлюзов (NGINX, Apigee, Axway, 3Scale и т. д.), которые можно развернуть на ВМ в вашем облаке. Но гораздо удобнее воспользоваться готовым serverless-решением — Yandex API Gateway. Чтобы его использовать, вам не нужно арендовать какие-либо ресурсы на почасовой основе.
Представим, что ваше приложение должно по запросу отдавать статический контент из хранилища. Раньше вы подняли бы для этого сервер с NGINX. А сейчас просто настраиваете API Gateway — Yandex Cloud сам примет запросы, терминирует HTTPS, маршрутизирует запросы к сервисам и отдаст контент из Object Storage. Вам нужно будет заплатить лишь за количество запросов к созданным API-шлюзам и исходящий трафик.
Когда на запрос клиента нужно ответить быстро, а обработка запроса требует времени, её можно сделать асинхронной и параллельной, используя очереди сообщений на базе Yandex Message Queue.
Предположим, что в вашем веб-сервисе регистрируется новый пользователь. Отвечающий за это микросервис складывает в очередь несколько сообщений: записать данные в CRM, отправить приветственное письмо и т. д. И сразу же после этого отвечает пользователю, что регистрация прошла успешно. Другие микросервисы забирают из очереди свои задачи и выполняют их. Благодаря такому «клею» между компонентами вы можете создавать достаточно сложные конструкции. При этом решаются и вопросы надёжности — пользователь сможет зарегистрироваться, даже если, например, CRM в данный момент недоступна (отвечающий за работу с ней микросервис обработает все накопившиеся сообщения о регистрации, когда она «поднимется»). А ещё не надо арендовать серверы и обслуживать сложные технические решения, которые позволили бы надёжно передавать сообщения между компонентами вашего сервиса.
Набор serverless-сервисов был бы неполон, если бы среди них не было базы данных. В Yandex Cloud это YDB — распределённая отказоустойчивая Distributed SQL база данных с возможностью использовать SQL или Document API (AWS DynamoDB API), практически неограниченными возможностями масштабирования и оплатой только за успешно выполненные запросы и объём хранимых данных. Создаётся такая БД за несколько секунд через консоль управления или CLI, после чего вы получаете URL для доступа к ней и можете начинать работу.
Эти четыре сервиса мы подробно разберём в рамках курса. Остальные сервисы группы Serverless будут кратко упомянуты ниже, для их изучения рекомендуем обратиться к документации.
Yandex Object Storage — масштабируемое облачное объектное хранилище данных, совместимое с Amazon S3 API. У Object Storage есть ряд преимуществ перед обычным сервером, на который можно писать данные в произвольную папку.
Во-первых, это плоское хранилище без иерархии файловой структуры, что ускоряет поиск данных. При этом внутри хранилища сохраняемые файлы группируются в бакеты — за счёт этого можно разделять данные разных проектов или пользователей.
Объекты в Object Storage реплицируются в несколько географически распределённых зон доступности, что повышает надёжность хранения данных.
Наконец, объектное хранилище может автоматически расширяться по мере необходимости, а значит, вам не нужно отслеживать, хватает ли в нём места.
Yandex Serverless Containers — сервис для запуска Docker-контейнеров без создания виртуальных машин и кластеров Kubernetes. Serverless Containers сам использует функции Yandex Cloud Functions для развёртывания контейнеров. Это даёт ряд преимуществ: функции автоматически масштабируются, нет необходимости настраивать балансировщик нагрузки, функцию можно развернуть за секунды.
Yandex Cloud Logging — сервис для агрегации и чтения логов пользовательских приложений и ресурсов Yandex Cloud. Вы можете создать свою лог-группу, объединяющую несколько облачных сервисов. Это удобно в тех случаях, когда вам нужно отладить работу, скажем, микросервисного приложения. Объединив логи Cloud Functions, API Gateway и Message Queue, вы будете видеть в консоли управления запросы к API-шлюзу, действия с событиями в очереди и журнал исполнения программного кода.
Сервис Cloud Logging не только является частью serverless-экосистемы, но и сам построен на базе бессерверных технологий, в частности, хранит данные в Serverless YDB.
Yandex IoT Core — сервис интернета вещей для двустороннего обмена сообщениями между реестрами и устройствами. Этот сервис использует протокол Message Queuing Telemetry Transport (MQTT), который применяется в автоиндустрии, логистике, платформах умных домов, умных бытовых устройствах и т.д.
IoT Core обеспечивает защиту данных по всем точкам подключения, поддерживает автоматическую балансировку и горизонтальное масштабирование во всех дата-центрах Yandex Cloud. Вы можете связывать IoT Core с Cloud Functions через триггеры. В этом случае ваши функции Cloud Functions смогут обрабатывать копии сообщений, передаваемых через MQTT-брокер.
Yandex Data Streams — масштабируемый сервис для управления потоками данных в режиме реального времени. Эта шина потоков данных может непрерывно собирать информацию из разных источников и накапливать её в принимающих системах, таких как ClickHouse, S3 и других. При этом передаваемые данные можно произвольным образом обрабатывать программным кодом из Cloud Functions.
К примеру, вы разрабатываете IoT-устройство с веб-сервисом и мобильным приложением. С помощью Data Streams вы можете собирать телеметрию с устройства, а также данные об использовании сервиса и приложения, чтобы в одной точке анализировать закономерности поведения пользователей и улучшать клиентский опыт.
На следующем уроке мы немного подробнее разберём экономические преимущества использования serverless-подхода при разработке и размещении приложений в облаке.