Изучаем serverless в диалоге — 🧙♂️(博士) и 🐣(学生) выживают в мире облачных счетов
Я вспомнил времена, когда никак не мог понять serverless, и засыпал доктора вопросами.
Сервер исчез? Кто же этот волшебник
🧙♂️(博士)「🐣, сегодня будем разбираться с serverless. Название звучит как ‘магия исчезнувшего сервера’, но на деле всё куда прозаичнее, хоть и довольно глубоко.」
🐣(学生)「Сервера нет? Вы что, как Гарри Поттер, выкрикнули 『Сервер, исчезни!』 — и он реально пропал?」
🧙♂️(博士)「Ха-ха, так думают девять из десяти. Но серверы никуда не деваются. Они вкалывают где-то в недрах облака, просто пользователю не нужно о них думать.」
🐣(学生)「То есть обман? Как надпись ‘без пестицидов’, а на самом деле всё залили химией?」
🧙♂️(博士)「Сравнение странное, но по сути верное. В слове serverless ’less’ означает ‘меньше управления’. Раньше мы сами ‘держали’ сервер, ставили ОС, дежурили при авариях — как ухаживать за хомяком. В serverless всё это на себя берёт облачный провайдер.」
🐣(学生)「Хомяк если умрёт — плачешь, а сервер если упадёт — клиенты орут. Ещё тяжелее.」
🧙♂️(博士)「И хомяк не поднимает тебя в три ночи с сообщением ‘база данных не отвечает’.」
📌 Заметка: базовые принципы serverless Serverless не означает «серверов нет». Это архитектура, где управление серверами берёт на себя облачный провайдер.
- Классический подход: покупаем, размещаем и обслуживаем сервер сами
- Serverless: провайдер ведёт всю инфраструктуру, а мы концентрируемся на коде
Как работает serverless: ниндзя, который появляется по вызову
🐣(学生)「Звучит сложно. Чем это отличается от обычного сервера?」
🧙♂️(博士)「Да, есть нюансы. В serverless ресурс ‘появляется’ только когда его вызывают, выполняет работу и исчезает. Поэтому приложения надо проектировать как ‘спринтеров’. Марафонцам тут не место.」
🐣(学生)「То есть крикнули ‘срочно посчитай!’ — он выпрыгнул, а как только сказали ‘готово’ — растворился?」
🧙♂️(博士)「Именно! Прям как ниндзя, которого вызывают по требованию. Пока он прячется в облаке, платить за простой не нужно.」
🐣(学生)「Но ниндзя каждый раз появляются из разных мест. Что с IP-адресом?」
🧙♂️(博士)「Остро подмечено. Постоянного адреса нет: каждый раз работает другой сервер. Поэтому облако ставит API Gateway — такого ‘привратника деревни ниндзя’, который распределяет внешние запросы нужному ниндзя.」
🐣(学生)「Понятно. А если ниндзя меняется, значит, он ничего не помнит?」
🧙♂️(博士)「Так и есть. Нужен stateless-дизайн. Никаких ‘привет, продолжаем вчерашний разговор’. Каждая сессия — как знакомство с золотой рыбкой заново.」
🐣(学生)「Неудобно. А как быть с логином и сессиями?」
🧙♂️(博士)「Хранить состояние вовне: база данных, Redis и прочее. Сам ниндзя память не держит, но складывает важные свитки в ‘архив свитков’.」
📌 Заметка: почему важен stateless-дизайн Serverless-функции стартуют в новом контейнере при каждом вызове, так что локальное состояние (переменные, файлы, сессия) не сохраняется.
- Состояние: внешняя БД, Redis, S3 и т. п.
- Сессии: JWT-токены или внешние хранилища
- Файлы: всё долговременное нужно класть во внешнее хранилище
Чем отличается от обычного сервера: питомец против ниндзя
🐣(学生)「Приведите пример.」
🧙♂️(博士)「Возьмём обработку ‘создать миниатюру при загрузке изображения’. В классическом варианте 24/7 стоит сервер: 『ну что, кто-то пришёл?』. Электричество жрёт, да ещё и падать может.」
🐣(学生)「Как охранник, который у двери дежурит и ждёт посетителей.」
🧙♂️(博士)「Верно! И иногда охранник простывает и падает. В serverless же, как только прозвенел звонок 『загружено изображение!』, ниндзя выскакивает, быстро делает миниатюру и снова исчезает.」
🐣(学生)「А ждать ниндзя долго не приходится?」
🧙♂️(博士)「Вот она, проблема cold start. Пока ниндзя спит, ему нужно несколько секунд, чтобы проснуться и подготовиться. С тяжёлыми языками вроде Java это как сонный ниндзя, который сперва растягивается на коврике и готовит завтрак.」
🐣(学生)「Бесит. Значит, для реального времени не подходит?」
🧙♂️(博士)「Есть механизмы прогрева, но в целом serverless силён в батчевых и асинхронных задачах. 『Ответь немедленно!』 — не его стихия.」
Разберёмся на примере: приложение для обмена фотографиями
🐣(学生)「Поясните на примере. Хочу сделать фотосервис.」
🧙♂️(博士)「Отлично. Классическая схема:」
Классический сервер:
Веб-сервер работает 24/7 (5000 иен в месяц)
↓
«Фотография загружена»
↓
Генерация миниатюры на сервере
↓
Сохранение в базе данных
🧙♂️(博士)「Так ты платишь 5000 иен каждый месяц, даже если никто ничего не загружает. Как арендовать магазин без посетителей.」
🐣(学生)「Пустая трата.」
🧙♂️(博士)「А в serverless будет так:」
Serverless-версия:
Изображение попадает в S3
↓
Событие S3 триггерит функцию Lambda
↓
Lambda запускается (0,1 секунды)
↓
Создаёт миниатюру и кладёт в другой бакет S3
↓
Lambda завершается
↓
Оплата: только за время выполнения (около 0,001 иены за вызов)
🐣(学生)「То есть если никто не пользуется — ничего не платим?」
🧙♂️(博士)「Именно. Платишь за фактическое использование. Но если проект взорвётся, счёт взорвётся тоже. Видео стало вирусным — миллион вызовов…」
🐣(学生)「Получим счёт на 1000 иен!」
🧙♂️(博士)「Счёт посчитан верно, но не забывай про трафик, API Gateway, базы данных. Легко набегают десятки тысяч иен. Современная трагедия: 『завирусилось — и банкротство』.」
📌 Заметка: плюсы и минусы поминутной оплаты
Преимущества
- Почти нулевые стартовые затраты
- Автоскейл по фактической нагрузке
- Нет необходимости управлять инфраструктурой
Риски
- Непредсказуемые большие счета (особенно при вирусном росте)
- Сложные тарифные модели
- Сложно увидеть совокупную стоимость связки сервисов
Что делать
- Настроить оповещения о расходах
- Ограничить частоту запросов
- Делать нагрузочные тесты и расчёт стоимости заранее
Виды serverless: специализация ниндзя
🐣(学生)「Говорят, serverless бывает разным?」
🧙♂️(博士)「Есть три главных школы: FaaS (Function as a Service), BaaS (Backend as a Service) и serverless-контейнеры.」
🐣(学生)「Что такое FaaS?」
🧙♂️(博士)「Это сервис 『мы берём на себя только функцию』. AWS Lambda, Google Cloud Functions, Azure Functions. Пишешь функцию, а они 『запускают по вызову и берут деньги за фактическое время』 — почти как суши-бар.」
🐣(学生)「А BaaS?」
🧙♂️(博士)「Это 『и базу, и аутентификацию, и пуши сделаем за тебя』. Firebase, Supabase, AWS Amplify. Как жить дома с родителями: 『мама всё сделает』.」
🐣(学生)「Дома уютно, но правила родителей соблюдать надо.」
🧙♂️(博士)「Вот-вот. Это риск vendor lock-in. Не заметишь, как окажешься 『на игле сервиса』.」
Где serverless силён, а где пасует
🐣(学生)「Может, проще попыхтеть вручную? Зачем тогда serverless?」
🧙♂️(博士)「Главный плюс — скорость. Придумал идею — быстро выкатил. Пока аудитория маленькая, платишь почти ничего. Можно вечером придумать сервис, а утром уже запустить.」
🐣(学生)「Но для любых задач он не годится?」
🧙♂️(博士)「Конечно. У него очень чёткие сильные и слабые стороны.」
Сильные стороны
- Обработка изображений (upload → миниатюра)
- Трансформация данных (CSV → JSON)
- Отправка уведомлений (почта, push)
- Регулярные батчевые задачи (ежедневные отчёты)
- Лёгкие API (поиск пользователя, выдача данных)
Слабые стороны
- Реалтайм (чаты, игры)
- Долгие задачи (видеоэнкодинг, ML)
- Сложное управление состоянием
- Тесная связка со старыми системами
🐣(学生)「То есть『мощный спринт, но слабая выносливость』.」
🧙♂️(博士)「В точку! На 100 метров — чемпион, на марафоне — нет.」
Ловушка тарифов: ниндзя на почасовой оплате
🐣(学生)「Если силачам он не нужен, а счёт может убить, значит, выгодно только умным?」
🧙♂️(博士)「Так. Serverless — это 『выигрывает тот, кто думает, а кто расслабился — взрывается』. Не понимаешь тарификацию — попадёшь в ад.」
🐣(学生)「Какой ад?」
🧙♂️(博士)「Например, написал бесконечный цикл. На обычном сервере просто всё тормозит. В serverless же 『ниндзя вызываются бесконечно』.」
🐣(学生)「Армия ниндзя пашет без остановки и присылает счёт? Жуть.」
🧙♂️(博士)「И узнаешь ты об этом по счёту в конце месяца: 『Как так — миллион иен?』 У AWS полно реальных историй про сотни тысяч иен.」
🐣(学生)「Страшно. Можно защититься?」
🧙♂️(博士)「Конечно. Настраиваешь бюджетные оповещения, ограничение времени выполнения, лимиты на параллелизм. Это как грамотно прописать 『контракт найма ниндзя』.」
Реальные провалы: ужас, когда стало вирусно
🐣(学生)「А есть живые примеры огромных счетов?」
🧙♂️(博士)「Хоть отбавляй. Например, 『фотоприложение, которое взлетело и получило счёт на 3 миллиона иен』.」
🐣(学生)「Ого… Что случилось?」
🧙♂️(博士)「Стартап сделал приложение, которое 『улучшает фото с помощью ИИ』. Расчитывали на 0,1 иены за снимок.」
🐣(学生)「И?」
🧙♂️(博士)「Вирусный рост: миллион фото в день. Каждое обрабатывалось дольше, чем думали, и фактическая цена стала 3 иены за фото.」
🐣(学生)「1.000.000 × 3 иены = 3.000.000…」
🧙♂️(博士)「И так 30 дней подряд. 『Прославились и обанкротились』 — типичная трагедия.」
🐣(学生)「Не подстраховались?」
🧙♂️(博士)「Никаких лимитов. 『Не ожидали такого вируса』. Сейчас уже считается нормой задавать 『потолок успеха』.」
🐣(学生)「Забавно — ограничивать успех.」
🧙♂️(博士)「Иронично. 『Радостный вопль』 превращается в настоящее рыдание.」
Опыт разработки: магическое удовольствие и боль ограничений
🐣(学生)「А разработка? Это же что-то другое?」
🧙♂️(博士)「Сначала кайф. Написал функцию, нажал кнопку — и она в проде. Чувствуешь себя волшебником.」
🐣(学生)「Звучит классно.」
🧙♂️(博士)「Но потом всплывает обратная сторона. Локально тестировать трудно, отладка мучительная. Подумал 『почему не работает?』 — а ниндзя уже исчез, остаются лишь логи.」
🐣(学生)「Как прийти на место преступления и найти только улики.」
🧙♂️(博士)「Точно. И логи разбросаны по куче сервисов: CloudWatch, X-Ray, CloudTrail — целый детектив.」
🐣(学生)「Нудно. Может, проще свой сервер держать.」
🧙♂️(博士)「Вот она ловушка serverless. Сначала простая магия, потом сложное проклятие. Но привыкнув, назад к ‘уходу за сервером’ возвращаться не хочется.」
🐣(学生)「Значит, вызывает зависимость?」
🧙♂️(博士)「Ага. 『Не думать о серверах』 — наркотик. Но вместо этого появляются 『страх перед счётами』 и 『архитектурные ограничения』.」
Serverless и классика: каков реальный ценник
🐣(学生)「В итоге что дешевле?」
🧙♂️(博士)「Зависит от объёмов и предсказуемости. Представь график:」
Классический сервер
- Фикс: 50 000 иен в месяц
- Переменные: почти ноль
- Модель «столовая с комплексными обедами»
Serverless
- Фикс: почти ноль
- Переменные: пропорционально нагрузке
- Модель «конвейер суши»
🐣(学生)「Дешевле будет там, где ты ешь ‘больше или меньше’.」
🧙♂️(博士)「Именно. Мало ‘ешь’ — конвейер суши (serverless). Ешь много — столовая (классика). Конкретно:」
До 1 миллиона запросов в месяц: serverless заметно дешевле
Выше 10 миллионов запросов: классический сервер выгоднее
Между ними: зависит, учитывай и операционные расходы
🐣(学生)「А если ошибиться в прогнозе?」
🧙♂️(博士)「Получается лотерея. 『Собирался объесться в столовой, а аппетита нет』 или 『думал перекусить в суши-баре, а вышел чемпионат по обжорству』.」
Победит ли serverless?
🐣(学生)「Так serverless победит или проиграет?」
🧙♂️(博士)「Ни тотального триумфа, ни провала. Классика, контейнеры и serverless будут жить рядом. 『В мире нужны и ниндзя, и рыцари, и маги』.」
🐣(学生)「Значит, одна технология всё не решит.」
🧙♂️(博士)「Верно. 『Серебряной пули』 нет. Но в подходящих задачах это очень мощный инструмент.」
🐣(学生)「Кому вы бы советовали?」
🧙♂️(博士)「Вот таким людям:」
Кому подходит serverless
- Нужно быстро выкатить рабочий прототип
- Хорошо понимает тарифы и расчёт расходов
- Предпочитает простоту управления полному контролю
- Радуется новым технологиям
Кому не подходит
- Мастера, которые хотят контролировать всё
- Те, кто плохо управляет бюджетом
- Те, кто ставит стабильность превыше всего
- Те, кто привязан к легаси
🐣(学生)「То есть для 『новаторов-экономистов』.」
🧙♂️(博士)「Отличная формулировка: нужно и инновации любить, и копейку считать.」
Финал: жить по-serverless
🐣(学生)「И всё-таки вы рекомендуете serverless?」
🧙♂️(博士)「Я говорю не ‘берите’, а ‘разберитесь и применяйте осознанно’. Это современное заклинание: взвешиваешь соблазн удобства и риск счетов.」
🐣(学生)「Заклинание… Если прочитать неправильно, ударит по тебе.」
🧙♂️(博士)「Так и есть. Нужно учиться ‘правильному произношению’. Serverless — это 『выиграешь, если думаешь, а расслабишься — взорвёшься』. Силачам не по пути, а умному даёт мощное оружие.」
🐣(学生)「То есть так:
- Классический сервер: ад выносливости для мышц
- Serverless: интеллектуальное выживание в счетах Верно?」
🧙♂️(博士)「Прекрасное резюме. Выбор зависит от ситуации. Но 『ничего не выбирать』 уже нельзя. Современный инженер должен решить, он рыцарь, ниндзя или маг.」
🐣(学生)「Поняла. Сначала база, до ниндзя ещё доберусь.」
🧙♂️(博士)「С таким подходом станешь отличным ‘повелителем ниндзя’. Только со счётом не прозевай.」
🐣(学生)「Есть! Настрою уведомления о расходах!」
📌 Финальная заметка: как принимать решение о serverless
Перед внедрением serverless оцените совокупность факторов:
Технические
- Характер нагрузки (батч против реалтайма)
- Частота вызовов (редко против часто)
- Нужда в хранении состояния
- Интеграция с легаси
Бизнесовые
- Бюджет на старт
- Компетенции операционной команды
- Точность прогнозов роста
- Готовность к vendor lock-in
Вывод: serverless — не универсальная таблетка, а специализированный инструмент, который раскрывается в верном контексте. При понимании и подготовке это мощное оружие; при легкомысленном подходе — дорога к огромным счетам.
Для современного инженера serverless — обязательная опция в арсенале и технология, которую стоит применять там, где она уместна.