Go backend-разработчик с 2+ годами в продакшене: строю микросервисы и событийно-ориентированные serverless-системы для travel, e-commerce и fleet-management платформ. В UDEVS веду кросс-функциональную команду из 5 человек, которая выпускает два продукта Furasentr.
Веду кросс-функциональную команду из 5 человек (frontend, backend, mobile, QA, PM), которая выпускает два продукта Furasentr — декомпозиция задач, код-ревью и координация релизов на serverless событийно-ориентированном стеке Knative.
Сделал бэкенды для CentralTour, Furasentr и Furasentr Autopark — подробности в разделе «Избранные работы» ниже.
Оптимизировал кэширование в Redis и распараллелил независимые CRUD-запросы, которые раньше шли последовательно; нагрузочные тесты k6 на 700 и 500 RPS на Knative, 90%+ покрытие путей бронирования и оплаты в GitLab CI.
Cody Soft — Golang-разработчик (удалённо)
Сен 2024 — фев 2026
Разрабатывал стартап-продукты на микросервисной и монолитной архитектуре — gRPC между сервисами, REST + Swagger на границе, JWT + Casbin RBAC, PostgreSQL с Redis на горячих путях, медиа в MinIO, миграции goose, Docker Compose.
Единственный бэкендер iMed — онлайн-платформы обучения, уже работающей в продакшене; подробности в разделе «Избранные работы» ниже.
Vector-PVT — Golang-разработчик
Май 2025 — июл 2025
Бэкенд платформы Vector-Taxi для пользовательской, административной и бизнес-панелей — RESTful API со Swagger, Casbin RBAC и большие наборы данных в PostgreSQL и MongoDB.
Отвечал за движок наценок и комиссий. Правила подбираются по семи измерениям — платформа, география, агрегатор, услуга, отель, агентство, профиль агента — и раскладываются по уровням, где на каждом уровне побеждает ровно одно правило, определяемое оценкой специфичности. Платформенные слои применяются параллельно к одной и той же нетто-базе, а партнёрские слои каскадируются, поэтому цена субагента строится поверх наценки агентства и наценка другого агента в неё не попадёт. Тарифы не в UZS сначала считаются в валюте поставщика и пересчитываются по курсу, зафиксированному в момент котировки; каждая котировка сохраняется как снимок цены заказа, поэтому оплата списывает ровно ту сумму, которая была показана. Интегрировал GoGlobal, TBO и Dida и в одиночку сделал бэкенд админ-панели.
Фильтры области добавляются к каждому запросу; на nullable-ключах арендатора они превращаются в (col IS NULL OR col IN (…)).
GochiPostgreSQLRedisKnative / FaaS
Furasentr Autopark
мультиарендный SaaS для управления автопарком
Сделал бэкенд для четырёх ролевых поверхностей приложения — разграничение по компаниям на каждом вызове автопарка, кастомный слой роль × модуль × действие за флагом раскатки, а также назначение рейсов и техники, мультидевайсные сессии, аналитика и геокодер Яндекса. Телеметрия хранит состояние поездки в кэше (trip:point:<id>, TTL 2 ч): последняя точка, пройденное расстояние и открытый кластер остановки; точка старше последней обработанной отклоняется, а расстояние по формуле гаверсинуса от последней точки решает, войдёт ли она в кластер или сбросит его. Проверки доступа кэшируют только разрешение и никогда — блокировку, а пробег diff_km всегда пересчитывается на сервере, а не берётся на веру от клиента. Нагрузочное тестирование — 700 RPS в k6.
Приём телеметрии — час на стоянке это одна строка, а не 180
Контроль доступа — кэшируем разрешение, но не запрет
Кэш списков — инкремент версии вместо угадывания TTL
GochiPostgreSQLRedisKnative / FaaSk6
Furasentr
e-commerce запчастей и грузовой техники
Один из одиннадцати Go-сервисов на стеке Knative — заказы, оплата, логистика, IAM, агрегатор, поиск по изображению, вебхуки, синхронизация с ERP, техника, уведомления. Сделал сервис заказов (генерация PDF-счетов на чистом Go, Click и Payme через JSON-RPC, каталожные изображения WebP / CDN, рассылка через Firebase) и интеграции вокруг него: BuckyDrop для трансграничных закупок, Measoft для доставки — пункты выдачи, калькулятор тарифов, отслеживание статуса — и синхронизацию с OX ERP по товарам, магазинам и складам. Поиск по фото — двухшаговый процесс поверх pgvector: Gemini находит на снимке каждую деталь и возвращает по кропу на каждую, и только тот кроп, по которому нажал покупатель, эмбеддится и ищется, потому что искать сразу все — это работа базы ради деталей, которые никто не откроет. Каталожный эндпоинт, несущий основную нагрузку, читает через 30-секундный in-process кэш под singleflight, поэтому всплеск одинаковых запросов на холодном ключе схлопывается в одну загрузку из базы, а IAM выдаёт ротированный refresh-токен при каждом обновлении. Нагрузочное тестирование k6 на 500 RPS с executor'ом constant arrival rate.
Двухшаговый поиск — платим за тот кроп, который покупатель реально выбрал
Две запасные стратегии — расширить поиск, а не вернуть пустоту
Держим нагрузку — схлопываем чтения, каждое изображение принимаем один раз
Единственный бэкендер веб-админки и мобильных REST API — авторизация по телефонному OTP + JWT с Casbin RBAC, пуши через Firebase, служебный Telegram-бот и конвейер видео YouTube→S3 (yt-dlp с PO-token сайдкаром, снимающим бот-проверку без кук), раздаваемый через CDN. Click Merchant API с идемпотентными обработчиками: подпись MD5 и блокировка строки (SELECT … FOR UPDATE) — поэтому повторные колбэки никогда не списывают дважды и не записывают на курс дважды. Движок промокодов — процент или фиксированная сумма, лимиты на пользователя и общие, окна действия, охват по курсу — обеспечен реестром погашений с частичными уникальными индексами и триггерами освобождения при отмене и истечении. Версионированный кэш Redis: счётчик entity:version , увеличиваемый при каждой записи, вкладывается в ключ кэша, поэтому устаревшие списки истекают по TTL без SCAN / KEYS.