Не упустите лучшие вакансии!
Подключите наш Telegram-бот и получайте мгновенные уведомления о новых предложениях из 10+ источников. Будьте первым, кто откликнется!
Подключить ботаРазработчик на C++ в группу обработки и хранения ассортимента Маркета
Наша группа занимается обработкой и хранением ассортимента. Продавцы загружают товары разными способами: через API, вручную через карточку товара в личном кабинете и Excel-файлами. Мы принимаем все эти потоки, храним товарные предложения и отдаём данные о них в личный кабинет продавца — почти на каждую его страницу. Сейчас в системе больше 2 миллиардов товарных предложений.
Задачи у нас двух видов, и обычно один человек занимается и теми, и другими. Продуктовые — это всё, что видит продавец: каталог товаров, загрузка и выгрузка Excel-файлов, действия над товарами. Инфраструктурные — хранение оферов, полнотекстовый поиск, перевод сервисов на общую платформу исполнения запросов и вынос состояния в отдельное хранилище.
Какие задачи вас ждут
Каталог товаров в кабинете продавцаКаталог — основной инструмент продавца для работы с ассортиментом. Товары попадают в него разными путями: через API, из Excel-файла или через карточку товара в кабинете. В каталоге их можно смотреть, фильтровать и выполнять массовые действия, например удалять или архивировать.
Вы будете развивать бэкенд каталога: добавлять новые фильтры и действия, следить за тем, чтобы выборка по миллионам товаров одного продавца оставалась быстрой, и договариваться о контрактах с фронтендом кабинета.
Хранение и поиск более 2 миллиардов товарных предложений
Мы храним оферы в динамических таблицах распределённой платформы данных YT, а полнотекстовый поиск по ним реализуем на отдельном поисковом сервисе. При таких объёмах привычные решения перестают работать, и почти каждая задача превращается в вопрос про схему данных, шардирование и стоимость запроса.
Данные в системе не лежат мёртвым грузом: мы принимаем поток обновлений оферов, и здесь счёт идёт уже на сотни тысяч запросов в секунду. То есть у нас две очень разные нагрузки — чтение из кабинета продавца и поток обновлений на запись. Схема хранения должна выдерживать обе нагрузки. Вы будете развивать схему хранения, ускорять чтение и запись, улучшать качество и скорость поиска по ассортименту.
Генерация и обработка Excel-файлов с товарами
Для многих продавцов Excel — основной способ работы с ассортиментом: они скачивают шаблон,
заполняют его и загружают обратно. В одном файле может быть до миллиона товаров, поэтому
задача не сводится к тому, чтобы «прочитать таблицу»: нужно уметь обрабатывать такие объёмы, не съедая всю память, валидировать данные и понятно сообщать продавцу, что именно он заполнил не так.
Вы будете развивать генерацию шаблонов и разбор загруженных файлов: добавлять новые колонки и правила валидации, поддерживать подсказки и выпадающие списки прямо в таблице, ускорять обработку больших файлов.
Передача данных о товарных предложениях в личный кабинет
Данные об оферах нужны почти на каждой странице кабинета продавца, поэтому наш сервис — один из самых нагруженных в Маркете. Сейчас это от 60 до 500 запросов в секунду, и каждый из них влияет на то, как быстро откроется страница у продавца.
Вы будете заниматься этим сервисом: расширять API под новые сценарии кабинета, держать латентность в рамках, разбираться с нагрузкой и кешированием.
Переход на общую платформу исполнения запросов и stateless-архитектуру
Мы переводим сервисы на внутреннюю платформу оркестрации запросов. Вместо того чтобы каждый сервис сам ходил по соседям, обход описывается декларативным графом: платформа сама делает сетевые запросы, распараллеливает независимые вызовы, занимается балансировкой и service discovery, даёт единообразные логи, трейсы и мониторинги. Сервисы при этом упрощаются — в них остаётся бизнес-логика, а данные приходят на вход.
Параллельно мы выносим состояние в отдельное хранилище с реляционной моделью поверх YT, чтобы все сервисы, кроме самого хранилища, стали stateless. Это большая архитектурная работа на живой системе под нагрузкой, и её нельзя делать с остановкой сервиса — только постепенно и незаметно для продавцов.
Больше о бэкенде в Яндексе — в канале Yandex for Backend
Мы ждем, что вы
- Уверенно пишете на C++ и знаете современный стандарт (C++ 20/23)
- Читаете и пишете код на Python — на нём у нас скрипты и часть тестов
- Понимаете, как работают многопоточность и асинхронный код
- Представляете, как устроен серверный сервис: HTTP или gRPC, таймауты, ретраи, метрики
- Работали с любой базой данных и понимаете, как схема данных влияет на скорость запросов
- Умеете декомпозировать задачу и доводить её до продакшена, а не до стадии «работает у меня локально»
- Внимательны к деталям и тестируете свой код
- Готовы работать в Москве в офисе или в гибридном формате
Будет плюсом, если вы
- Работали с распределёнными системами или MapReduce-платформами
- Разрабатывали высоконагруженные сервисы и занимались их производительностью
- Работали с gRPC и Protobuf
- Разбирали или генерировали Excel-файлы и знаете, что такое OOXML
- Работали в e-commerce и понимаете, как устроен ассортимент маркетплейса
- Имеете опыт работы с полнотекстовым поиском
О команде
Как мы пишем и релизим кодПроцесс код-ревью у нас простой: чтобы влить изменения, достаточно одобрения одного коллеги. К мелочам не придираемся — скорость доставки фич до продавцов для нас важнее споров о форматировании.
У нас больше 20 сервисов, и на каждом настроен автоматический релиз: прогон тестов, выкладка в тестинг, престейбл и продакшен — с проверкой мониторингов между этапами. Катать релизы руками не нужно.
Ваше резюме увидят первым!
Автоматическое поднятие на HeadHunter каждые 4 часа. Увеличьте свои шансы на успех в 10 раз!
Подключить автоподнятие