Why and how did we migrated the core of our v-Ticket system from Auto-Scaling Group to AWS Lambda, difficulties we’ve faced down the road, specialties of using PHP within Lambda and how much it all costs in real life.
7. CONCERT.UA – ЭТО
Билетный сайт №2 на территории экс-СССР по посещаемости
Билетный сайт №66 в мире
1,5-2M посещений в месяц
Труднопредсказуемые всплески посещаемости
8. ЧТО ТАКОЕ LAMBDA-
ФУНКЦИЯ?
AWS Lambda позволяет запускать программный код без выделения
серверов и управления ими. Вы платите только за фактическое время
вычисления. Если программный код не исполняется, оплата не требуется.
10. ОБЛАСТЬ
ПРИМЕНЕНИЯ FaaS
Как замена некоторым микро-сервисам
API
Классические вебсайты
Обрабока и трансформация (Kinesis, S3, DynamoDB, etc)
Как замена cron-job (через триггер CloudWatch)
11. ДЛЯ ЧЕГО НЕ
ПОДХОДИТ
o Демоны или сервисы, которые должны быть постоянно запущены, а не
работать по принципу born-to-die
o Код с долгим (более нескольких секунд) временем вызова. Например пересчёт
статистики, перекодирование видео и т.п.
o Отдачи статики
16. What is Firecracker?
Firecracker is an open source virtualization
technology that is purpose-built for
creating and managing secure, multi-
tenant container and function-based
services that provide serverless
operational models.
21. СИСТЕМНЫЕ РЕСУРСЫ
o Инстансу функции выделяется от 128МБ до
3008МБ памяти
o Пропорционально выделяется ресурс vCPU таким
образом, что при 1792МБ он равен 1 vCPU
22. ОГРАНИЧЕНИЯ
250МБ на функцию в распакованном виде
По умолчанию 1000 одновременно исполняемых инстансов
Все входящие сетевые соединения заблокированы
Закрыт порт TCP 25 (борьба со спамом)
Максимальное время исполнения 15 мин (по умолчанию 3 сек)
Размер payload ограничен:
o 6 MB (synchronous)
o 256 KB (asynchronous)
Read-only файловая система и 512МБ хранилища в /tmp
25. РАБОТА С PHP В
LAMBDA РАНЕЕ
В AWS Lambda нет native runtime для PHP
Приходилось применять фокусы, используя пакеты вроде
https://github.com/araines/serverless-php
26. РАБОТА С PHP В
LAMBDA СЕГОДНЯ
С ноября 2018 появилась возможность запуска custom runtimes
Появились пакеты вроде Bref:
https://bref.sh/
27. • PHP 7.2 и 7.3
• FPM и CLI
• Широкий набор доступных экстеншенов
• Устанавливается как Composer-пакет
• Оркестрация и деплой через Serverless
• Возможность использования Lambda Layers
• Совместим с Symfony и Laravel
31. WHAT IS AWS
FARGATE?
AWS Fargate is a compute engine for Amazon ECS that allows you to run containers
without having to manage servers or clusters. With AWS Fargate, you no longer have
to provision, configure, and scale clusters of virtual machines to run containers.
32. ЧЕМ FARGATE
ОТЛИЧАЕТСЯ ОТ
LAMBDA?
Fargate оперирует Docker-контейнерами
Подходит для длительно живущих задач
Позволяет тонко выделять память и процессорные ресурсы
Scaling происходит по устанавливаемым метрикам CPU и памяти
33. ГДЕ МЫ ИСПОЛЬЗУЕМ
LAMBDA?
Приватный Analytics API (через API Gateway)
Билетное ядро системы v-Ticket (через ALB)
38. СКОЛЬКО ЭТО СТОИТ?
For comparison, we’ll use a typical workhorse instance, the m4.large instance
type. It has 2 vCPU and 8 GB RAM and costs $0.12/hr or approx $86/month
in the N. Virginia region.
Lambda Breakeven Analysis for an m4.large Instance
Editor's Notes
Меня зовут Евгений Лысенко, я со-основатель и CTO компании Concert.u
Concert.ua сейчас является лидером билетного рынка страны
Concert.ua – frontstore, витрина. Хранит внешнее представление ассортимента, подборки, рейтинги, консюмеров, процессит оплаты
V-Ticket – склад, система. Хранит залы, продажи, билетную массу, совершает процессинг, биллинг и делает многое другое
В прошлом году в своём докладе я рассказывал о том, как нам удалось преобразовать архитектуру проекта из вот этой модели…
Вот в это
Также хочу сделать акцент на том, что backend нашей системы написан на PHP7.2 (на данный момент), как думаю и у многих из здесь присутствующих. Поэтому я буду в дальнейшем акцентировать внимание на работе рассматриваемых технологий именно с PHP
Последний пункт самый важный: это объясняет почему мы ищем и пробуем подобные технологии
Каждый раз вижу в этом Half-Life
Примеры использования:
Обработка потоков событий
Трансформация изображений
API
1млн вызовов и 400ГБ-сек в мес бесплатно
ГБ-сек – интересная мера
По умолчанию в Lambda вообще запрещен выхлоп бинарных данных
12 Ф – все они важны, но критически важные: №3 конфигурация через переменные окружения и №6 приложение должно быть stateless
Сегодня мы подробно рассмотрим
Меган Фокс вот тоже интересно что же там
Firecracker runs workloads in lightweight virtual machines, called microVMs, which combine the security and isolation properties provided by hardware virtualization technology with the speed and flexibility of containers.
Основан на KVM
Этот движок AWS стали использовать относительно недавно и именно с ним пришли существенные улучшения как производительности, так и функционала. Отдельно стоит упомянуть lambda layers.
Чего здесь нет? )
К этому мы вскоре вернёмся
Хуже всего дела обстоят у C#
Чем больше размер функции и меньше у неё памяти, тем дольше она стартует. В некоторых случаях это может занимать до 5 сек у даже дольше
Вероятность уничтожения micro-VM после последнего вызова в минутах
В целом обычно это промежуток от 5 до 10 минут
Как часто? Принято каждые 5 мин
Это называют «поддержкой функции тёплой»
Забегая наперёд скажу, что это автоматизировано в рассматриваемом далее инструментарие
ВСЕ ВХОДЯЩИЕ СОЕДИНЕНИЯ ЗАБЛОКИРОВАНЫ
Обратите на это внимание. Функция не получает напрямую никаких данных извне. Только через триггеры. Об этом чуть позже
Максимально 15 мин, но только не через API Gateway, там 30 сек на вызов
Хранение темп-файлов и кеша в /tmp, т.к. read-only файловая система
Хранение в S3
Хранение в ElastiCache (Redis/Memcache)
Пред-создание и подключение layer’ов
Это не все возможные триггеры
Есть ещё интеграция с целым набором сторонних сервисов вроде PagerDuty или SugarCRM
Задумка интересная, но пока сыровата
Если захочется боли и страданий – вам сюда
Обёртка nodejs
На данный момент PHP не ниже 7.2, если у вас 7.1 или ещё ниже, то вам придётся использовать устаревшую версию Bref
Сегодня мы подробно рассмотрим
Underhyped
Тоже под Firecracker
Сейчас есть Fargate для ECS и начале 2020 обещают Fargate для EKS
Это брат Lambda, с определёнными отличиями
Похож на Google Compute Engine
По своей сути призван заменить прямую работу с EC2 инстансами на ECS
Сильно подешевел в последнее время и сравним с EC2 по финальной стоимости (ранее был дороже)
Он пока живёт на ECS как AutoScaling группа.
Планируем переводить на Fargate
Глобальное исследование среди 550 компаний
For most periodic or very light workloads, Lambda is dramatically less expensive than even the smallest EC2 instances.
Focus on the memory and execution time that a typical transaction in your app will need to relate a given instance size to the break-even Lambda cost.