Как стать автором
Обновить
106.1

Высокая производительность *

Методы получения высокой производительности систем

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

ОС против Kafka: битва за map-области: история одного неочевидного лимита

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

Добрый день! Меня зовут Богдан, я тимлид в одном из отечественных финтехов. Сегодня я хочу поделиться нашей историей: как нам удалось, ненарочно, зашедулить падение всех нод одного из наших кластеров Kafka.

В один из холодных февральских дней пришло сообщение от мониторинга с виртуальных машин кластера Kafka: «Свободное дисковое пространство достигло значения < 15%». Было решено исследовать, нужно ли добавлять дискового пространства или же можно потюнить настройки ретеншена данных.

Тут стоит немного вспомнить теорию. Как известно, в Kafka сообщения распределяются по партициям, а каждая партиция на брокере представлена набором сегментов. Число сегментов у партиций может быть разным — оно варьируется в зависимости от интенсивности записи и настроек размера сегмента.

Сегмент (если упростить) — это лог-файл, в который просто пишутся данные в конец. По достижении временного предела либо его размера он ротируется: создается новый сегмент, и запись идет уже в него.

Держа вышесказанное в голове, мы отправились смотреть настройки хранения сегментов в нашем кластере Kafka..

Читать далее

Новости

Devhands Open Sessions c Владимиром Перепелицей. Очереди в 2025м, что выбрать: Kafka, RabbitMQ, NATS или что-то ещё?

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

Привет, Хабр! На прошлой неделе мы провели стрим по очередям с Владимиром Перепелицей (эксперт по большим проектам, очередям и Tarantool, Solution Architect в Exness, создатель S3 в VK Cloud, регулярный спикер и член ПК конференций Highload). Обсудили выбор брокера или системы очередей 2025м году: что поменялось? NATS, его особенности, перспективы, кого он “подвинет” в первую очередь - Kafka или RabbitMQ? Что нового в свежей Apache Kafka 4? Насколько популярны архитектуры, где, например, Kafka основной storage (IoT, сбор метрик и тд). Под катом - расшифровка стрима.

Читать далее

High Availability в Postgres Pro без головной боли

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

Для тех, кто устал от «зоопарка» решений по созданию отказоустойчивых кластеров, расскажем, как добиться нужной функциональности одним решением. BiHA позволяет данным «выжить», даже если один из ЦОДов был физически уничтожен. Как же мы этого добились?

Читать далее

Всё про инференс на Sophon NPU

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

В этой статье мы поговорим про ML на базе плат Sophon. Наверное это один из производителей которые набрали больше всего популярнсти в AI последнее время. 

Я расскажу как они соотносятся с другими платами на рынке (Jetson, RockChip, Hailo, TI, etc.). Расскажу как подготовить сети для работы на платформах, покажу ограничения (что пока нельзя сделать, ограничения по скорости, и.т.д.).

Читать далее

Истории

Почему сложно разработать OLAP-базу данных, если у тебя уже есть OLTP

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

Это адаптированная для Хабра расшифровка доклада Алексея Дмитриева, директора аналитической платформы YDB DWH, которую создаёт команда Yandex Cloud, — компонента нашей гибридной базы данных YDB для обработки аналитических нагрузок. Когда проект только начинался, у нас было много наработок, которые мы успешно переиспользовали в других проектах. Но оказалось, что OLAP‑нагрузка так сильно отличается от OLTP, что за три года пришлось практически написать по ещё одной реализации многих частей системы. Под катом история о том, почему на рынке так мало гибридных баз данных класса Hybrid Transactional and Analytical Processing (HTAP) и какие сложности стоят на пути их разработки.

Читать далее

Хеш-таблица и C++20

Уровень сложностиСложный
Время на прочтение6 мин
Количество просмотров6.2K

Рассматриваем различные «приколюхи» из C++20 на примере хеш‑мапы!

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

Читать далее статьи от @SEIka69

Выбор индексов в базах данных для highload-систем

Уровень сложностиСложный
Время на прочтение27 мин
Количество просмотров9.4K

