Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме ActixВсе вопросы
ActixSeniorОпыт

Представьте, endpoint на Actix (Rust) иногда отвечает за секунды вместо миллисекунд. Как вы будете искать причину?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Spike latency в Actix-web: (1) блокирующий код в async handler — исправить через web::block; (2) исчерпание connection pool — добавить acquire_timeout и метрики; (3) tail latency внешних сервисов — явный timeout в reqwest. Воспроизводить через wrk/k6 под нагрузкой.

Шаг 1 — Измерить, не гадать

Добавьте per-handler гистограмму латентности с actix-web-prom и структурированное логирование с tracing-actix-web. Без этого вы не знаете, в каком хэндлере проблема и на какой процентиль (p95/p99) она проявляется.

use tracing_actix_web::TracingLogger;
use actix_web_prom::PrometheusMetricsBuilder;

let metrics = PrometheusMetricsBuilder::new("svc")
    .endpoint("/metrics")
    .build().unwrap();

App::new()
    .wrap(metrics)
    .wrap(TracingLogger::default())
    .route("/api/orders", web::get().to(get_orders))

Классификация intermittent latency

«Иногда секунды вместо миллисекунд» — паттерн, характерный для нескольких классов проблем: resource exhaustion (пул соединений, файловые дескрипторы), блокирующий код в async runtime, GC-подобные паузы (в Rust — аллокатор при большой фрагментации), cold start эффекты или внешние зависимости с высоким tail latency.

Шаг 2 — Проверить блокирующий код

Самая частая причина spike latency в Actix: синхронный blocking call в async handler. Tokio runtime имеет ограниченный пул потоков — один блокирующий вызов голодает остальные задачи.

// ПЛОХО: блокирует Tokio worker thread
async fn handler() -> impl Responder {
    let data = std::fs::read_to_string("/large/file").unwrap(); // блокирует!
    HttpResponse::Ok().body(data)
}

// ХОРОШО: offload в blocking thread pool
async fn handler() -> actix_web::Result<impl Responder> {
    let data = web::block(|| {
        std::fs::read_to_string("/large/file")
    }).await??;
    Ok(HttpResponse::Ok().body(data))
}

Шаг 3 — Connection pool exhaustion

При резком росте трафика пул соединений к БД исчерпывается — запросы ждут освобождения. Диагностика: метрика sqlx_pool_idle_connections или явный лог acquire timeout.

let pool = PgPoolOptions::new()
    .max_connections(20)
    .min_connections(2)
    .acquire_timeout(Duration::from_secs(5))  // явный timeout вместо бесконечного ожидания
    .idle_timeout(Duration::from_secs(600))
    .connect(&url).await?;

Шаг 4 — Внешние HTTP-сервисы

Если handler обращается к внешнему API через reqwest, проблема может быть там. Добавьте явный timeout на каждый исходящий запрос и трассировку через tracing:

let client = reqwest::Client::builder()
    .timeout(Duration::from_secs(2))
    .connect_timeout(Duration::from_secs(1))
    .build()?;

Шаг 5 — Нагрузочный тест для воспроизведения

Intermittent спайки часто не воспроизводятся при единичных запросах. Используйте wrk или k6 для имитации concurrent нагрузки:

wrk -t4 -c100 -d30s http://localhost:8080/api/orders
# смотрим Latency Distribution: если p99 >> p50 — есть tail latency проблема

Подводные камни

  • Actix-web по умолчанию не устанавливает таймаут на чтение тела запроса — медленный клиент держит соединение и worker занятым.
  • Tokio runtime по умолчанию использует числo CPU-ядер для async threads и отдельный пул для spawn_blocking — если web::block-задач слишком много, они тоже очередятся.
  • Аллокатор по умолчанию (system allocator) медленнее jemalloc при фрагментации — для high-throughput сервисов подключают jemallocator.
  • Keep-alive соединения от nginx/load balancer могут накапливаться — настройте HttpServer::keep_alive и client_disconnect_timeout.
  • Логирование само может стать бутылочным горлышком при синхронном appender — используйте tracing-subscriber с non-blocking writer.
  • Spike латентности только на первых запросах после деплоя — cold start: JIT-эффекты отсутствуют, но Linux page cache и TLS handshake вносят вклад.
  • Размер стека Tokio task по умолчанию 2 MB — при глубокой рекурсии или большом async state machine возможен stack overflow, проявляющийся как редкий crash.

Частые вопросы на собеседовании

  • В каких backend-проектах Actix (Rust) является сильным выбором, а где лучше выбрать более простой или другой стек?
  • Проект на Actix (Rust) вырос из MVP в большой production-сервис. Какие проблемы архитектуры и сопровождения вы ожидаете увидеть?
  • Как реализовать graceful shutdown в Actix-web?
  • Какие production-риски есть у Actix (Rust): blocking code, connection pooling, config, auth, observability, deploy или graceful shutdown?

Что портит ответ

  • Сразу обвинять Actix (Rust), не проверив соседние слои системы
  • Чинить симптом без минимального воспроизведения и evidence
  • Не учитывать версии, конфигурацию, окружение и recent changes

Что слушает интервьюер

  • Умеет локализовать проблему вокруг Actix (Rust)
  • Двигается от симптома к гипотезам и проверкам
  • Отличает баг инструмента от ошибки использования или окружения

Как вы знаете этот вопрос?

Проверить себя по теме Actix →
←Предыдущий вопросВ каких backend-проектах Actix (Rust) является сильным выбором, а где лучше выбрать более простой или другой стек?Следующий вопрос→Проект на Actix (Rust) вырос из MVP в большой production-сервис. Какие проблемы архитектуры и сопровождения вы ожидаете увидеть?

Связанные темы

ActixActix (Rust)Debuggingtechnical-communicationtechnology-selectiontrade-off-analysis