Обновить
46.59

Серверная оптимизация *

Разгружаем сервер

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

Книга «Экскурс в неопределённое поведение C++». Секреты укрощения единорога

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

Привет, Хабр. С гордостью, триумфом и трепетом хотим рассказать вам об одной из наших флагманских новинок, вышедшей в пылающем июле — книге «Экскурс в неопределённое поведение C++».

Cегодня книжные полки изобилуют нестареющими пособиями по C++. Этот язык чрезвычайно важен не только в разработке игр, финансового софта и встраиваемого ПО, но и как основной материал для изучения алгоритмов. Именно поэтому мы даже выпустили две книги-билингвы по алгоритмам, в которых код на C++ соседствует с идентичным ему кодом на Python. Это наш многолетний бестселлер «Алгоритмический тренинг. Решения практических задач на Python и C++» Максима Иванова и недавняя новинка «Базовые алгоритмы. Реализации на Python и C++ на примере классических игр» Павла Довгалюка. Но язык C++ не только очень полезен, но и опасен, так как на этапе преобразования исходного кода в машинный многие решения отдаются на откуп компилятору. Поскольку компилятор в большинстве режимов изначально заточен на оптимизацию кода, он регулярно привносит в код C++ непредсказуемые и порой необъяснимые варианты неопределённого поведения (UB, Undefined Behavior). Титаническую работу по систематизации неопределённого поведения в C++ проделал уважаемый Дмитрий Свиридкин @Nekrolm. В настоящее время он работает инженером по программированию встраиваемых систем в отделе Cloudfront Compute компании AWS. Дмитрий преподавал курсы по Linux и C++ в Санкт-Петербургском государственном университете и Высшей школе экономики, а также имеет богатейший послужной список, в котором есть и олимпиады по информатике, и машинное обучение, и программирование прошивок и, конечно же, выжимание последних капель производительности из самого неукротимого облачного железа. Некоторое время его заметки публиковались на сайте компании PVS-Studio, разрабатывающей известный российский статический анализатор кода. Далее под катом - предисловие Андрея Карпова, а также обзор самой книги.

Читать далее

Новости

Балансировка нагрузки: проблемы, решения, практические рекомендации

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

Один сервер — это точка отказа. Рано или поздно он не выдержит. Как только появляется второй, третий, десятый сервер, возникает вопрос: кто будет раздавать им работу? Эту роль и берет на себя балансировщик нагрузки.

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

Читать далее

PostgreSQL против 10 миллионов записей: оптимизация запросов, которая спасла наш проект

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

Это был обычный понедельник. Я пил кофе, проверял почту, и вдруг — волна уведомлений в Slack. «Сайт не грузится!», «Отчеты зависли!», «Что происходит?».

Наш проект, который успешно работал с несколькими сотнями тысяч записей, перешагнул психологически важный рубеж — 10 миллионов строк в таблице заказов. И PostgreSQL, который раньше летал, внезапно начал ползти как улитка.

Читать далее

Архитектура NGFW: опыт использования VPP и DPDK, частые ошибки разработчиков

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

Всем привет! Меня зовут Константин. Моя карьера в сетевой разработке началась со времен Symbian OS, когда я участвовал в создании сетевого стека этой платформы. С 2010 года я работаю в «Лаборатории Касперского», разрабатывая мобильные и сетевые продукты, а последний год плотно погружен в проект NGFW. В мои задачи входит как проработка архитектурных решений, так и написание кода ключевых модулей. 

В этой статье я хочу рассказать об архитектуре сетевого экрана следующего поколения (NGFW), над которым работаю. В частности, расскажу:

- об архитектуре передающего слоя (data plane) нашего продукта, основанной на связке DPDK/VPP;
- о пути сетевого пакета в рамках data plane NGFW;
- о частых ошибках при разработке решений на базе VPP;
- о разработке и сценариях встраивания в высокоскоростной конвейер обработки пакетов VPP некоторых из наших движков безопасности;
- об истории создания наших собственных движков безопасности DPI и IDPS (хочу выразить благодарность за неоценимую помощь в подготовке материала для данного раздела коллегам из команды IDPS и лично Евгению Прусову);
- об интеграции data plane с протоколами динамической маршрутизации.

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

Читать далее

Видеокарты NVIDIA для enterprise: A2000, T4 и A2 — что выбрать и как арендовать за рубль

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

Чтобы запускать задачи инференса, рендеринга 3D‑графики или обработку видеопотока нужны параллельные вычисления. Серверы на одних только центральных процессорах не справятся, требуются графические ускорители.

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

Читать далее

Оптимизация выравнивания и заполнения структур в Go. В 2025 г. всё ещё экономим на спичках

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

