PYTHON

ЭЛЕГАНТНЫЙ. ГИБКИЙ. МОЩНЫЙ.

КАКИМ БУДЕТ
ТОТЕМНОЕ ЖИВОТНОЕ
ВАШЕГО БЭКЕНДА?

Мы создаём надёжные бэкенд-системы: безопасные, масштабируемые и ориентированные на производительность.

RUST

БЕЗОПАСНЫЙ. БЫСТРЫЙ. ПАРАЛЛЕЛЬНЫЙ.

01 Два языка. Не пять.

Один стек, выбранный специально.

Многоязычные агентства звучат отлично в презентациях. На практике это означает три системы сборки, четыре варианта null и кладбище полузаброшенных сервисов. Мы выбрали два языка, которые покрывают 95% реальных рабочих нагрузок — и мы стали очень, очень хороши в обоих.

Горячий путь · системы · безопасность

Rust

9,6 внутренний показатель соответствия

Безопасен для памяти без сборщика мусора. Без гонки за данными на этапе компиляции. Самый строгий рецензент кода, который у вас когда-либо был — и как только он вас пропустит, ваш сервис не разбудит вас в воскресенье.

Когда мы к этому стремимся

  • Платежные системы и все, что касается денег или личной информации
  • Высоконагруженные API-шлюзы с SLA на уровне 99,999%
  • Механизмы сопоставления с низкой задержкой, торговля, работа в реальном времени
  • Модули WebAssembly, отправляемые в браузер
  • CLI-инструменты и демоны, которые должны запускаться за миллисекунды

Компромиссы, которые мы не будем игнорировать

  • Введение в курс дела новых сотрудников: ~2–4 недели до начала продуктивной работы
  • Время компиляции в огромных рабочих пространствах (мы решаем эту проблему с помощью sccache)
  • Экосистема моложе, чем у Java — но зрелая там, где это важно
Связующее звено · данные · машинное обучение · скорость

Python

9,3 оценка внутренней согласованности

Самый быстрый путь от доски к работающей системе. Самая богатая экосистема на Земле для данных, машинного обучения и автоматизации. Современный Python — 3.12, uv, ruff, pydantic, FastAPI — это точный, типизированный и достаточно быстрый язык для большинства ваших задач.

Когда мы стремимся к этому

  • Внутренние инструменты, информационные панели, панели администратора
  • ETL, конвейеры данных, Airflow / Dagster / Prefect
  • ML — обучение, обслуживание, оценка
  • Автоматизация и интеграция с API поставщиков
  • MVP, которые будут выпущены в этом квартале, а не в следующем году

Компромиссы, которые мы не будем игнорировать

  • Пропускная способность на одном ядре в 20–50 раз ниже, чем у Rust
  • Больший объем памяти на запрос — фатально для некоторых рабочих нагрузок
  • Динамическая типизация создает проблемы без строгого mypy / pydantic
Rust, где ошибки обходятся дорого. Python, где медленная доставка обходится дорого. Одна команда. Никаких догм.
02 От → До

Что меняется при миграции.

Выберите исходный язык. Смотрите, как изменится ситуация при переходе на Rust или Python. Цифры — это медианы по нашим последним 40 проектам миграции, а не маркетинговая шелуха.

Rust vs Python vs C / C++

Результаты инженерной работы в реальных условиях в сравнении с выбранным исходным стеком.

Rust Python C / C++ baseline

Сигналы на уровне стека

Качественные инженерные факторы, которые важны помимо цифр производительности.

Серая пунктирная линия отображает выбранный исходный стек. Rust и Python измеряются относительно этой базовой линии, а не друг с другом.

Как мы измеряем эти цифры

Медианы по 40 завершённым миграциям с 2023 по 2026 год. Пропускная способность измеряется на уровне приложения (сквозной p50 под реалистичной нагрузкой, а не микробенчмарки). Память — RSS в установившемся состоянии. Стоимость — ежемесячные вычисления по требованию на AWS/GCP при прочих равных. Результаты отдельных проектов варьируются — по запросу мы публикуем и те, которые не пошли по плану.

03 Цифры без звёздочек

Запросов в секунду под реальной нагрузкой.