Индексы – это «ускорители» доступа к данным в базах данных. Правильно выбранные индексы могут многократно ускорить запросы, что особенно критично в highload-системах с большими объёмами данных и большим числом запросов. Однако за ускорение чтения приходится платить усложнением записи и дополнительным расходом памяти. В этой статье мы подробно рассмотрим, как работают разные типы индексов в реляционных СУБД, как выбирать индекс под конкретный запрос, обсудим подводные камни (например, блоат, переиндексация, избыточные индексы) и затронем индексацию в NoSQL (MongoDB, Cassandra). Завершим чеклистом, который поможет выбрать оптимальный индекс под вашу задачу.

Читать далее

Game++. Heap? Less

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

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

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

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

Попробую убедить вас не использовать std::string/vector в функциях. При написании кода для пк, неважно - игры это или что-то другое, программа обычно разделяется на условно пять областей памяти.

Burn them all

Решаем проблемы роста нагрузки в умных домах

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

Всем привет! Меня зовут Вадим Трегубов, я техлид бекэнда платформы умного дома в SberDevices. Я расскажу о проблемах роста нагрузки, возникающие у проектов интернета вещей и решениях, помогают их избежать.

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

Учитывая особенности работы с IoT, мы сформулировали требования к архитектуре...

Читать дальше

Код, который все изменил: история AlexNet и ее наследие

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

В марте 2025 года Компьютерный исторический музей (Computer History Museum) совместно с Google опубликовал исходный код AlexNet — нейросети, которая в 2012 году привлекла внимание к возможностям глубокого обучения. Исследователи и энтузиасты получили полные исходники модели, ставшей одним из ключевых этапов в развитии компьютерного зрения. Почему эта сеть настолько важна для ИТ, а ее вклад считают значимым? Давайте разбираться.

Читать далее

Библиотека для кэширования Caffeine: анализ кода

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

То и дело, прожигая время за чтением reddit, я натыкаюсь на очередной пост, в котором упоминается метод S3 FIFO и говорится, что он лучше LRU (вытеснение реже всего используемых значений) — потому, что даёт более низкий процент промахов кэша. Видные компании, в частности, RedPandas, Rising Wave и Cloudflare уже внедрили S3 FIFO у себя на различных мощностях, что только подогрело мой интерес к нему. Кэши — чертовски интересная тема, а по работе мне приходится сильно полагаться на работу с кэшами при обслуживании нескольких сервисов. Так что я был уверен, что рано или поздно мне потребуется протестировать S3 FIFO или, как минимум, удостовериться, что я понимаю ключевые идеи, заложенные в этой технологии.

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

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

Читать далее

Параллельное программирование на Go

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

На практике, создаваемое нами ПО выполняется на множестве процессоров. К сожалению, многие наши допущения, справедливые для одного процессора, в случае нескольких процессоров становятся ложными. Например, каким будет состояние памяти, если два процессора изменяют один блок памяти? В общем случае на этот вопрос ответить сложно. Может случиться так, что внесённое одним процессом изменение перепишет внесённое другим. Справедливо может быть и обратное: может «победить» изменение другого процессора. Или оба процесса могут попытаться внести изменение одновременно, в результате чего возникнет неопределённое состояние, не соответствующее ни одному ожидаемому. Мы называем такие операции доступа «гонками данных» — ситуацией, в которой два или более процессоров в программе одновременно получают доступ к одной области памяти, и хотя бы одна из этих операций доступа выполняет запись без должной синхронизации.

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

Как нам удалось упростить жизнь инженера-сметчика и сократить время на разработку сметы в 20 раз

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

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

С чего все начиналось: с типичного дня сметчика

Однажды мне поставили задачу — подготовить сметы для нового объекта, включая раздел вентиляции. Как многие сметчики знают, вентиляция — это один из самых трудоемких разделов.

Читать далее

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

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
22 апреля
VK Видео Meetup 2025
МоскваОнлайн
23 апреля
Meetup DevOps 43Tech
Санкт-ПетербургОнлайн
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область

Бинарный формат вместо текста

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

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

