Yandex for Backend – Telegram
Yandex for Backend
8.69K subscribers
631 photos
46 videos
3 files
309 links
Канал для бэкендеров от Яндекса. Рассказываем про события по Python, Go, Java и C++ и не только, делимся экспертизой, обсуждаем технологии и поддерживаем бэкенд-комьюнити.

Другие каналы Яндекса по стекам разработки: https://news.1rj.ru/str/addlist/Hrq31w2p1vUyOGZi
Download Telegram
🐍 Как мы провели первый Pytup в Белграде

На прошлой неделе мы собрали в зале 120 питонистов! Обсудили с ними главные технические изменения в Python за год и разобрались, что происходит с культурой и экспертизой в сообществе. Поговорили про 3.14, PEP’ы и Rust в CPython, а ещё поделились прогнозами.

Благодарим экспертов:

🟢 Станислава Змиева, Head of Engineering в Sema, автора популярного фреймворка Cadwyn

🟢 Александра Шадчина, ведущего разработчика Яндекс Sandbox, активного контрибьютора Python

🟢 Никиту Бесшапошникова, независимого эксперта, разработчика Python-фреймворка для 400+ сервисов Яндекса

🟢 Александра Зверянского, MLE в Martian и соорганизатора Python Belgrade

А ещё спасибо всем, кто был с нами офлайн и онлайн, участвовал в дискуссии и задавал вопросы!

💻 Смотрите запись митапа на ютубе и в VK Видео

📷 Ищите себя на фотографиях

Подписывайтесь:
💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥3🤔2👍1🌚1
🧬 Temporal: серебряная пуля распределённой бизнес-логики

Долгий процесс со множеством состояний, таймеров и внешних событий создаёт много сложностей при разработке. Раньше для такой системы нужны были не просто танцы с бубном, а целый концерт: стейт‑машина с полудюжиной состояний, очереди и воркеры, обработчики на каждое событие и блокировки от race conditions.

С этой проблемой мы столкнулись и в процессинге Яндекс Еды. Жизненный цикл заказа от оплаты до доставки — яркий пример такой распределённой логики. Но в итоге решение мы нашли. И весьма элегантное.

🖍 Мы переписали код с помощью Temporal:


e, err := w.prepareExecutor(ctx, req)
if err != nil {
return nil, err
}

if err := e.CreateAndPay(); err != nil {
return e.HandleResult(err)
}

if err := e.InitializeNativeDelivery(); err != nil {
return e.HandleResult(err)
}

if err := e.WaitForOrderConfirmation(); err != nil {
return e.HandleResult(err)
}

if err := e.WaitDelivery(); err != nil {
return e.HandleResult(err)
}

return e.HandleResult(nil)


Теперь это выглядит как одна линейная функция-воркфлоу. Она читается как описание бизнес-логики, но при этом гарантированно выполняется от начала до конца. А ещё она переживает падения сервисов и временные сбои зависимостей.

🔶 Читайте на Хабре, почему мы выбрали Temporal как основу обновлённого процессинга, в чём его сильные стороны и как изменилась наша жизнь после перехода на новые рельсы.

А ещё в статье мы разбираем:

🟢 Чем приходится платить за инструментарий Temporal

🟢 Какие возможности он даёт и кому пригодится

🟢 Как обстоят дела с observability (спойлер: заметно лучше, чем без Temporal)

Подписывайтесь:
💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
9🥴4🙈4💊1
🟢 Харденинг: спасти буфер от переполнения и сохранить доступ

Есть способы защиты, которые можно использовать в продуктовом коде уже после релиза. Это харденинг — система, которая позволяет находить и предотвращать различные ошибки и уязвимости. Например, выходы за границу буфера, обращения по невалидному адресу, переполнения целочисленной переменной и так далее.

