Наша компания разрабатывает и эксплуатирует облачные сервисы: хостинг, CDN и платформу видеотрансляций.
Мы — аккредитованная IT-компания с более чем 10-летним опытом на рынке.
Задача первого проекта (следом будут другие) — переработать существующий высоконагруженный сервис: перенести реализацию с Python на Go, сократить потребление памяти и увеличить пропускную способность примерно с 500 до 1000 RPS. Предметную область - обсудим на собеседовании.
Описание исходного продукта:
- сервер на python с внешними запросами по http (json, protobuf);
- имеет микросервисную архитектуру;
- часть функций реализованы на C с подключением к python собранной библиотеки;
- нагрузка - около 500 rps по основным запросам.
Требования к новой версии продукта:
- отчуждаемость и закрытость кода (поэтому cpython или pyinstaller не подходит);
- переход части библиотек (SDK) с C на Rust;
- появляются ограничения по оперативной памяти;
- требуется обеспечить производительность около 1000 rps;
- требуется реализовать механизмы мониторинга сервиса как при развертывании в нашей инфраструктуре, так и в инфраструктуре заказчика.
P.S.: Мы не хотим использовать в этом проекте Rust, поскольку у нас нет компетенций в данном языке.
Чем предстоит заниматься (и мы ожидаем, что вы это умеете):
- адаптировать процесс разработки под продукт, используемые технологии и команду, предлагать и внедрять улучшения в процесс разработки: правила code review, тестирования, CI/CD, релизов, документирования и контроля качества;
- спокойно относиться к конструктивной критике и уметь давать её коллегам;
- работать самостоятельно, но в команде с инженерами другой специализации (разработчики на других языках, DevOps и SRE инженеров)
- выполнять оценку сроков задач и уведомлять, если оценка существенно изменилась;
- проектировать и обосновывать архитектуру продуктов;
- формализовывать и согласовывать требования к задачам и план их реализации;
- разрабатывать сопровождаемый код, пригодный к промышленной эксплуатации, договариваться о code style на проекте;
- проводить и проходить code review;
- писать документацию по проекту и описание комитов;
- писать автоматизированные тесты и выполнять тестирование (unit, integration и т.д.);
- находить узкие места в CPU, памяти, I/O и сетевом взаимодействии;
- хорошо понимать устройство Linux на уровне, необходимом для разработки и оптимизации высоконагруженных сервисов: процессы и потоки, системные вызовы, память, I/O, сеть, файловые дескрипторы;
- проводить профилирование и нагрузочное тестирование;
- оптимизировать конкурентный код;
- проектировать эффективные структуры данных и алгоритмы;
- контролировать аллокации и потребление памяти;
- работать с GC и понимать его влияние на latency;
- интегрировать C/Rust SDK с Go; глубокое знание С / Rust не требуется, но потребуется уметь читать чужой код и документацию;
- при необходимости использовать lock-free / wait-free подходы и атомарные операции;
- читать код на python, C, Rust и, желательно, PHP;
- использовать линтеры и другие инструменты контроля качества кода;
- работать с sql базами данных с использованием транзакций;
- работать с внешними брокерами очередей, кэшами и т.п.;
- собирать docker контейнеры для улучшения процесса разработки;
- писать make и bash скрипты;
- использовать AI-инструменты в разработке для повышения продуктивности — при этом самостоятельно проверять сгенерированный код, тесты и технические решения и нести ответственность за результат (AI-assisted development);
- читать документацию на английском языке.
Условия:
- оформление и социальные гарантии согласно ТК РФ;
- свободный график;
- работа удалённо или в комфортном офисе возле метро "Петроградская".