Читать далее

История эволюции веб-сервиса: от примера из доки до космолета

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

5k RPS, 5ms Latency и 100 экспериментов одновременно. История о том, как наша команда перестраивала веб-сервис для сплитования трафика в высокопроизводительную систему. С какими ограничениями Cpython и Gil столкнулись на пути, как обходили "узкие места" и оптимизировали сервис до микросекунд. В общем, всё о том, как мы построили "космолет" на Python и взлетели! Ну и, конечно же, ответ на вопрос: "Почему не Go? ".

Читать далее

Бэктестинг торговых стратегий на Python с помощью Numba. Когда перевод расчетов на GPU действительно оправдан?

Уровень сложностиСложный
Время на прочтение26 мин
Количество просмотров5.5K

Бэктестинг — ключевой процесс в алгоритмической торговле. Он позволяет проверить стратегию на исторических данных, прежде чем запускать её в реальной торговле. Однако, чем больше данных и сложнее логика стратегии, тем дольше времени занимают вычисления. Особенно если стратегия анализирует тиковые данные и требуется протестировать множество комбинаций гиперпараметров стратегии, время вычислений может расти экспоненциально.

В этой статье мы разберем, как реализовать бэктестинг на чистом Python, посмотрим сколько времени могут занимать вычисления, а также попробуем найти разные способы оптимизации.

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

Как же использовать ту легкость и скорость разработки Python и при этом сохранить адекватное время вычислений на больших объемах данных? В этой статье мы увидим, насколько перенос вычислений на GPU может увеличить производительность вычислений.

Читать далее

Reasoning-LLM: архитектура и обзор передовых моделей

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

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

Появление reasoning-LLM связано с тем, что традиционные LLM (например, GPT-4 или Llama 3.1) хотя и хорошо справляются с языковыми и энциклопедическими запросами, нередко ошибались в задачах, требующих сложных вычислений, планирования или логического вывода. В этой статье мы подробно разберем, как работают reasoning-LLM, их внутреннее устройство (Transformer, self-attention, механизмы «мышления»). А еще — рассмотрим передовые модели (OpenAI o1, DeepSeek R1 и Claude 3.7 Sonnet), факторы, влияющие на их точность, и дадим практические рекомендации по применению.
Читать дальше →

Demeter в опенсорсе: реактивное профилирование Android-приложений

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

Всем привет, меня зовут Вадим Мезенцев, я Android‑разработчик в команде Яндекс Go. Сегодня я хочу рассказать историю о том, как мы искали подход к профилированию нашего приложения, с какими проблемами столкнулись и как в итоге реализовали библиотеку для измерения производительности.

Наша команда часто сталкивалась с проблемами при поиске «узких мест» в производительности приложения. Мы пробовали различные инструменты профилирования, но все они требовали слишком много времени на сбор метрик, анализ и фильтрацию нужных данных. Чтобы решить эту проблему, мы разработали собственное решение, которое сочетает скорость анализа и простоту поиска проблем. Мы создали библиотеку Demeter, которую легко интегрировать в отладочную версию Android‑приложения. Она позволяет получать отчёты о производительности во время использования приложения и переходов между экранами. Такую сборку можно передать команде тестирования, а затем проанализировать отчёты и изучить изменения.

Читать далее

«Плохие» руководители и критика: почему честная обратная связь пугает людей?

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

«Плохие» руководители и критика: почему честная обратная связь пугает людей?

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

Читать далее

Записки оптимизатора 1С (ч.10): Как понять, что процессор — основная боль на вашем сервере СУБД MS SQL Server?

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

Назрел пост, связанный нагрузкой на процессор сервера СУБД MS SQL Server.

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

Когда нагрузка на процессоре ~100%, огромные очереди к нему, то тут действительно всё просто и обсуждать особо нечего. Сценарий простой: либо ищем что его нагружает, либо система переросла процессор и ему пора накинуть мощностей.

А вот когда нагрузка держится на среднем уровне, но при этом есть очереди и ожидания, то здесь далеко не все так очевидно.

Читать далее
1
23 ...