Для C/C++ это особенно актуально. Так, 70% уязвимостей в Microsoft и критических багов в Chromium — ошибки памяти, а из них 70% — это 0-day. Некоторые госучреждения и вовсе рекомендуют избегать C++ в пользу более безопасных языков.

👩‍⚕️ Этой теме посвятили доклад Роман Русяев и Юрий Грибов на C++ Zero Cost Conf. О главных уязвимостях, которые выделили ребята, мы рассказали в тексте ниже, а ключевые инструменты харденинга показываем в карточках.

♋️ Уязвимость 1. Stack Smashing

С этой атаки началась практическая эксплуатация уязвимостей памяти. Злодей переполняет буфер, перезаписывает локальные переменные и адрес возврата. После этого он кладёт на стек вредоносный код и изменяет адрес возврата так, чтобы процессор начал выполнять его после выхода из функции. Это часто приводит к получению полного контроля над системой.

♋️ Уязвимость 2. Return-to-libc

В этой атаке вместо размещения своего кода злоумышленник перезаписывает адрес возврата на стандартную библиотечную функцию, которая уже присутствует в памяти. На 32-битных системах аргументы для неё также передаются через стек, поэтому хакер может заставить программу выполнить команду в обход запрета на выполнение кода в стеке.

♋️ Уязвимость 3. Return-oriented Programming

Атакующий находит короткие последовательности инструкций, которые заканчиваются командой возврата ret. Путём переполнения буфера на стеке создаётся целая цепочка таких адресов, после чего начинаются прыжки туда-сюда. В результате хакер получает доступ к шеллу.

♋️ Уязвимость 4. Атаки на кучу

Эта угроза связана с переполнением буфера, расположенного не на стеке, а в динамической памяти — куче. Это позволяет перезаписать данные соседнего буфера и контролировать критичные для программы переменные. А ещё так можно испортить метаданные аллокатора.

💹 Примеры и подробности — в полной записи выступления. Смотрите по ссылкам на ютубе или в VK Видео. В докладе много линков на полезные материалы и фичи, которыми можно пользоваться уже сейчас.

А весь плейлист целиком с другими докладами C++ Zero Cost Conf 2025 найти можно тут:

VK Видео
Ютуб

Подписывайтесь:
💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Как мы экономим сотни тысяч CPU-ядер в Рекламе

Рекомендательный движок Яндекса обрабатывает свыше миллиона запросов в секунду. В наших масштабах даже 1% экономии в конкретном сервисе превращается в тысячи процессорных ядер. А за последние три года мы ежегодно высвобождали аж по 200 000 единиц.

На связи Антон Полднев, руководитель инфраструктуры Яндекс Рекламы. Сегодня я расскажу, как нам удалось добиться этого результата и какие решения лежат под капотом нашего движка рекомендаций.

5–6 лет назад наша система была единым монолитом с шардированием по данным. При пиковой нагрузке мы могли только отключать шарды, а это вело к финансовым потерям. Мы оптимизировали код по флеймграфам и внедряли простые ML-модели, чтобы отсекать кандидатов, но достигли локального оптимума. В итоге негибкая архитектура не выдерживала нагрузки.

Тогда мы сформулировали три принципа новой архитектуры:

♋️ Прогноз профита
Лёгкая ML-модель оценивает на старте, может ли пользователя заинтересовать какая-либо реклама. Если нет — мы избегаем сложных вычислений и сохраняем ресурсы.

♋️ Генерация кандидатов
Вместо алгоритмического подбора по ключевым словам мы перешли к методам поиска ближайших соседей. Нейросеть сопоставляет пользователей и объявления в едином векторном пространстве, что повышает и эффективность, и качество.

♋️ Трёхстадийное ранжирование
Сначала кандидатов отфильтровывает лёгкая модель, а потом тяжёлая. Так у нас появляется возможность использовать сложные алгоритмы без роста нагрузки.

Когда мы заявили, что средняя утилизация сервисов в 30–40% — это не предел, а повод для основательной оптимизации, нам не верили. Дескать, при большей нагрузке не избежать серьёзной деградации.

