Обновить
128K+

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

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

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

Обмен сообщениями в режиме реального времени: опыт Slack

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


А вы знали, что земные станции передают сигнал спутникам, расположенным на геостационарной орбите на высоте 35 786 метров над экватором, и что ответные сигналы накрывают целое полушарие? Сегодня спутниковые радиостанции обслуживают сотни каналов. Если вы только не работаете на секретном военном объекте или глубоко под землёй, то спутниковый радиосигнал к вашим услугам найдётся практически везде.

Платформа Slack подобна спутникам в том, что на ней ежедневно рассылаются миллионы сообщений по миллионам каналов — всё это в режиме реального времени. Если рассмотреть трафик типичного рабочего дня, оказывается, что большинство пользователей остаются онлайн с 9.00 по 17.00 по местному времени, причём, пиковые нагрузки приходятся на период с 11.00 до 14.00, с небольшим спадом в районе обеденного перерыва. Хотя, в разных регионах рабочее время распределено примерно схоже, на следующем графике наблюдаются два пика. Очевидно, что «час пик» совпадает не везде. В некоторых регионах он приходится на послеполуденные часы, в других наступает до полудня. Цветные линии на следующей диаграмме обозначают разные регионы.
Читать дальше →

Какие фичи делают cloud management-платформу более зрелой

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

Привет! На связи Дима Гоголев. Я развиваю CMP-платформу Cloudlink в Orion soft, и за последний год у нас произошли довольно крупные изменения. Я уже писал о том, что такое CMP-платформы и как они могут сэкономить время практически всем, кто работает с системами виртуализации, от админов и системных инженеров до руководства ИТ-департаментов. А в этой статье хочу рассказать, какие фичи мы добавляем в платформу и зачем они нужны. 

Если вы еще не знакомы с CMP-платформами, эта статья поможет лучше понять, какой функциональностью они должны обладать и какие задачи закрывать. А если вы уже изучали CMP-решения, то составите представление о том, какие фичи делают их более зрелыми с точки зрения пользователя.

Читать далее

«Подписка на пончики», или Как получить облачные ресурсы со скидкой

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

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

В этой статье мы разберем преимущества и риски резервного потребления (CVoS) от Yandex Cloud и подскажем, как FinOps-практики могут помочь максимально эффективно использовать этот инструмент.

Читать далее

Архитектура национального видеохостинга: путь RUTUBE к 10 Тбит/с с использованием своей CDN

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

За полгода с июля 2024 года большинство аудиторных и технических показателей RUTUBE выросло в разы: количество ежедневных пользователей выросло почти в 4 раза; количество видео, ежедневно загружаемых на видеохостинг — в 3 раза, с 330 тыс. до 1 млн единиц контента; CDN-трафик — в 4 раза и в пиковые часы превышает 7 Тбит/с. Как архитектура сервиса показала себя в условиях продолжительного «нагрузочного тестирования» и как команда переживала такой рост нагрузки, читайте в этой статье.

Читать далее

Сортируем сотни млн строк в разы быстрее библиотечных алгоритмов. А не замахнуться ли нам на ммм… на O(n)?

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

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

Кто-то в личное время покоряет Эверест, кто-то стрит-драйвит, кто-то на нижней Волге ловит спиннингом судаков и жерехов (я тоже, кстати, раз в году), кто-то разводит мадагаскарских шипящих тараканов, а кто-то развлекает себя эзотерикой. А я вот внерабочее время развлекаю себя тем, что напрягаю свой мозг математическими и алгоритмическими проблемами. Придумываю что-нибудь эдакое, необычное. Жаль, что за эту деятельность не платят. Говорят, такое напряжение мозга поможет в старости спастись от болезни Альцгеймера. Во всяком случае, весьма на это надеюсь.

И, рассуждая совсем о другой проблеме, но где имеет место быть сортировка большого количества объектов, в плане алгоритма сортировки объектов, меня осенило. Быстренько проверил кодом — ого, работает! Рассчитываю, что вам понравится.

Читать далее

PostgreSQL Connection Pooling: Наш опыт и с чем его едят

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

Как обеспечить высокую производительность PostgreSQL и эффективно управлять соединениями? В этой статье мы разберёмся, как правильно настроить пул соединений, какие преимущества он даёт и как избежать распространённых ошибок. Делимся нашим опытом перехода с MongoDB на PostgreSQL и работы с пулом в Go с использованием pgx.

Читать далее

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

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

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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

Привет! Сегодня мы выложили в опенсорс 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 мин
Охват и читатели3K
Если вы сейчас разрабатываете новое приложение на 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.2K

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

Читать далее

Миф о RAM

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

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

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

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

for element in elements:

groups[element.group].append(element)

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

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

Читать далее

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

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

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