Услуги / Backend
Backend-разработка сложных систем
Closeflow берёт на себя серверные системы, где важны корректность состояния, интеграции с внешними сервисами и поведение при сбоях: платёжные контуры, очереди и фоновая обработка, API для веб- и мобильных продуктов, внутренние платформы. Отвечаем за архитектуру, реализацию и передачу в эксплуатацию.
02Что строим
Что мы разрабатываем
Типичные задачи — там, где у серверной части есть состояние, деньги или зависимость от чужих систем.
API и серверная часть продуктов
REST и WebSocket для веб- и мобильных приложений: авторизация, права доступа, мультитенантность, версионирование контрактов.
Внутренние платформы
Админ-панели, отчётность, операционные инструменты. Всё, что команда использует каждый день и что не должно ломаться молча.
Интеграционные сервисы
Подключение к системам бронирования, эквайрингу, мессенджерам, картографическим и LLM-провайдерам с учётом их лимитов, ошибок и нестабильности.
Платёжные подсистемы и биллинг
Приём платежей, учёт балансов, возвраты, сверка с провайдерами. Деньги нельзя терять и нельзя списывать дважды.
Фоновая обработка и очереди
Воркеры с повторами и backoff, расписания, долгие операции, доставка вебхуков с подтверждением.
Системы со сложными переходами состояний
Заказы, платежи, бронирования, согласования: явная модель состояний вместо набора флагов и условий.
03Где сложность
Где на самом деле возникает сложность
Обычно это не сами эндпоинты, а то, что происходит между ними.
Согласованность состояния
Две операции, которые должны произойти вместе, рано или поздно разойдутся, если граница транзакции проведена не там.
Идемпотентность и повторы
Клиент повторяет запрос, брокер доставляет сообщение дважды, воркер падает на полпути. Побочный эффект при этом должен случиться один раз.
Гонки и конкурентный доступ
Два запроса на один баланс или один слот. Защита нужна на уровне базы, а не «в коде на всякий случай».
Отказы внешних зависимостей
Провайдер отвечает медленно или с ошибкой. Нужны таймауты, повторы, деградация и понятное состояние системы, пока зависимость недоступна.
Эволюция схемы и миграции
Схему данных приходится менять на живой системе. Миграции должны быть версионированными, обратимыми по смыслу и безопасными для работающего кода.
Сверка данных
Своя система и внешний провайдер иногда расходятся во мнениях о платеже или заказе. Расхождения нужно находить по расписанию, а не по жалобе пользователя.
Аутентификация, права и лимиты
Кто что может делать, как ограничить злоупотребление, как не отдать данные одного клиента другому.
Контракты интеграций
Чужой API меняется без предупреждения. Адаптер с явным контрактом и проверками изолирует эти изменения от остальной системы.
Наблюдаемость
Без метрик, логов и трассировки отказ в очереди или у провайдера обнаруживается слишком поздно и разбирается наугад.
04Паттерны
Как проходит надёжная операция
Схема ниже — обобщённый путь запроса, который меняет состояние и обращается к внешнему сервису. Тот же каркас мы применяли в платёжных и интеграционных проектах.
Transactional outbox: изменение состояния и событие о нём пишутся одной транзакцией в PostgreSQL. Отдельный процесс доставляет событие дальше. Так нет ситуации, когда запись сохранена, а сообщение потеряно, или наоборот.
Ключи идемпотентности: повторный запрос с тем же ключом возвращает прежний результат, а параллельный дубль не создаёт вторую запись. Тогда доставка «как минимум один раз» даёт бизнес-эффект «ровно один раз».
Сверка: независимо от обработки в потоке, периодическая задача сравнивает данные системы с данными провайдера и поднимает расхождения. Это страховка от всего, что не предусмотрели.
Бухгалтерский журнал: в проекте независимого платёжного шлюза баланс опирается на двойную запись в ledger, а неизменяемость записей обеспечена триггерами на уровне базы данных (append-only). Возвраты в этой схеме работают по принципу fail-closed: при сомнении операция отклоняется, а не выполняется.
05Стек
Языки и инструменты
Для новых систем основной язык — Go. Остальные технологии используем там, где они уже стоят в системе или у команды.
Основной язык
Новые сервисы, платёжные и AI-платформы.
Python
Существующие продукты и небольшие сервисы.
Java
Node.js
Шлюзы и внутренние инструменты.
Данные
Эксплуатация
06С чего начинаем
Как мы начинаем работу
Границы и сценарии отказов
Выясняем, что система обязана гарантировать и что должно происходить, когда зависимость недоступна, а запрос пришёл дважды.
Контракты и модель состояний
Фиксируем схему данных, переходы состояний и интерфейсы с внешними системами до начала массового кода.
Сквозной срез
Собираем один работающий путь через всю систему: API, база, очередь, интеграция, деплой.
Обработка сбоев и наблюдаемость
Добавляем повторы, сверку, метрики и алерты, проверяем поведение при отказах.
Передача
Документация, развёртывание и понятное владение системой, чтобы она не зависела от автора.
07Когда подходит
Когда стоит обращаться
Существующий backend нужно перестроить
Логика размазана по обработчикам, состояние рассинхронизируется, изменения становятся рискованными.
В продуктовой команде не хватает серверной экспертизы
Нужен инженер, который возьмёт на себя серверную часть или усилит команду на несколько месяцев.
В планах много интеграций
Каждая новая внешняя система приносит свои ошибки, лимиты и форматы.
Критична корректность денег и состояния
Платежи, балансы, заказы, где ошибка превращается в прямой ущерб.
Подсистему можно сдать отдельно
Платёжный модуль, интеграционный слой или фоновая обработка с чёткими границами.
AI-продукту нужна надёжная серверная основа
Лимиты, биллинг, очереди и наблюдаемость вокруг вызовов моделей.
Есть серверная задача?
Опишите систему, ограничения и то, что сейчас болит. Ответим по существу и скажем, берёмся ли.
Обсудить backend-задачу09Контакт
Расскажите, что
должно работать.
Опишите задачу, текущую систему и ограничения. Если проект подходит по профилю — предложим следующий шаг: обычно это короткий созвон с вопросами о данных, интеграциях и сроках.
- Telegram@missuk2003
- Emailceo@closeflow.ru
- GitHubHusqvarnalox