Идентичная нагрузка — валидация JSON → запрос к Postgres → рендеринг — измеренная на одной машине AMD Ryzen 7. Это не микробенчмарки. Источник & методология ↓

  1. 1 Rust · Axum
    21,030 req/s
  2. 2 C# .NET · ASP.NET Core
    14,707 req/s
  3. 3 Node.js · Fastify
    9,340 req/s
  4. 4 C++ · Drogon
    7,200 req/s
  5. 5 Go · Gin
    3,546 req/s
  6. 6 Python · FastAPI (Uvicorn)
    1,185 req/s
  7. 7 PHP · Laravel
    299 req/s

Читайте правильно: Python находится почти в самом низу этого графика — и это нормально. Мы не запускаем FastAPI на горячем пути. Мы используем его там, где 1 185 запросов/с — это уже ~10× больше, чем нужно нагрузке, а инженерные часы ценятся дороже циклов процессора. Методология: AMD Ryzen 7, Linux, Docker, один экземпляр, один популярный фреймворк на язык. Цифры — среднее значение по нескольким запускам.

05 Реальная стоимость некорректного кода

Во сколько вам на самом деле обходится сбой.

«Пять девяток» — это не маркетинговый трюк. Ниже приведены расчеты стоимости одного часа незапланированного простоя по отраслям — с указанием источников. Мы создаем Rust там, где существуют эти цифры.

Расходы, накопленные с момента открытия этого раздела
Финансы / здравоохранение $0 ~83 тыс. долл./мин · 5 млн долл./час
Автомобилестроение $0 ~38 тыс. долл. в мин. · 2,3 млн долл. в час
Крупные предприятия 0 23 750 долл. в мин. · 1,4 млн долл. в час
Среднее предприятие 0 ~5 тыс. долл. в минуту · 300 тыс. долл. в час
Финансы и здравоохранение 5 млн долларов и более в час

Отрасли с самыми высокими ставками. Торговые платформы, расчетные системы и клинические системы могут нести убытки, превышающие 5 млн долларов в час во время серьезного сбоя — и это до учета любых затрат, связанных с регулированием или судебными разбирательствами.

Источник: исследование Gartner «Fortune 500» 2024 года; ITIC «Почасовая стоимость простоя» 2024 года.
Автомобилестроение 2,3 млн долларов в час

Остановленная производственная линия обходится примерно в 640 долларов в секунду. Сбой CrowdStrike в июле 2024 года обошёлся только Delta Air Lines в 380 млн долларов за пять дней.

Источник: разбивка по отраслям от Erwood Group за 2025 год; анализ последствий сбоя CrowdStrike от Antithesis.
Крупные предприятия (в среднем) 1,4 млн долларов в час

Данные BigPanda за 2024 год по крупным предприятиям: 23 750 долларов в минуту. ITIC сообщает, что 41 % крупных предприятий теряют от 1 до 5 млн долларов за час простоя.

Источник: исследование BigPanda 2024; 11-й ежегодный отчет ITIC о почасовой стоимости простоев.
Global 2000 (Oxford Economics) 400 млрд долларов в год

Общая скрытая стоимость незапланированных простоев в 2000 крупнейших компаниях мира, согласно исследованию Oxford Economics за 2024 год — в среднем 200 млн долларов ущерба на компанию, если сложить доходы, производительность и затраты на устранение последствий.

Источник: Oxford Economics 2024, «Скрытые затраты, связанные с простоями».
Средние и крупные компании (типичный час) 300 тыс. долларов и более в час

Опрос ITIC 2024 года: более 90% средних и крупных предприятий в настоящее время оценивают один час незапланированных простоев выше этого порога — без учета юридических, гражданских или нормативных штрафов.

Источник: Отчет ITIC 2024 «Почасовая стоимость простоев».
Малые и средние предприятия (МСП) 25–150 тыс. долларов в час

Совместное исследование ITIC / Calyptix 2025 года показывает, что многие МСП теряют столько в час; Siemens сообщает, что убытки МСП, пострадавших от простоев, могут достигать 150 000 долларов в час. Средняя продолжительность простоя составляет 87 минут.

Источник: ITIC + Calyptix 2025; Siemens «Реальная стоимость простоев» 2024.
06 Избранные работы

Три проекта. Три разных пожара.

