Обновить
64K+

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

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

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

Визуализатор сборок в режиме реального времени

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

Под катом – анимация, демонстрирующая сборку приложения для macOS в режиме реального времени:

Я расскажу, как она получилась, но для начала обрисую контекст этого проекта.

Компиляция конкретного софта может быть очень длительной просто потому, что в этой программе очень много кода — как, например, в проекте LLVM. Но бывает и так, что сборка идёт медленно по глупым и вполне устранимым причинам. Подозреваю, что большинство сборок просто тормозят из-за ерунды, но проверить это мне пока не удавалось. Поэтому я разработал кроссплатформенный инструмент для визуализации сборок (пока он существует в приватной бета-версии, ссылка в конце статьи). Он работает с любой системой сборки и с любым языком программирования (а не только C/C++/Rust).

Читать далее

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

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

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

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

Читать далее

Как я поймал сетевика на передаче пароля в SSH и чем это закончилось

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

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

Как всё началось

Обычный рабочий день. Я проверял список процессов на сервере (ps aux) и вдруг вижу:

```bash

sshpass ‑p 'Qwerty123' ssh admin@10.0.5.21

Пароль. В открытом виде. В командной строке.

Подошёл к коллеге...

Читать далее

Балансировка нагрузки для HTTP(S) в Angie

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

Балансировка нагрузки в веб‑сервисах решает сразу две задачи: масштабирование и отказоустойчивость. В этой статье поговорим о возможностях балансировки нагрузки для HTTP(S) протокола в Angie.

Теоретическая основа, описание алгоритмов уже описана разработчиком Angie, поэтому рекомендую обращаться к статьям с обзором балансировки и алгоритмам балансировки в Angie. Здесь же разберём практическую сторону настройки балансировки.

Читать далее

Мы научились переносить базу данных с Oracle на Postgres Pro со скоростью 41 ТБ/сутки

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

41 ТБ/сутки по маршруту Oracle → Postgres Pro без остановки исходной системы — это не теория, а цифры последних тестов. Мы разложили миграцию на три этапа: быструю начальную загрузку, CDC из redo-логов и валидацию, и собрали их в ProGate. Как устроен конвейер, почему Go и где прячутся узкие места — расскажем в статье.

Читать далее

Как разработать CSI-драйвер с поддержкой Swordfish API и запустить его без железа

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

Контейнерные приложения все чаще требуют постоянного хранилища, будь то базы данных, кэш или файловые серверы. Но Kubernetes по умолчанию не «умеет» работать напрямую с системами хранения данных, в этом ему помогает CSI (Container Storage Interface). А если хочется управлять хранилищем через единый стандарт и без привязки к конкретному вендору, на помощь приходит спецификация Swordfish.

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

Читать далее

Простая минификация Json тел запросов / ответов с Kotlin Serialization

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

Привет!

Недавно в рамках одного из проектов на стеке KMP, Ktor и Kotlin Serialization мы с командой решили провести эксперимент и определить возможность и целесобразность минификации тел запросов / ответов на Json.

Да, мы знаем про GraphQL, Protobuf и др., но в нашем случае имел место необузданный интерес наколхозить такое решение. И при всей его наивности удалось сократить средний размер итоговых джсонов (после всех внутренних оптимизаций) на 15-20%.

Читать далее

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

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

Все говорили о микросервисах. Гибкость. Масштабируемость. Независимые команды. Звучало как мечта. Многие компании бросились распиливать свои монолиты. Разработка действительно ускорилась. Отдельные компоненты стало проще обновлять и разворачивать.

А потом сервисам понадобилось общаться. И мечта превратилась в сложную, многомерную головоломку.

Читать далее

Выжимаем максимум из Postgres на RTABench Q0

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

Время от времени приходится слышать мнение, что Postgres никуда не годится для решения задач аналитики. При при этом, в качестве аргументации приводятся в пример результаты тестирования на TPC‑H или ClickBench. Что ж, когда стоит простая задача перебрать 100 млн строк на диске и посчитать набор агрегатов над ними — формат хранения и распараллеливания действительно сильно ограничивают нас в возможностях оптимизации СУБД. Однако когда запросы высоко селективны, им по факту требуется не так много строк таблицы и фокус внимания смещается на порядок JOINов, кэширование промежуточных результатов и минимизацию операций сортировки. В этом случае Postgres, имеющий весьма широкий выбор различных стратегий выполнения запроса, может получить преимущество...

Читать далее

Оптимизация производительности серверов на базе Epyc

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

Уже несколько лет компания AMD предлагает совершенно атомные, а точнее ядерные, а ещё точнее суперМНОГОЯДЕРНЫЕ процессоры Epyc. В этой статье мы рассмотрим основные «бутылочные горлышки», настройки биос и другие вещи, которые мешают раскрыть потенциал этих процессоров.

Тонкости настройки

Method Handles быстрее рефлексии (иногда)

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

Как Java поддерживает динамические вызовы? От медленной рефлексии до оптимизированных MethodHandle и invokedynamic — изучаем эволюцию динамизма в JVM. Разбираем внутреннее устройство MethodHandle и какие роли играют CallSite и invokedynamic.

Читать далее

Меньше нагрузки — больше запросов: искусство кеширования API

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

Привет! Меня зовут Дима, я Backend-разработчик в Doubletapp. В этой статье расскажу про кеширование API (на примере Django Ninja): чем оно полезно бизнесу и когда его стоит внедрять.

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

А теперь представьте: вы можете обрабатывать одновременно в несколько раз больше запросов пользователей без расширения ресурсов и без переписывания ядра продукта. Как? С помощью кеширования — подхода, который «запоминает» одинаковые запросы и снижает нагрузку на сервер.

Содержание

Серверный кеш (хранилища «ключ-значение»)
Клиентский кеш (браузер, прокси)
Условные HTTP‑запросы
Промежуточное кеширование (CDN, reverse proxy)

Читать далее

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

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

Ваш проект взлетел. Первые пользователи превратились в тысячи. Тысячи стали десятками тысяч. Метрики в дашбордах рисуют красивую кривую, устремленную вверх. Но есть и другие кривые, которые ползут вверх с не меньшей скоростью. Время ответа сервера. Количество ошибок 502 и 504.

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

Читать далее

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

Когда JOIN тянет ко дну: как одно изменение ускорило запрос в 75 раз

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

TL;DR Иногда «убить» самый тяжёлый JOIN — проще, чем кажется. Достаточно вынести агрегат в коррелированный под-запрос и дать движку опереться на индекс.

Читать далее

Struct IEnumerator

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

Как-то было свободных полчаса перед встречей. Ни туда, ни сюда. Дай, думаю, сниму трейс с приложения. Вдруг что-то интересное найдётся.

А в качестве бонуса: использование var может привести к багам? Узнаем в самом конце ;)

Читать далее

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

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

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

Индекс — это как указатель в толстенном справочнике. Без него, чтобы найти нужный термин, вы обречены листать страницу за страницей. С ним — вы мгновенно открываете нужный раздел. Но что, если указатель сам размером с полкниги? Или ведет не туда? Такой помощник только вредит. С индексами в БД всё то же самое. Грамотная стратегия индексирования — это полет. Ошибочная — это бег в мешках по болоту.

Читать далее

Как уплотнялись серверы линейки ChipCore

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

Привет, Хабр! Меня зовут Виталий, я дежурный системный инженер дата-центра в Selectel. Давным‑давно мы рассказывали про собственную разработку корпуса. С тех пор прошло немало времени, линейка серверов ChipCore значительно эволюционировала.

В прошлой статье речь шла о корпусах 1  и 1.5  ревизии. Расположение серверов на обычном складском стеллаже не позволяло полноценно охлаждать платформы. Единственный выход был — модернизация и монтаж в серверные стойки. В этой статье расскажу, как мы пришли к корпусам 2 и 3 ревизии.
Читать дальше →

Как работает fillfactor и как его настраивать вручную в PostgreSQL

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

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

Сегодня рассмотрим, как работает fillfactor в PostgreSQL — тот самый параметр, который никто не трогает, пока таблицы не начинают раздуваться как на дрожжах. Разберём, зачем он нужен, что происходит при UPDATE, когда стоит менять его вручную и как не наломать дров.

Читать далее

«Облачные хранилища: как выбрать идеальное решение для бизнеса» (2 часть)

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

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

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

Читать далее

Тестирование производительности c PHPBench: что и как?

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

PHPBench - это, кажется, крайне не популярный фреймворк для тестирования производительности кода на PHP. По крайней мере за 18 лет он мне ни разу нигде не встретился, а услышал об нём примерно года назад. Фреймворк PHPUnit-подобный, где бенчмарки, как и тесты из PHPUnit объединяются в классы, группы и т.д. и т.п. Чтобы много не болтать, давайте напишем чуть кода и отбенчмаркаем его.

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

Читать далее