Обновить

Бэкенд

Сначала показывать
Порог рейтинга
Уровень сложности

Шардирование сервиса объявлений Авито Доставки. Часть I

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2.9K

Привет, меня зовут Артем, и я работаю в Авито с 2016 года. Начинал как тестировщик, затем вырос в backend-инженера, с 2019 года пишу на golang, а сейчас руковожу командой разработки в Авито Доставке в роли техлида. В этой статье поделюсь опытом шардирования нашего основного сервиса delivery-item: зачем мы это сделали, как подошли к задаче, с какими граблями столкнулись и как всё выглядит спустя почти два года.

Читать далее

Почему компании переходят с DATAREON ESB на DATAREON Platform и с чего начать

Время на прочтение6 мин
Количество просмотров144

На связи Сергей Скирдин, технический директор ИТ-интегратора «Белый код». На проектах мы часто внедряем DATAREON Platform, иногда сталкиваемся с ситуацией, когда компания использует DATAREON ESB. Решил разобрать эту тему: кому и когда стоит переходить, какие сложности могут быть. 

Читать далее

Кому нужен Graphviz, если можно написать его самому?

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров5.7K

Недавно мы переделали наши внутренние инструменты, визуализирующие компиляцию JavaScript и WebAssembly. При работе оптимизирующего компилятора Ion мы теперь можем генерировать интерактивные графы, демонстрирующие, как конкретно обрабатываются и оптимизируются функции.

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

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

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

Читать далее

MapStruct: как безобидный метод портит весь маппинг

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров1.3K

При работе с MapStruct возникает соблазн добавлять небольшие вспомогательные методы прямо в ваш mapper и вызывать их через expression. Однако если такой метод оперирует довольно общими типами (например, String -> String), MapStruct может обнаружить его и применить к другим полям того же типа — даже если вы этого не планировали.

Читать далее

Как мы автоматизировали код-ревью благодаря связке Aider + LLM

Время на прочтение11 мин
Количество просмотров1.3K

Привет, Хабр! Меня зовут Константин Репин, я старший программист в Fix Price. В этой статье расскажу, как мы облегчили жизнь нашим коллегам-ревьюерам, внедрив в процесс AI-ассистента для код-ревью. Начну с краткого описания инструмента, а затем перейдем к практике — покажу нашу реализацию и поделюсь опытом, включая примеры кода.

Читать далее

Java Digest #30

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров1.2K

Всем привет! 👋👋👋👋👋

Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

Октябрь выдался интересным: JDK 26 приносит поддержку HTTP/3, Vector API снова в инкубации, а Swing внезапно обзаводится своим DatePicker — да, 2025-й, а Swing жив! Разработчики обсуждают Leyden и GPU-ускорение для Java-ИИ, а Oracle чинит 15 уязвимостей. В статьях свежие оптимизации ZGC, разбор виртуальных потоков, Jackson 3, Kafka Queues и немного философии про «хороший вкус» в разработке. А под конец релизы, от JUnit 6 до Spring 6.2.12. Заваривайте кофе, обновляйтесь до JDK 25 и читайте. Поехали 🚀

Читать далее

Почему я отказался от ORM в пользу чистого SQL

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров10K

Во время выполнения очередного проекта мне пришлось работать с Битрикс ORM, при этом параллельно в системе был инстанс Laravel. Две разные ORM работали с единой базой данных. Не буду вдаваться в причины, по которым был выбран такой подход, и воздержусь от его оценки. Суть в том, что мне приходилось одновременно работать с двумя принципиально разными системами. Этот опыт привел меня к фундаментальному выводу: ORM — не для меня.

Почитать мнение

Как мы доработали фреймворк Rasa, чтобы сделать своего ИИ-секретаря для ответа на звонки

Время на прочтение7 мин
Количество просмотров429