Анонимизированы там, где того требует соглашение о неразглашении, конкретны там, где того требуют результаты. Это те проекты, на которые мы в первую очередь обратили бы внимание технического заказчика.

  1. Пример 01 Python База данных Криптовалюта GDPR

    Хранилище данных для финтех-компании: в 4 раза меньше, в 5,5 раз быстрее, соответствует международным стандартам.

    У клиента был кластер Postgres объемом 1,8 ТБ, перегруженный устаревшими столбцами, неиспользуемыми индексами и BLOB-объектами с встроенным шифрованием, которые накапливались в течение семи лет. Криптографические функции работали на устаревшей библиотеке, отмеченной в трех отдельных аудитах. Риск нарушения нормативных требований был реальным; аудиторы не отступали.

    Что мы сделали

    • Полный аудит схемы и использования, удаление неиспользуемых столбцов и индексов, внедрение правильного разбиения на сегменты.
    • Перенос криптографического конвейера из устаревшей библиотеки в современный, прошедший аудит стек AEAD с ротацией ключей.
    • Преобразование встроенного шифрования BLOB в шифрование с использованием конвертов по ссылке + выделенный KMS.
    • Приведение процессов хранения данных и доступа субъектов в соответствие с GDPR, CCPA и APPI.
    Результат

    Те же данные, четверть расходов на хранение, в 5,5 раз большая пропускная способность и чистый отчет о состоянии дел для следующего регулятора, который придет с проверкой.

  2. Пример 02 Rust C++ → Rust Безопасность Хранение

    Сервис на C++, переписанный на Rust: более 100 ошибок класса CVE устранены за 9 недель.

    Сервис обработки файлов для пользователей на C++, вылетавший каждые 4–5 дней и каждый раз исправлявшийся на месте. Наш аудит выявил более 100 реальных ошибок: пути отказа в обслуживании , переполнения буфера, неограниченная обработка запросов. Ошибки 503 в часы пик были еженедельным ритуалом. Что касается хранилища, загрузки пользователей превратились в болото дубликатов файлов, поглощающих ресурсы хранилища.

    Что мы сделали

    • Полная переработка на Rust (axum + tokio) со строгой проверкой входных данных и ограниченными ресурсами.
    • Тесты на основе свойств + cargo-fuzz для каждого парсера и границы формата передачи данных.
    • Уровень хранения с адресацией по контенту и дедупликацией при записи.
    • Внедрение по схеме «синий-зеленый» в рамках 4-часового окна интеграции, без простоев.
    Результат

    Сервис превратился из «нестабильного и еженедельно латаемого» в «мы перестали смотреть на пейджер». Затраты на хранение снизились благодаря дедупликации, запросы в службу поддержки по поводу ошибок и кодов 503 иссякли, и переработка окупилась в течение квартала.

  3. Пример 03 Rust Python eBPF / XDP CRM · 4 тыс. пользователей

    Переработанная корпоративная CRM: 18 серверов → 5, сокращение расходов более чем на 60%.

    Внутренняя CRM, обслуживающая более 4000 пользователей в сферах IAM, SOC, централизованного ведения журналов, чата, обмена файлами, VoIP и данных с сквозным шифрованием. Восемнадцать серверов, Cloudflare сверху и счет за облако, который продолжал расти независимо от численности персонала. Мы переписали горячий путь на Rust, оставили Python на уровне интеграции и отчетности, а также разместили фильтр eBPF/XDP непосредственно перед входом.

    Что мы сделали

    • Сервисы на Rust для аутентификации (IAM), обмена сообщениями в реальном времени, VoIP-сигнализации и передачи файлов.
    • Python для интерфейсов администрирования, отчетности, корреляции событий SOC, интеграции с API поставщиков.
    • Фильтрация ботов и злоупотреблений с помощью eBPF/XDP на уровне ядра — заменила Cloudflare для этой рабочей нагрузки.
    • Структурированный конвейер логгирования, переписанный на основе схемы «zero-copy».
    Результат

    На 13 серверов меньше, больше нет отдельной статьи расходов на Cloudflare, команда SOC видит более чистый сигнал через конвейер логгирования, а финансовый директор перестал задавать неудобные вопросы о бюджете на инфраструктуру.

07 Как мы работаем на самом деле

Поворачивайте ручки. Наблюдайте, как меняется план.

В каждом проекте мы балансируем скорость, стоимость и надежность. Приведенная ниже пятиэтапная оценка согласована с медианами отрасли (анализ 2–6 недель, архитектура 1–4 недели, реализация 4–20 недель, укрепление 2–8 недель, передача 1–2 недели — согласно отчетов за 2024–2026 годы от NIX United, Agilie, SOLTECH, OTG Lab). Перемещайте ползунки; план пересчитывается в режиме реального времени.

