Обновить
64K+

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

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

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

Как сократить более половины инфраструктурных расходов? Прерываемые ВМ в Kubernetes

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

Облачные технологии и виртуальные машины привлекают своей гибкостью и способностью к масштабированию. Это отличный вариант для проектов с непредсказуемыми нагрузками. Но не всегда проекту или отдельным сервисам требуются виртуальные мощности, доступные 24/7.

В облаке Selectel есть прерываемые виртуальные машины, которые позволяют экономить до 70% на содержании инфраструктуры. В этой статье мы познакомимся с ними поближе. Рассмотрим, как устроена технология и когда ее можно применять. А также обсудим, как с помощью Kubernetes автоматизировать работу с прерываемыми виртуальными машинами.
Читать дальше →

Прогноз: железные новинки, которые выйдут до конца 2025 года

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

Привет, Хабр! Меня зовут Сергей Ковалёв, я менеджер выделенных серверов в Selectel. Вот уже несколько лет я ежемесячно пишу дайджесты про серверное железо и другие комплектующие, которые мы используем в своих дата-центрах. В начале года я подумал о том, что необходимо систематизировать ожидания от производителей компонентов и сделать прогноз, как будут развиваться технологии в 2025 году. Что из этого получилось — рассказываю под катом.
Читать дальше →

Секреты стройности монолита: подходы по снятию нагрузки с БД

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

Привет! Меня зовут Олег Кретинин, и я разработчик в команде общих компонентов в Яндекс Еде. Сегодня я расскажу о том, как мы смогли успешно снять нагрузку с нашей базы данных, а также уменьшить её размер.

Помимо сервисов, написанных на C++, Go и Python, у нас есть монолит, он же «кора», на PHP, который всё ещё представляет огромную кодовую базу, хранит кучу логики и предоставляет данные по API для 120 сервисов.

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

Читать далее

Perforator: новая система непрерывного профилирования теперь в опенсорсе

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

Привет! Сегодня мы выложили в опенсорс Perforator — систему непрерывного профилирования (continuous profiling), которую используем внутри Яндекса для анализа производительности большинства сервисов.

В Github-репозитории доступен исходный код системы и инфраструктура для развёртывания своей инсталляции Perforator на кластере Kubernetes. Кроме того, Perforator можно использовать на своём компьютере как более простую замену perf record: профили получаются точнее, а оверхед меньше. Исходный код доступен под лицензией MIT (и GPL для eBPF-программ) и запускается под x86-64 Linux.

При помощи Perforator и прошлых подходов к задаче профилирования мы регулярно оптимизируем самые крупные сервисы в Яндексе, например Баннерную крутилку или Поиск, на десятки процентов. Кроме того, Perforator реализует недостающий в опенсорсе компонент профилирования для простой автоматической оптимизации программ с использованием profile-guided optimization. Наши тесты показывают, что использование PGO даёт ускорение около 10% в разных сценариях.

Под катом поговорим про профилирование под Linux, опишем вызовы и сложности, возникающие при профилировании, изучим, как устроен Perforator внутри, и обсудим, как можно использовать полученную систему.

Читать далее

Оцениваем скорость операций с путями в FastAPI

Время на прочтение7 мин
Охват и читатели3.1K
Если вы сейчас разрабатываете новое приложение на Python, высока вероятность, что при этом вы используете FastAPI. В FastAPI заложено множество отличных возможностей, благодаря которым с ним легко начинать работу. Но в FastAPI есть и немало нюансов, на понимание которых требуется время. Мне пришлось особенно попотеть с одним аспектом, а именно — как FastAPI управляет вызовами к маршрутам API через декорированные параметры пути. Давайте подробно об этом поговорим.

Что происходит на веб-сервере


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

Чтобы лучше понимать, что здесь происходит под капотом, давайте сначала реализуем простой веб-сервер. Для этого воспользуемся модулем http.server, который входит в стандартную библиотеку Python.

Нам требуется написать программу, которая слушает порт и принимает HTTP-запросы. А именно: принимает запрос, разбирает маршрут пути, а также разбирает любые данные, прикреплённые к HTTP-вызову. См. также “All I want is to cURL and parse a JSON object”.
Читать дальше →

Бенчмарки JavaScript — это полный хаос

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

Я ненавижу код бенчмаркинга, как и любой другой человек. Гораздо веселее притвориться, что твоё кэширование значения увеличило производительность на 1000%, чем проверять это тестами. Увы, бенчмаркинг JavaScript по-прежнему необходим, особенно потому, что JavaScript используется (когда не должен?) во всё более чувствительных к производительности приложениях. К сожалению, из-за множества базовых архитектурных решений языка, JavaScript никак не упрощает выполнение бенчмаркинга.

Читать далее

Как избегать типичных ошибок при встраивании ассемблерных вставок: подборка правил

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