Мы изменили подход:

🟢 Умная деградация
Мы перенастроили систему шедулинга, чтобы деградация происходила по длине очереди, а не по времени обработки уже взятых задач.

🟢 Избирательное отсечение
С помощью PID-контроллера мы в реальном времени регулируем порог отсечения запросов с низким профитом. Это даёт возможность «прореживать» очередь в пиках и жертвовать 1% качества, чтобы экономить 15% нагрузки.

🟢 Умная балансировка
Мы научились учитывать гетерогенность железа и направлять больше запросов на более производительные машины, чтобы снизить дисперсию.

В результате нам удалось поднять утилизацию и изъять 10–20% лишних ресурсов из сервисов.

От Protobuf к собственному формату

Перекладывание данных — тихий убийца производительности. Мы прошли путь от ручной сериализации через Protobuf к FlatBuffers. Однако операции чтения оставались заметно более дорогими по сравнению с чтением полей из простых структур.

Мы создали собственный формат YAFF, который объединил лучшие черты Protobuf (схему) и FlatBuffers (подход к доступу), и оптимизировали его для современных процессоров. В итоге получили двукратное улучшение CPU time, а размер сообщений сократился на треть.

Микросервисы, которые экономят

Принято считать, что разделение монолита — это компромисс между скоростью разработки и эффективностью. Мы доказали обратное. Вынос логики «быстрых счётчиков» в отдельный микросервис позволил создать в нём специализированный кеш под наши паттерны доступа (например, с группировкой по экспериментам, а не по кампаниям).

Это улучшило локальность данных и преобразовало CPU-bound-задачу в memory-bound, что в совокупности позволяет экономить CPU.

Наш опыт демонстрирует, что экономия на масштабе — это не только оптимизация алгоритмов. Ещё это:

🟢 Умная деградация, которая позволяет повышать утилизацию
🟢 Борьба с накладными расходами на каждом уровне, особенно при сериализации
🟢 Стратегическое применение микросервисов для улучшения локальности данных
🟢 Постоянный мониторинг с использованием перфоратора, PGO-оптимизация и нагрузочное тестирование

Кстати, с этой темой Антон выступал на конференции «Я про бэкенд». Доклад можно посмотреть на платформах:

Ютуб
VK Видео

Презентацию выступления Антона прикрепляем ниже 🔽

Больше записей докладов с конференции собрали для вас в плейлистах:

Ютуб
VK Видео

Подписывайтесь:
💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤‍🔥32🤔1
💻 Очередь на PostgreSQL: оптимизировать нельзя отказаться

В Яндекс 360 мы разрабатываем сервисы с очень большими нагрузками как по RPS, так и по объёму данных. А ещё в них много задач, которые должны выполняться асинхронно. Например, скопировать большую папку с тысячей файлов. Или уведомить пользователя о том, что у него загрузился файл, чтобы десктопное приложение смогло начать синхронизацию.

Для подобных сценариев в своей инфраструктуре мы используем очереди поверх SQL‑баз. Да, многие скептически назовут такой подход антипаттерном. Попыток реализовать очереди на PostgreSQL и MySQL было немало, и часто они идут в комплекте с типовыми проблемами: от блокировок до деградации производительности. Но в реальности такие решения встречаются повсеместно.

На связи Дима Кривопальцев, тимлид бэкенд‑команды Яндекс Диска. Я расскажу, как мы организовали очереди поверх SQL-баз, разобрались с ретраями, организовали выборку задач воркерами и наладили отказоустойчивость.

Читайте на Хабре:

❇️ Зачем строить очередь на PostgreSQL
❇️ Почему мы взяли за основу концепцию Delay tolerance
❇️ Как работать с Bloat и долгими транзакциями

Подписывайтесь:

💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥97🤔2👏1
🔒 Как браузер становится быстрее и безопаснее

Технология Client Hints — это новый стандарт обмена данными между браузером и сервером, который постепенно заменяет устаревший User Agent. Вместо того чтобы получать длинную, сложную и часто избыточную строку, сайты теперь могут запрашивать только ту информацию, которая им действительно нужна: версию браузера, тип устройства и другие параметры.

Ключевые преимущества:

🟢 Приватность и безопасность. Браузер передаёт только то, что разрешил пользователь и запросил сервер

🟢 Гибкость и точность. Серверы получают структурированные данные через HTTP-заголовки, что упрощает парсинг

🟢 Совместимость. Яндекс Браузер уже полностью поддерживает эту технологию

🔶 Хотите узнать больше? Читайте подробный разбор технологии Client Hints, сравнение с User Agent и то, как работают хинты под капотом, в статье на Хабре.

Подписывайтесь:
💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥3👍2
📕 Валгалла с value-классами, новый Python и инсайты про Go 1.26. Всё это — в новом дайджесте новостей бэкенда.

🐍 Python

🟢 Вышел Python 3.14. С официальной поддержкой free threading, отложенной интерпретацией аннотаций и удобными функциями для работы с субинтерпретаторами

🟢 Приняли PEP 810. Добавили синтаксис для явного указания ленивых импортов: они позволяют откладывать загрузку и выполнение модуля до первого использования импортированного имени

🟢 Одобрили PEP 798. Новый пеп расширяет генераторы списков, словарей и множеств, чтобы разрешить распаковку обозначений * и ** в начале выражения

🟢 Вышел Pydantic AI 1.0. Фреймворк для агентов GenAI, который управляет промптами, валидирует ответы и кеширует запросы

🟢 В разработке PEP 806. Суть: разрешить операторам with принимать как синхронные, так и асинхронные контекстные менеджеры в одном операторе через ключевое слово async

📟 C++

🟢 Предложение Safe C++ не будет продолжено в текущем виде. Вместо них сосредоточимся на профилях для определения режимов языка

🟢 Пакетный менеджер, чтобы управлять зависимостями и собирать CMake-проекты. Pixi Build делает сборку более предсказуемой и упрощает взаимодействие с другими языками

🟢 Опенсорсный фреймворк XTD – GUI на C++20. С ним можно создавать CLI, формы GUI, приложения (xUnit) и библиотеки для модульного тестирования на разных OC

🟢 C++26 принесёт долгожданную возможность использовать std::optional со ссылками. В статье: зачем это нужно, как изменит подход к возврату опциональных ссылок из функций и почему это лучше сырых указателей

🟢 С- и С++-совместимая реализация компилятора, безопасная для памяти. Fil-C основана на clang 20.1.8, а внутри — параллельная сборка мусора и InvisiCaps. Получается, Rust больше не нужен? 🤔

🟢 ISO C++ собралась на Гавайях. Антон Полухин из Техплатформы Городских сервисов Яндекса рассказывает, как прошла встреча Международной организации по стандартизации языка и какие новинки появились. А вот запись декабрьской встречи российской РГ21 по стандартизации языка

🤓 Golang

🟢 С днём рождения, Go! В этом году языку исполнилось уже 16 лет: годовщину отмечаем обзором изменений в версиях 1.24 и 1.25

🟢 Экосистема Go в 2025 году. Обзор ключевых трендов во фреймворках, инструментах, практиках разработчиков и библиотеках Go с опорой на годовой отчёт JetBrains

🟢 Экспериментальный сборщик мусора The Green Tea. Он сканирует страницы, использует векторные инструкции и алгоритм разметки, который обходит граф объектов

🟢 Релиз Dragonbox. Ребята показали новый алгоритм, который ускоряет форматирование чисел с плавающей запятой

🟢 Release Notes Go 1.26. Инсайты о грядущем обновлении языка: функция new, профили утечек горутин, новый пакет crypto/hpke и другие изменения