01

Исследование

3 недели

Прочитайте свой код, опросите своих операторов, составьте список неизвестных факторов, выберите язык для каждого компонента.

  • Интервью с экспертами в данной области и аудит кода
  • Реестр рисков и целевые показатели SLA
  • Выбор языка программирования для каждой службы
02

Архитектура

2 недели

Контракты до кода. OpenAPI / protobuf, модели данных, топология развертывания, шаблоны руководств.

  • Запросы на предоставление информации (RFC) для каждого государственного контракта
  • Модель данных + план миграции
  • Базовый вариант «инфраструктура как код»
03

Внедрение

8 недель

Небольшие PR, зеленый статус CI с первого дня, развертывание при каждом слиянии, проверка вторым старшим специалистом.

  • Rust: axum · tonic · sqlx
  • Python: FastAPI · Pydantic · SQLAlchemy
  • Еженедельные демо + журнал изменений
04

Укрепление

3 недели

Фузинг, тесты на основе свойств, нагрузочные тесты с реалистичным трафиком, модель угроз.

  • cargo-fuzz · proptest · hypothesis
  • k6 нагрузочные тесты, привязанные к SLO
  • Проверка безопасности и аудит зависимостей
05

Передача

1 неделя

Руководства по эксплуатации, ротация дежурств, альтернативные способы разрешения конфликтов (ADR) и команда, которая уже однажды реализовала подобный проект.

  • Руководства по эксплуатации + матрица дежурств
  • Журнал ADR и схемы архитектуры
  • Поддержка в течение 30 дней после запуска
08 Одна и та же проблема, два языка

Как выглядит один и тот же конечный пункт в каждом из них.

Получить пользователя, проверить ввод, сохранить в Postgres, вернуть JSON. Переключайтесь между языками — оба представляют собой реальный код, который мы бы действительно выпустили.

SQL_CREATE_USER = "insert into users(email,name) values(lower($1),$2) returning id,email,name"
Name = Annotated[str, StringConstraints(strip_whitespace=True, min_length=1, max_length=120)]

class UserIn(BaseModel):
    email: EmailStr
    name: Name

class UserOut(UserIn):
    id: int

@router.post("/users", response_model=UserOut, status_code=201)
async def create_user(u: UserIn) -> UserOut:
    try:
        row = await pool.fetchrow(SQL_CREATE_USER, str(u.email), u.name)
   except UniqueViolationError as exc:
        raise HTTPException(status_code=409, detail="email already exists") from exc
    if row is None:
        raise HTTPException(status_code=500, detail="insert failed")
    return UserOut.model_validate(dict(row))
#[derive(Deserialize, Validate)]
#[serde(deny_unknown_fields)]
pub struct UserIn {
    #[validate(email)]
    pub email: String,
    #[validate(custom(function = "valid_name"))]
    pub name: String,
}

pub async fn create_user(
    State(pool): State<PgPool>,
    ValidatedJson(u): ValidatedJson<UserIn>,
) -> Result<(StatusCode, Json<UserOut>), ApiError> {
   let user = sqlx::query_as!(UserOut,
        "insert into users(email,name) values(lower($1),$2) returning id,email,name",
        u.email.as_str(),
        u.name.trim(),
    )
    .fetch_one(&pool)
    .await
    .map_err(ApiError::from_db)?;

    Ok((StatusCode::CREATED, Json(user)))
}
Количество строк кода
16 22
Пропускная способность
1 185 запросов/с 21 030 запросов/с
Задержка p50
21,0 мс 1,6 мс
Объем ОЗУ в режиме ожидания
41,2 МБ 8,5 МБ
Мы отвечаем в течение 1 рабочего дня. Без шуток.

Вы прочитали всю страницу.
Давайте создадим это.

Расскажите, что не устраивает вас в вашем стеке или что вы хотите создать с нуля. Вы получите мнение настоящего инженера — а не презентацию отдела продаж.

  • Никаких младших инженеров. Никакого аутсорсинга.
  • Варианты с фиксированной ценой на ограниченные по объему работы.
  • Подписываем соглашение о неразглашении, прежде чем что-либо у вас спрашивать.