Golang-разработчик
Компания cdnnow! разрабатывает и эксплуатирует облачные сервисы: хостинг, CDN и платформу видеотрансляций. Аккредитованная IT-компания с более чем 10-летним опытом на рынке.
Задача первого проекта (следом будут другие) — переработать существующий высоконагруженный сервис: перенести реализацию с Python на Go, сократить потребление памяти и увеличить пропускную способность примерно с 500 до 1000 RPS. Предметную область обсудят на собеседовании.
Описание исходного продукта:
- сервер на Python с внешними запросами по HTTP (JSON, protobuf);
- микросервисная архитектура;
- часть функций реализована на C с подключением к Python собранной библиотеки;
- нагрузка около 500 RPS по основным запросам.
Требования к новой версии продукта:
- отчуждаемость и закрытость кода (cpython или pyinstaller не подходит);
- переход части библиотек (SDK) с C на Rust;
- ограничения по оперативной памяти;
- производительность около 1000 RPS;
- механизмы мониторинга сервиса как при развертывании в инфраструктуре компании, так и в инфраструктуре заказчика.
Примечание: в проекте не планируется использовать Rust, так как у компании нет компетенций в этом языке.
Чем предстоит заниматься (и ожидается, что кандидат это умеет):
- адаптировать процесс разработки под продукт, используемые технологии и команду, предлагать и внедрять улучшения: правила code review, тестирования, CI/CD, релизов, документирования и контроля качества;
- спокойно относиться к конструктивной критике и уметь давать её коллегам;
- работать самостоятельно, но в команде с инженерами другой специализации (разработчики на других языках, DevOps и SRE инженеры);
- выполнять оценку сроков задач и уведомлять, если оценка существенно изменилась;
- проектировать и обосновывать архитектуру продуктов;
- формализовывать и согласовывать требования к задачам и план их реализации;
- разрабатывать сопровождаемый код, пригодный к промышленной эксплуатации, договариваться о code style на проекте;
- проводить и проходить code review;
- писать документацию по проекту и описание коммитов;
- писать автоматизированные тесты и выполнять тестирование (unit, integration и т.д.);
- находить узкие места в CPU, памяти, I/O и сетевом взаимодействии;
- хорошо понимать устройство Linux на уровне, необходимом для разработки и оптимизации высоконагруженных сервисов: процессы и потоки, системные вызовы, память, I/O.