Привет, Хабр! Меня зовут Игорь Козлов и я — ведущий разработчик в команде «Membrana Голос» от МТС. Наш продукт — это сервис, который принимает звонки, когда вы заняты, и общается со звонящими почти как живой человек. Он основан на полноценном диалоговом фреймворке, десятках моделей машинного обучения и тщательно продуманной логики обработки интентов. Мы взяли за основу open source-фреймворк Rasa, но сильно его доработали, чтобы превратить в гибкую платформу для управления голосовыми диалогами.

В этом материале я покажу, как мы переписали Action Server и обучили DIETClassifier, а также расскажу, как нам удалось обойти ограничения Rasa и сделать умного, настраиваемого и устойчивого к ошибкам телефонного ассистента.

Читать далее

Особенности Python, о которых вас точно спросят на техническом собеседовании. Часть 2

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров13K

Привет, Хабр! Меня зовут Бартенев Евгений, я автор курса «Python-разработчик» в Яндекс Практикуме и практикующий разработчик. Я прособеседовал сотни кандидатов и сам неоднократно побывал в роли собеседуемого, поэтому хорошо представляю, какие именно знания проверяют на интервью и где чаще всего «проваливаются» не только джуны, но и опытные разработчики.

Первая часть этой статьи вызвала оживлённое обсуждение. В комментариях читатели делились собственным опытом, напоминали о тонкостях, которые я упустил, и задавали отличные уточняющие вопросы. В этой части я продолжу разбирать очередные «подводные камни» в Python. 

Как и раньше, я не буду разбирать заезженные вопросы вроде «чем отличается список от кортежа». Вместо этого — разберём реальные особенности Python, на которых строятся самые коварные задачи и вопросы.

Читать далее

Архитектура сервиса на GO «Клиент-Сервер»

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров1.7K

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

Читать далее

Библиотека Python для доступа к данным ЦБ: cbrapi

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.1K

cbrapi - бесплатная библиотека с открытым исходным кодом на Python, которая превращает сложное взаимодействие с SOAP API Центрального банка Российской Федерации в простой и понятный инструмент.

Читать далее

Сравнительный анализ эффективности планировщиков СУБД при выполнении различных запросов

Уровень сложностиСредний
Время на прочтение34 мин
Количество просмотров3.3K

Когда мы пишем запрос, СУБД делает гораздо больше, чем просто ищет данные. Она оценивает десятки сценариев выполнения, сравнивает стоимость операций и выбирает оптимальный путь к результату. От этого выбора зависит, будет ли запрос выполняться секунду или минуту. Почему одни системы находят лучший план, а другие выстраивают менее эффективный алгоритм? Попробуем разобраться, как планировщики СУБД принимают решения и что определяет их эффективность.

Читать далее

Оптимизация производительности запросов: мощный тандем StarRocks и Apache Iceberg

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров1K

Apache Iceberg — табличный формат для озёр данных с поддержкой ACID, Schema Evolution, Hidden Partition и версионирования, но при больших метаданных и работе через S3 страдает планирование запросов и латентность. В связке со StarRocks мы показываем, как распределённый Job Plan, Manifest Cache, CBO с гистограммами, Data Cache и материализованные представления выводят lakehouse‑аналитику на уровень DWH: снижают накладные расходы на метаданные, ускоряют планы и выполнение, а запись обратно в Iceberg сохраняет единый источник истины. Разбираем архитектуру Iceberg, типовые узкие места и практики оптимизации на StarRocks 3.2–3.3, включая кейс WeChat/Tencent.

Читать далее

Ближайшие события

Политики над конфигами (OPA/Rego) в GitOps-пайплайне

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров486

Привет, Хабр!

Представим, что вы отвечаете за десятки конфигурационных файлов Kubernetes (или Terraform, Ansible, не суть важно) в репозитории, и каждый pull request может потенциально привести к тому, что в кластер уйдёт что-то не то. Наш любимый коллега случайно поставил контейнер с privileged-правами, другой задеплоил образ из публичного репозитория Docker Hub, а третий вовсе забыл про лимиты памяти и CPU. Без автоматического контроля такие промахи легко попадут в продакшн. Ошибки в настройках сегодня одна из главных причин инцидентов безопасности в облачных средах.