Здравствуйте!

В большинстве своём мы не думаем о том, как Go размещает поля структуры в памяти. И правильно делаем, пока наши структуры не используются в миллионах экземпляров, не передаются в каналах или не сериализуются каждую миллисекунду.

Также неправильное выравнивание может негативно сказаться на кеш-памяти процессора и скорости доступа к данным. На 32-битных платформах некорректное выравнивание 64-битных атомарных переменных (например, int64 для sync/atomic) вообще способно привести к панике.

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

Читать далее

Внедрение API Gateway: проблемы, решения, практические рекомендации

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

В мире микросервисов десятки, а то и сотни сервисов живут своей жизнью. Каждый со своим адресом, своими правилами, своей аутентификацией. Для внешнего клиента это выглядит как город без улиц и указателей. API Gateway — это попытка навести порядок. Он становится единым фасадом, центральным КПП для всего вашего бэкенда.

Но эта простота обманчива. Внедрение шлюза порождает свой собственный набор сложных архитектурных проблем. Решить их неправильно — значит построить себе очень дорогую и хрупкую тюрьму.

Читать далее

Одноразовый вейп в качестве веб-сервера

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

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

Предыстория

Уже пару лет я собираю коллекцию одноразовых вейпов, полученных от друзей и членов семьи. Поначалу я только извлекал аккумуляторы для «будущих» проектов (это точно не синдром Плюшкина), но в последнее время одноразовые вейпы стали гораздо более продвинутыми. Не хотел бы я быть юристом, которому придётся доказывать, что устройство с разъёмом USB C и перезаряжаемым аккумулятором можно классифицировать, как «одноразовое». К счастью, в ближайшее время я не планирую подаваться в юриспруденцию.

В прошлом году я разбирал одну из этих технологичных сосок для взрослых и заметил нечто любопытное: вместо обычной чёрной капли, которой заливают ASIC (Application Specific Integrated Circuit), я увидел небольшую интегральную схему с маркировкой «PUYA». Не буду винить читателей, если это название не вызвало у вас того же восторга, что и у меня — большинство людей никогда его не слышало. Эта компания больше всего знаменита своими флэш-чипами, но впервые я узнал о них из поста Джея Карлсона о самом дешёвом флэш-микроконтроллере. Это довольно мощные крошечные микроконтроллеры ARM Cortex-M0+.

За последний год у меня скопилось довольно много таких одноразок с PY32; это были разные модели вейпов одного производителя. Я не буду бесплатно рекламировать табачный бренд, но выражу благодарность проектировщику за маркировку на отладочных контактах!

Читать далее

Проектирование REST API: проблемы, решения, практические рекомендации

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

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

Читать далее

Как мы ускорили заливку данных в YDB в 40 раз

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

Привет! С вами Кабанов Олег — ведущий ML-инженер Flocktory.

В этой статье расскажу об опыте внедрения YandexDB в качестве хранилища для ML Online Feature Store. А также о том, как нам удалось ускорить загрузку данных в 40 раз и убрать влияние на скорость чтения данных при обновлении.

Читать далее

Как мы в ВТБ автоматизировали мажорное обновление PostgreSQL

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

Привет, Habr! На связи эксперты команды сервиса WatchDog — Дмитрий Коновалов и Геннадий Переломов.

В ВТБ, у нашего основного заказчика, мы развиваем сервисы автоматизации сопровождения баз данных. Одной из ключевых СУБД в инфраструктуре является PostgreSQL. Поддержка её в актуальном состоянии требует периодических мажорных обновлений, которые остаются одной из самых трудоёмких задач для DBA, особенно в ночные или выходные технологические окна.

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

Читать далее

Не смотрите на % использования процессора при гиперпоточности

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

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

Читать далее

Проценты использования процессора — это ложная метрика

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

По работе я постоянно имею дело с серверами; при этом их владельцы всегда хотят знать, когда серверы используют свои ресурсы максимально. Вроде бы, это простая задача? Достаточно настроить top или другой инструмент мониторинга системы, посмотреть на процент использования сети, памяти и CPU, и наибольшее значение покажет, насколько близко сервер находится к пределу своих возможностей.

Например, эта машина потребляет 50% ресурсов CPU, поэтому, вероятно, способна выполнять вдвое больше своих задач.

Однако когда владельцы пытаются реально проецировать эти значения, то оказывается, что процент использования CPU на самом деле растёт не совсем линейно. Но насколько непрямой может быть зависимость?

Чтобы ответить на этот вопрос, я выполнил кучу стресс-тестов, мониторя при этом объём выполняемых ими работы и отображаемый системой уровень использования CPU, а затем по результатам построил графики.

Читать далее

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