🟢 Анонс Genkit Go 1.0. Ключевые фичи фреймворка: типобезопасные AI-потоки, тулколинг, RAG и унифицированный интерфейс модели с поддержкой Vertex AI, OpenAI и других платформ

☕️ Java

🟢 Гайд: внедряем Kotlin в среду, где правит Java. В пяти шагах ребята рассказывают, как начать работу, оценить проект в реальных кейсах, подогреть интерес коллег, помочь важным людям сказать «да» и масштабировать решение на всю компанию

🟢 Вышел Spring Boot 4. Под катом: поддержка Java 25 при сохранении baseline на Java 17, переезд на Jakarta EE 11 и широкая адаптация JSpecify в рамках всей экосистемы

🟢 Опубликован новый EA-билд Valhalla. В нём реализована главная функциональность value-классов. Остаётся только стабилизировать!

🟢 Вышел JUnit 6.0.0. Упрощённое управление зависимостями и JSpecify nullability annotations для чёткого указания nullable/non-nullable

Подписывайтесь:
💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥7🎄3
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Блицархитектура

Сложные системы, десятки тысяч строк кода… и всего 30 секунд, чтобы это объяснить. Всё это в челлендже для участников C++ Zero Cost Conf.

🔶 А все доклады с конференции можно посмотреть на ютубе и в VK Видео.

Подписывайтесь:
💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥84
🕹 Ещё один год вместе с Yandex for Backend

В 2025-м мы продолжали строить сообщество инженеров и рассказывать про опыт бэкенд-разработчиков Яндекса.

И пока 2026-й не выкатили в прод, давайте посмотрим, как зарелизился 2025-й.

💼 Разбирались в трендах и веселились на ивентах:

🟢 Провели C++ Zero Cost Conf в Москве, Белграде и Петербурге, две встречи РГ21 С++ и Я.Субботник по Go с 9 часами дискуссий за круглыми столами

🟢 Пришли в гости на Joker и провели DnD-квесты по архитектуре. А ещё принесли 8 упаковок холлса, которым команда спасала голоса после 15 часов разговоров 😅

🟢 Провели Pytup в двух городах: в Белграде обсудили итоги года и тренды в сообществе, а в Екатеринбурге слушали доклады, гоняли на роботах-доставщиках и ставили рекорды в змейке

🟢 Разобрались, как ML изменил индустрию, на «Я про бэкенд»

🟢 На Backend Talks выяснили, почему важно поддерживать архитектурную простоту

🟢 Обсудили разработку роботов и умных устройств на «Я Железо»

🟢 Научились использовать нейросети, агентов и протокол MCP на nexthop 2025

🟢 Провели Yandex Neuro Scale — главную конференцию Yandex Cloud

🟢 Встретились на F[Scala], крупнейшей конференции по Scala и функциональному программированию от Яндекс Вертикалей

И в итоге пообщались в офлайне более чем с 3500 разработчиками. Рады знакомству со всеми 💚

🐚 В телеграм-канале тоже был движ:

🟢 Мы опубликовали 150 (!) постов

🟢 К нам присоединились свыше 1500 новых подписчиков

🟢 Рекорд по реакциям набрал пост Саши Федькина про очереди на Postgres

🟢 А больше всего репостов — история о том, как различаются подходы и концепции на C++ и Golang

📺 Не забудем и про наш канал на ютубе. В нём мы:

🟢 Выложили 66 видео и 61 шортс

🟢 Провели 7 трансляций с мероприятий

🟢 Собрали больше полумиллиона просмотров

🎁 Конечно, у нас есть небольшой подарок — набор праздничных аватарок, чтобы никто не мешал вам наслаждаться каникулами 😉

Оставайтесь с нами и в следующем году: впереди ещё много интересного! А теперь — отдыхать и есть мандаринки.

🈯️ С наступающим!
Ваш Yandex for Backend


Подписывайтесь:
💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
10🎉7🔥4💊1