Обновить
128K+

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

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

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

Катастрофическое падение производительности из-за hyperthreading

Время на прочтение4 мин
Охват и читатели46K

Недавно я писал статью - что такое 50% cpu? На системах с hyperthreading 50% cpu по метрикам означает, что большая часть ресурсов сервера уже использована. То есть cpu>50% - это уже "желтая зона", и мы ожидаем замедление всего, чего можно. Но я никогда не думал до экспериментов, что падение может быть столь катастрофическим.

Для экспериментов я использую MSSQL. Если вы не связаны с базами, прочитайте первую часть по диагонали до выводов.

Читать далее

Как правильно выбрать хостинг-провайдера в 2025 году: критерии, которые имеют значение

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

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

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

Читать далее

Использование Redis в Go

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

Redis — хранилище из семейства нереляционных (NoSQL) баз данных. Redis является очень быстрым хранилищем данных благодаря своей архитектуре in-memory. Он идеально подходит для задач, требующих быстрого доступа к данным, таких как кэширование, очереди сообщений, сессионная информация и многое другое. Go также известен своей высокой производительностью за счет компиляции в машинный код и эффективного управления памятью.

Читать далее

Управление ядрами ЦПУ при обработке сетевого трафика

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

Привет, Хабр! Не так давно столкнулся с задачей разработки альтернативного решения для ограничения сетевого трафика. Такая задача возникла в рамках разработки системы лицензирования для продукта класса NGFW (Next Generation Firewall). Используя такую систему ограничений можно было бы предусмотреть несколько видов лицензий на коммерческое использование продукта, где в зависимости от уровня приобретенной лицензии можно было бы предоставлять полную, либо урезанную функциональность продукта в части его производительности. В этой статье хочу поделиться опытом решения данной задачи.

Читать далее

Оптимизируем использование памяти для поиска IP-адресов

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

Около трёх лет у меня возникали проблемы с моим обучающим сайтом Mess With DNS: периодически у него заканчивалась память и он перезагружался по OOM.

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

Путь был сложным, и в процессе я многому научилась.

Читать далее

Как мы переехали с StatsD на Prometheus всего за месяц

Время на прочтение7 мин
Охват и читатели2.9K

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

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

Читать далее

Что такое 50% cpu?

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

Если у вас на машине стрелочка показывает, что у вас осталась половина бака, то у вас точно осталась половина бака? На самом деле больше, так как современные машины врут и топлива еще немного есть, даже когда стрелка на нуле - забота об альтернативно одаренных водителях. А если сервер показывает 50% cpu, то сколько ресурсов у нас осталось?

Для многих ответ ясен, и это не 50%. Поэтому извините, если многие вещи будут вам очевидны. А вот для менеджеров, например, которые планируют ресурсы, это может быть открытием.

Читать далее

Атаки на понижение версии SMTP и MTA-STS

Время на прочтение9 мин
Охват и читатели2.9K

Когда был создан SMTP, он работал, передавая данный в открытом виде, поскольку тогда мы ещё не разработали решение для безопасной передачи данных, то, что мы называем сейчас «безопасность транспортного уровня» (transport layer security, TLS). Когда TLS наконец-то был готов, нам потребовалось придумать способ поэтапного внедрения TLS. Был создан STARTTLS, предлагающий шифрование «по возможности». По сути, почтовый сервер отправителя мог спросить почтовый сервер получателя: «Поддерживашь ли ты шифрование?», и, если ответ был положительным, устанавливалось TLS-соединение с использованием сертификата, предоставленного сервером. Если нет, использовалось SMTP-соединение с передачей данных в открытом виде.

Любой, кто знаком с темой сетевой безопасности, увидит здесь проблему. Активно действующий злоумышленник, осуществляющий атаку «атакующий посередине» (attacker-in-the-middle, AitM), может подставить свой собственный ответ, указывая, что шифрование не поддерживается, и обманом заставить отправителя использовать открытый текст, что позволит злоумышленнику перехватывать сообщения. Это классическая атака понижения версии.