Оптимизация памяти в Go: 20 приёмов для эффективных приложений

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

Команда Go for Devs подготовила перевод статьи о том, как оптимизировать использование памяти в Go-приложениях. Автор делится двадцатью приёмами — от выбора ресивера метода и правильной инициализации slice до кастомного управления памятью и профилирования с pprof. TL;DR: мелкие улучшения складываются в заметный прирост производительности и стабильности.

Читать далее

Systemd: полное руководство для админов + примеры

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

Привет, Хабр! Systemd — скелет современного Linux. Он управляет не только службами, но и таймерами, монтированием, логированием... Понимать его = значительно повысить эффективность администрирования системы.

Данное руководство — исключительно технические аспекты: архитектура, юниты, cgroups, работа с журналами. Только команды и конфиги.

Читать далее

Как в одной стойке мы разместили не 8, а 21 сервер на Core i9 и Ryzen 9

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

Привет, Хабр! На связи Виталий, дежурный системный инженер дата-центра в Selectel.

Продолжаем тему, поднятую в наших предыдущих публикациях, где мы говорили об уплотнении серверов линейки ChipCore и усмирении RyzenTM в мини‑корпусе. Сегодня углубимся в специфику размещения по‑настоящему мощного оборудования. Напомню, нашей главной целью было эффективно использовать стандартные 19‑дюймовые серверные стойки для размещения систем, собранных из высокопроизводительных десктопных компонентов. Очевидно, что для решения этой задачи, разработки собственного корпуса не избежать.

В отличие от прошлых проектов, появилась новая особенность — железо экстремальной производительности с потребляемой мощностью, значительно превышающей стандартные показатели TDP в 180 Вт. Конфигурации на базе процессоров Intel® CoreTM i9-13900K или AMD RyzenTM 9 7950X с 128 ГБ памяти DDR5 и быстрыми NVMe-накопителями по 2 ТБ — настоящие «печки». Было изначально понятно, что без жидкостной системы охлаждения (СЖО) в этот раз не обойтись.

Подробности с фото — под катом

Ещё раз о генераторах (и немного о генеративных моделях)

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

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

Читать далее

Как мы обслуживаем 5 млрд карточек в сутки с задержкой меньше 1 мс

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

Меня зовут Ескендиров Мурат, я — архитектор сайта в Ви.Tech, IT-дочке ВсеИнструменты.ру. В этой статье расскажу, как мы строили сервис для выдачи карточек товаров, обрабатывающий до 5 миллиардов запросов в сутки, какие архитектурные решения приняли и с какими проблемами столкнулись в процессе. Расскажу, какие решения сработали, а какие до сих пор остаются нашей головной болью.

Сайт «ВсеИнструменты» имеет почти 20-летнюю историю, и, как это часто бывает, за это время он превратился из маленького сайта с парой сотен товаров на PHP, созданного «на коленке», в гигантский монолит с несколькими миллионами уникальных номенклатур.

Несколько лет назад перед сайтом встали в полный рост проблемы, характерные для многих компаний, выросших из «подпартного» стартапа (первый свой заказ компания «ВсеИнструменты.ру» получила во время лекции в МФТИ, тогда один из основателей для его оформления залез под парту) в многомиллиардную корпорацию:

Читать далее

Безопасность API (аутентификация и авторизация): проблемы, решения, практические рекомендации

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

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

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

Читать далее

Пароли не там, где вы их оставили. Как работает DOM Clickjacking

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

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

В отличие от старого доброго clickjacking с iframe, здесь никто ничего поверх не накладывает. Всё хитрее: страница сама превращается в ловушку. Менеджер паролей видит поле логина и честно вставляет туда пароль. А пользователь (ну то есть мы с вами) жмёт на кнопку и уверен, что всё нормально. На самом деле клик улетает в невидимый элемент, и данные — вместе с ним. Честно говоря, когда я это увидел на демо, стало немного не по себе.

Есть три главные причины, почему расширения ведутся на такой обман. Во‑первых, некоторые из них слишком доверчиво вставляют пароль сразу, без всякого подтверждения. Во‑вторых, они проверяют только домен верхнего уровня. А если у сайта есть хитрый поддомен — привет, уязвимость. И в‑третьих, далеко не все разработчики заморачиваются с CSP, поэтому любой внедрённый скрипт может вытворять с DOM что угодно.

Проверить страницу самому несложно. Открываете DevTools, смотрите на элементы. Если видите кучу строк с opacity:0 или position:absolute; left:-9999px — повод насторожиться. В Chrome во вкладке Layers это особенно хорошо видно. Для любителей автоматизации есть и короткий скрипт на JavaScript, который подсветит такие штуки.

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