Как же нам держать всё под контролем? Внедрить политики как код: формализованные правила, проверяемые автоматически на каждом шаге. В этой статье я расскажу, как применять Open Policy Agent и язык Rego, чтобы навести порядок в GitOps-пайплайне и не допускать лишнего в конфигурациях.

Читать про внедрение политик в GitOps

Пакет управления доступом на основе ролей (RBAC) для PHP

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров594

Потребовалось мне сделать свою реализацию проверки прав для PHP. В итоге эта разработка стала отдельным пакетом. Возможно кому-то пригодится. В статье рассказываю как это работает.

Читать далее

Система типов и интерфейсы в Go (статическая типизация)

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.5K

🧠 Система типов и интерфейсы в Go — это не просто о struct и interface{}.
Это про то, как язык заставляет проектировать надёжные, безопасные и предсказуемые системы.
В статье — от основ статической типизации до тонкостей работы интерфейсов, type assertion и generics.

В статье разбираем:
🔹 Как работает система типов Go и почему интерфейсы — это не классы.
🔹 Что такое type embedding и interface satisfaction.
🔹 Как использовать пустой интерфейс (interface{}) безопасно.
🔹 Чем опасны type assertions и где лучше применять type switch.
🔹 Как работают Generics (Go 1.18+) и как они сочетаются с интерфейсами.
🔹 Почему вызовы через интерфейсы влияют на производительность, и как это профилировать.
🔹 Где проходят границы между гибкостью и безопасностью типов.

Читать далее

Как мы в коробках рассылки разгоняли

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров296

Привет, меня зовут Степан Золотухин, я разработчик в Битрикс24. Моя команда работает над такими продуктами, как Почта, Маркетинг, Структура компании, Подписание, CRM-Формы и Бизнесс процессы.

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

В дефолтной конфигурации отправка идёт нативным PHP через функцию mail() (если у отправителя не задан SMTP). Дальше всё идет в инфраструктуру пользователя (exim, sendmail, postfix И так далее)
Это просто и надёжно, но скорость отправки упирается в ограничения при отправке в один поток.

Читать далее

Docker для Python-разработчика: как упаковать ваше приложение в контейнер и запустить где угодно

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров7.7K

Представьте ситуацию: вы написали шикарного Telegram-бота, отладили его на своем ноутбуке с Python 3.11 и последней версией любимой библиотеки. Вы отправляете код коллеге, а у него падает с ошибкой, потому что у него Python 3.9 и какая-то зависимость встала криво. Или, что еще хуже, вы пытаетесь выкатить это на сервер, а там системный администратор смотрит на ваш requirements.txt и тяжело вздыхает, потому что для установки одной из библиотек нужна системная утилита, которой нет и не будет. Знакомо?

Читать далее

Kafka или REST для взаимодействия между микросервисами?

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров7.7K

Apache Kafka и REST (Representational State Transfer) — два популярных стиля взаимодействия, используемых в архитектуре микросервисов. У каждого из них есть свои сильные стороны и характеристики, которые делают их подходящими для различных сценариев. В этой статье мы рассмотрим технические аспекты использования Kafka и REST для межсервисного взаимодействия, приведем примеры и обобщим их ключевые моменты в сравнительной таблице.

Сравнить подходы

Почтовый Шарпей: как мы приручили 700+ шардов PostgreSQL

Время на прочтение24 мин
Количество просмотров3.4K

Всем привет! Меня зовут Алексей Кременьков, я старший разработчик в Яндекс Почте. В этой статье расскажу, как мы работаем с большим количеством шардов PostgreSQL: как создавали собственный сервис динамического шардирования Sharpei, как развивали инфраструктуру под него и как проходил переезд на облачное решение. В конце разберёмся, какие плюсы и минусы мы смогли найти в этом решении.

Читать далее