Читать про MTA-STS

Как небольшой «тюнинг» Talos Linux увеличил производительность NVMe SSD в 2.5 раза

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

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

Мы рассмотрим несколько примитивных настроек Linux, которые могут повысить производительность NVMe SSD дисков в разы. Под катом много интересных подробностей, так что скучно не будет.

Читать далее

Насколько быстры B-деревья по сравнению с хэш-таблицами?

Время на прочтение12 мин
Охват и читатели20K

Во многих «скриптовых» языках для стандартных ассоциативных структур данных используется хэш-таблица (hashmap) (объекты Javascript, словари Python и так далее). Хэш-таблицы обладают множеством раздражающих свойств:

  • Уязвимость к hash flooding.
  • В случае защиты от hash flooding случайными seed порядок итераций становится недетерминированным, что мешает при тестировании снэпшотов, создании воспроизводимых сборок и так далее.
  • При вставке может требоваться рехэширование, что в наихудших случаях создаёт для больших хэш-таблиц ужасные задержки.
  • Многократное увеличение больших распределений памяти без фрагментации сложно реализовать в целевых платформах wasm, потому что трюки с виртуальной памятью недоступны, а для страниц невозможно выполнить unmapping.
  • Векторные команды в wasm ограничены, а команды AES отсутствуют. Это делает многие хэш-функции ещё более медленными.

Упорядоченные структуры данных наподобие B-деревьев не имеют этих недостатков. Обычно они медленнее хэш-таблиц, но меня удивило, насколько разнятся ожидания людей относительно их скорости.
Читать дальше →

Как сделать React Server Components в Electron с помощью Next.js и без открытых портов

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

Статья про то как заставить работать React Server Components внутри Electron приложения с помощью Next.js при этом не запуская локальный сервер и не открывая порты. С возможностью публикации стандартными инструментами. А также исследование зачем все это надо.

Читать далее

Как интегрировать синхронный код в асинхронный. Инструкция

Время на прочтение8 мин
Охват и читатели8.2K

Когда создаешь новое приложение, особенно если оно должно быстро обрабатывать данные, использование библиотеки asyncio — это хороший выбор. Она позволяет работать с неблокирующими библиотеками, asyncpg и aiohttp. Однако чаще всего программисты работают с уже существующим кодом, который использует блокирующие библиотеки. Поэтому большую часть времени может занять адаптация и модернизация старого кода, так как асинхронный код не дружит с синхронным (им мешает GIL).

GIL (Global Interpreter Lock) — это механизм, который предотвращает одновременное выполнение нескольких потоков в Python. Это означает, что даже если у вас есть многопоточное приложение, только один поток может выполнять Python-код в любой момент времени. Поэтому можно запускать дополнительный поток для выполнения операции ввода-вывода.

Читать далее

Работа с большими файлами в Python

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

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

Читать далее

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

Одна платформа, чтобы править всеми: как CMP упрощают работу с системами виртуализации

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

Привет, Хабр! Меня зовут Дмитрий Гоголев, я менеджер по развитию CMP-платформы Cloudlink. Участвую в интеграции нашего ПО у заказчиков и разработке новых фич.

Мы в Orion soft каждый день общаемся с компаниями, которые ищут замену привычным решениям для виртуализации. Однако далеко не всегда (а, точнее, почти никогда) переход на новое происходит легко и быстро. Решения класса Cloud Management Platform (CMP) упрощают этот процесс. Они дают возможность управлять разнородной облачной инфраструктурой через единый интерфейс. 

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

Читать далее

RLS в действии: как решить вопросы доступа в BI за 5 минут

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

