Какой язык программирования используется для пайплайнов и микросервисов
Что проверяют
Понимаете ли вы, какой язык за какую часть ML-инфраструктуры отвечает, и можете ли обосновать выбор, а не просто перечислить популярное. Следом обычно спрашивают, как вы решали проблемы производительности Python в сервисе.
Как отвечать
Короткий честный ответ: основной язык Python плюс SQL, а JVM и Go появляются там, где на это есть причина. Дальше по зонам:
- оркестрация: Airflow, Dagster, Prefect описывают пайплайны на Python, поэтому DAG почти всегда пишется на нём;
- трансформации: большая часть логики живёт в SQL внутри хранилища или в dbt. Для больших объёмов PySpark, для средних pandas или Polars;
- обучение и инференс: PyTorch, scikit-learn, CatBoost доступны прежде всего из Python. Сервис модели обычно пишут на FastAPI или берут готовый сервер вроде Triton;
- стриминг: Spark, Flink и Kafka Streams родом из JVM, поэтому потоковую обработку с жёсткими требованиями к задержке нередко пишут на Java или Scala;
- Go: нагруженные сервисы вокруг модели, шлюзы, операторы Kubernetes. Для самого ML экосистема у него бедная.
Хорошо показать, как вы обходите слабые места Python. Тяжёлые вычисления и так идут в скомпилированном коде внутри NumPy или PyTorch, а сервис упирается в ввод-вывод и GPU. Помогают асинхронность, батчинг запросов к модели, экспорт в ONNX, несколько процессов-воркеров вместо потоков из-за GIL. В свежих версиях CPython есть сборка без GIL, но по умолчанию она не используется и поддерживается не всеми библиотеками.
Если вопрос про ваш опыт, назовите реальный стек проекта, объёмы данных и одно решение, которое принимали сами.
Где спотыкаются
Говорят «Python медленный, сервисы надо писать на Java». Узкое место ML-сервиса почти никогда не цикл на Python, а модель, сеть и сериализация.
Забывают про SQL. Кандидат, который тянет миллионы строк в pandas, хотя агрегацию можно выполнить в хранилище, выглядит слабее того, кто сразу назвал dbt.
Путают оркестратор с обработчиком: гоняют объёмные данные через воркер Airflow вместо того, чтобы запустить задачу в Spark или хранилище и передавать между шагами только ссылки на результат.