Ассемблерные вставки, используемые компиляторами GCC и Clang, опосредуют взаимодействие высокоуровневых и низкоуровневых языков программирования. Это тонкая и коварная штука. Многие попадают в расставленные здесь капканы, зачастую совершенно неожиданно для себя. В сущности, ключевое слово asm можно перевести на C и C++ как unsafe. Почти в любых руководствах по встроенному ассемблеру, в том числе, и на ужасной странице ibilio, которая десятилетиями попадает в самый верх поисковой выдачи, неисправимо фигурируют фундаментальные серьёзные ошибки, а примеры в большинстве своём некорректны. Наиболее опасно, что эти примеры обычно приводят к ожидаемым результатам! Ситуация плачевная. Эта статья — не руководство, а подборка элементарных правил, которые помогут вам избежать самых распространённых ошибок либо отловить их при ревью кода.

Здесь мы сосредоточимся сугубо на расширенном, а не на базовом ассемблере, а правила в этих версиях отличаются. На первом пишут любые инструкции, относящиеся к встроенному ассемблеру, с ограничениями или затираемыми. То есть, имеем токен : в обрамлении asm. Базовый ассемблер — тупой инструмент, который используется сравнительно нечасто, в основном в самом верху файла с кодом или в “голых” функциях. Поэтому злоупотребления базовым ассемблером на практике маловероятны.

Читать далее

Дешевые облака, или зачем настраивать FinOps

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

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

Зима пришла стремительно, и принесла с собой много новых идей, ключевых решений, а самое главное, пересмотр уже устоявшихся концепций и парадигм. Одной из таких идей на первый план вышла FinOps (Financial Operations), практика по управлению расходами, применительно к облачным технологиям. Этот подход ставит целью проведение глубокого анализа облачных расходов и работу с реализацией продуктовых задач компаний. Он помогает видеть комплексно процессы компании и объединять усилия команд, для оптимизации операционных процессов. Зачем это нужно? Цифры подскажут: 

Читать далее

Использование clickhouse в разных средах

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

Всем привет. Данная статья не более чем эксперимент. Тем более, что сейчас есть тренд на запуск баз данных в контейнерах т.к. это действительно производительнее и нет лишнего оверхеда в сравнении использования технологий, которые используют виртуализацию. Во многих статьях есть поле манипуляций — это выводы на основе одного бенчмарка или когда надо доказать и обосновать, что принятое решение самое лучшее. В рамках статьи будет проверка работы clickhouse запускаемый в qemu‑kvm, firecracker, containerd.

Читать далее

Миф о RAM

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

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

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

groups = [[] for _ in range(n_groups)]

for element in elements:

groups[element.group].append(element)

Он и в самом деле линеен (то есть асимптотически оптимален), и мы всё равно должны выполнять доступ к произвольным индексам, так что кэш здесь нам ни в чём бы не помог.

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

Читать далее

Моя рецензия на «кабанчика» Мартина Клеппмана и главная идея проектирования быстрорастущих баз данных

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

Здравствуйте. Меня зовут Олег Юрченко.

Здесь моя рецензия на эту книгу: «Клеппман М. Высоконагруженные приложения. Программирование, масштабирование, поддержка. — СПб.: Питер, 2018.»

Я видел много рекомендаций прочитать это творение, а начав читать, решил написать рецензию.

Содержание книги соответствует второй части оригинального названия «Designing Data‑Intensive Applications. THE BIG IDEAS BEHIND RELIABLE, SCALABLE, AND MAINTAINABLE SYSTEMS».

Можно утверждать, что многие «THE BIG IDEAS BEHIND...» рассмотрены с подробной библиографией. А вот название перевода вводит в заблуждение каждым словом. В книге только идеи, а не это вот всё.

Но главной идеи в книге нет. Мартин Клеппман не знает про основной способ устранения зависимости нагрузки на сервер баз данных от размера базы данных, главной проблемы с быстрорастущими базами данных. Эта идея важнее всего написанного в этой книге, я её объясню с примером из моей практики.

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

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

Сначала про способ решения проблемы быстрорастущих данных, а потом мои комментарии по трём главам книги. 

Читать далее

Как мы настроили планировщик, чтобы разогнать виртуальные серверы

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

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

Читать далее

Как и зачем мы забенчили производительность сетевого стека

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

Привет, Хабр! На связи Наташа, UX-исследователь в Selectel, с технической темой на дизайнерском. Последние полгода я исследую опыт взаимодействия с серверной операционной системой. В ходе исследований мы увидели спрос на повышение производительности сетевого стека и провели некоторые эксперименты, чтобы понять реализуемость и целесообразность внедрения технологий обхода ядра. Это история о том, как мы разгоняли и без того шустрый Nginx и тестировали результат внедрения технологии kernel bypass.
Читать дальше →

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

Как устроены очереди: визуальное объяснение

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее