Как запустить студию разработки, пообещать клиенту космолет и случайно превратить FastAPI в калькулятор))
Привет, vc.ru. Мне 19 лет, я учусь на ИТ-специальности, и пока мои одногруппники полируют резюме для стажировок за еду, мы с друзьями развиваем свой проект
Сразу дисклеймер: тут не будет историй про «успешный успех», офис в Сити и миллиарды к двадцати годам. Мы обычные пахари, у которых из активов — стек FastAPI + React, амбиции и стабильно дергающийся правый глаз.
Ниже — честная история о том, почему мы не собираем сайты на конструкторах и как мы умудрились намертво повесить сервер одной-единственной кнопкой.
Почему именно FastAPI + React, а не Tilda?
Когда мы приходим к серьезному дяде-заказчику, первый вопрос всегда один: «Парни, вы молодые, симпатичные, соберите мне сайт на WordPress за три дня, зачем переплачивать за ваш кастом?»
Мы вежливо отказываемся. Не потому, что гордые, а потому, что наш профиль — сложные сервисы, CRM и автоматизация. Конструкторы хороши, пока тебе нужен просто красивый лендинг для продажи мыла ручной работы. Но когда начинается уникальная бизнес-логика, базы данных и куча интеграций — коробки начинают плавиться.
Поэтому мы выбрали взрослый стек:
- FastAPI (Python) на бэкенде — потому что он асинхронный, дико быстрый и современный.
- React на фронтенде — чтобы интерфейс летал без перезагрузок страниц, а не напоминал сайты госуслуг из начала двухтысячных.
План был надежный, как швейцарские часы. Мы чувствовали себя гениями разработки, пока не дошли до фичи Live-Sync — синхронизации данных нашего сервиса с внешней учетной системой клиента.
Великий висяк, или Как мы убили Event Loop
Локально у нас всё работало за миллисекунды. Мы уже мысленно выбирали цвет для будущей Ламборгини, как вдруг залили синхронизацию на прод.
Суть фичи: менеджер нажимает кнопку, сервер лезет во внешнюю систему, стягивает тонну данных, сверяет транзакции, обновляет остатки. Тяжелый, долгий, абсолютно синхронный процесс.
И тут мы совершили главную глупость в асинхронном программировании. Мы объявили функцию как асинхронную, но внутрь запихнули этот самый тяжелый расчет.
Что это значит на человеческом языке? Представьте себе фастфуд. Стоит очередь. Вы подходите к кассе и просите не просто бургер, а эксклюзивный торт, который нужно выпекать 20 минут. Кассир вместо того, чтобы передать заказ на кухню и обслуживать следующего клиента, сам уходит печь торт. А вся очередь сзади просто стоит и ждет. 20 минут.
Что произошло на проде?
Менеджер клиента нажимает заветную кнопку. Наш асинхронный и сверхбыстрый сервер берет задачу и... намертво засыпает на 20 секунд. В этот же момент еще десять пользователей пытаются зайти в личный кабинет, посмотреть отчеты или просто обновить страницу.
И что они видят? Ничего. Сайт умер для всех. Браузер крутит колесико, запросы отваливаются по таймауту, а клиент начинает яростно бомбить нас в Telegram. Топовый фреймворк легким движением руки превратился в калькулятор «Электроника».
Как лечили?
Сначала была паника, проверка серверов и подозрения, что асинхронность — это обман. Потом мы выдохнули, открыли документацию и переписали всё на фоновые задачи.
Теперь это работает правильно: менеджер нажимает кнопку, сервер мгновенно выдает фронтенду ответ: «Принято, работаем,браток» , а сам тяжелый процесс уходит крутиться отдельно, в своем пуле потоков, никому не мешая.
Мораль
Совмещать сессию в универе и управление студией — специфическое удовольствие. Но зато на парах по программированию нам иногда рассказывают вещи, которые мы уже месяц назад внедрили в реальный продакшн и успели на них жестко обжечься.
Мы поняли главное: модные технологии не работают сами по себе, если ты не понимаешь, как они устроены под капотом. Мы свои шишки набили, сервер подняли и теперь пишем код аккуратнее.