Когда бизнес-аналитика внедряется как корпоративный инструмент, ее пользователями становятся сотни или даже тысячи людей из разных подразделений. Кроме этого нередко результаты прогнозов, расчетов и визуализаций все чаще выкладывают прямо на порталы или открывают к ним доступ без авторизации, чтобы сторонние наблюдатели могли получить важную для себя информацию. Все это порождает проблемы конфиденциальности, которые раньше решались с помощью дублирования данных и создания нескольких контуров BI. Но, как говорится, «есть способ лучше»! Сегодня мы поговорим про механизм Row Level Security (RLS), который позволяет и BI предложить сразу всем, и доступ разграничить, и не плодить личные сущности. Ну а подопытным, которому мы будем ограничивать доступ в наших примерах, как вы уже догадались, будет Александр Сергеевич.

Читать далее

Анатомия техдолга. Излечим ли пациент?

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

Привет, Хабр! Меня зовут Евгений Старков, и я, как и вы, часто сталкиваюсь с техдолгом.

Пришло время рассказать, как я с ним справляюсь! Проблема не нова и встречается в любой компании, связанной с разработкой. Мне, по большей части, техдолг достался «в наследство». Первой задачей в Тензоре было разделение и рефакторинг большой части кодовой базы своей группы. Там попадались и суперклассы, и файлы с количеством строк, перевалившем далеко за 1000, и именование переменных по типу a, b, c.

Читать далее

Как я ускорила парсинг строк в serde_json на 20%

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

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

serde — основной фреймворк для сериализации и десериализации в Rust. Его используют как крейт по умолчанию во всей экосистеме. serde_json — это официальный serde-миксин для JSON, так что каждый раз, когда нужно что-то парсить, люди обращаются именно к нему. Конечно, есть и другие библиотеки, специализующиеся на парсинге JSON, например simd-json, но популярность у них, мягко говоря, удручающая. serde_json значительно популярнее: на момент написания от него зависят аж целых 26916 крейта, а от simd-json — всего 66.

Это делает serde_json хорошей мишенью (не как у Jia Tan) для оптимизаций. Велик шанс того, что многим из тысяч пользователей переход на simd-json позволил бы добиться ускорения, но, пока они этого не делают, более мелкие оптимизации — лучше, чем совсем ничего, и такие улучшения — глобальный выигрыш для экосистемы.

Читать далее

Два потока, одно ядро: как устроена одновременная многопоточность

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

Одновременная многопоточность (Simultaneous multithreading, SMT) — это функция, позволяющая процессору одновременно обрабатывать команды из двух разных потоков. Но задавались ли вы когда-нибудь вопросом, как это работает? Как процессор отслеживает два потока и распределяет ресурсы между ними?

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

Примечание: основная часть изложенного в статье относится к реализации SMT компании Intel, также называемой гипертредингом (hyper-threading). Она основана на научной статье компании, опубликованной в 2002 году.
Читать дальше →

Укрощение ClickHouse: почему ДанКо делает Visiology намного быстрее

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

Привет, Хабр! Сегодня мы поговорим о том, почему BI-платформам нужен движок, какие сложности создает ClickHouse для аналитиков, когда речь действительно заходит о больших данных, зачем нужно оптимизировать SQL и о многих других вещах, которые часто остаются «за горизонтом» в дискуссиях о BI и хранении данных. Говоря другими словами, я хочу рассказать о том, как мы разрабатывали ДанКо — новый движок, который лежит сегодня в основе Visiology 3, а главное — каким образом ДанКо позволяет достичь высокой производительности в аналитических задачах (в некоторых случаях показывая ускорение вплоть до х100)! Эта статья будет полезна тем, кто еще не сталкивался с задачей организации хранения аналитических данных компании, а также интересна тем, кто как раз, наоборот, уже делал это.

Читать далее

Оптимизация в Python c Kubernetes: кэширование и CDN

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

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

Очень важно не только писать хороший код, но и использовать все возможности инфраструктуры на максимум. Именно с этой целью в этой статье рассмотрим, как правильно использовать инструменты кэширования внутри Kubernetes и как настроить CDN для максимума производительности Python-приложения.

Читать далее