Pull to refresh

Отдаём статику nginx'ом

Reading time 2 min
Views 4.1K
High performance *
Начиная с версии 0.8.11 в nginx появилась новая возможность для раздачи статики — использование AIO (Asyncronous Input-Output — неблокирующий ввод-вывод) для Linux и FreeBSD.

Чем это событие знаменательно? До этого момента nginx использовал неблокирующий режим только при работе с сетью — любая работа с файлами блокировала рабочий процесс. К чему это приводило? Если у вас есть много разного контента, который не весь находится в кэше ОС (фотохостинг, etc) — то рано или поздно все 50, 150, 200 процессов будут ждать дисковые операции и не смогут обслужить нового клиента — даже если нужный ему контент можно отдать из файлового кэша или запросить с бэкенда.

Как с этим боролись раньше?
Total votes 42: ↑38 and ↓4 +34
Comments 18

Файловый AIO в nginx

Reading time 2 min
Views 16K
Nginx *
В последних версиях nginx (начиная с 0.8.11) появилась поддержка асинхронного файлового ввода-вывода. Потенциально, эта фича способна устранить одно из узких мест веб-сервера — полную блокировку процесса при файловом IO.

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

Раньше, эта проблема решалась увеличением количества процессов-воркеров. Теперь есть альтернативное решение. :) Однако, перед тем, как включать файловый AIO, стоит учесть ряд нюансов.

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

Во-вторых, файловый AIO работает только на FreeBSD 4.3 и выше, либо в Linux, с версии ядра 2.6.22 и выше.

В-третьих, AIO во FreeBSD имеет смысл включать только в версиях FreeBSD-6.4 STABLE, FreeBSD 7, или новее. В более ранних версиях, при включении AIO, сетевая подсистема начинает использовать Giant Lock, что означает невозможность одновременного выполнения какого-то другого системного вызова. Другими словами, почти никаких выгод от асинхронности мы не получим.

Ну и наконец, при использовании AIO под Linux надо также включать directio. Также, если я всё понял правильно, в линукс пока невозможно использовать AIO для подгрузки данных для sendfile, поскольку включение directio отключит использование sendfile автоматически.

Если вы по-прежнему считаете, что оно вам нужно, AIO включается очень просто. Для Linux, фрагмент конфига будет выглядеть примерно так:

aio on; # включаем AIO
directio 512; # включаем O_DIRECT для файлов, размером 512 байт или больше
output_buffers 128 512k; # зная размер и примерное количество одновременно отдаваемых файлов, можно подобрать более подходящие значения


Ссылки:
Описание AIO в документации на Nginx
Changelog
Total votes 37: ↑34 and ↓3 +31
Comments 63

Еще раз об архитектуре сетевых демонов

Reading time 13 min
Views 17K
High performance *
Во многих статьях, в том числе на хабре, упоминаются и даже описываются разные способы построения архитектуры сетевых сервисов (демонов). При этом мало у кого из авторов есть реальный опыт создания и оптимизации демонов, работающих с десятками тысяч одновременных соединений и/или гигабитным трафиком.

Так как большинство авторов не удосуживается хотя бы залезть в документацию, то обычно в таких статьях вся информация базируется на неких слухах и пересказах слухов. Эти слухи бродят по сети и поражают википедию, хабрахабр и другие уважаемые ресурсы. В результате получаются опусы вроде "Вы наверное шутите, мистер Дал, или почему Node.js" (пунктуация автора сохранена): она, в основном, верная по сути, но изобилует неточностями, содержит ряд фактических ошибок и изображает предмет с какого-то непонятного ракурса.

Мне было сложно пройти мимо статьи, изобилующей фразами вроде «эффективные реализации polling'а на сегодняшний день имеются лишь в *nix-системах» (как будто poll() есть где-то, кроме некоторых *nix). Этот пост начинался как комментарий, разъясняющий уважаемому inikulin ошибки в его статье. В процессе написания оказалось, что проще изложить предмет с самого начала, что я собственно и делаю отдельным постом.
В моем очерке нет срыва покровов или каких-то неизвестных трюков, здесь просто описываются преимущества и недостатки разных подходов человеком, который проверял, как всё это работает на практике в разных операционных системах.
Для желающих просветиться — добро пожаловать под кат.
Читать дальше →
Total votes 161: ↑159 and ↓2 +157
Comments 53

Мультиплексированный ввод/вывод

Reading time 7 min
Views 25K
Website development *
Sandbox

Preface


В данной статье я бы хотел затронуть важные аспекты программирования приложений для web, которые должны обслуживать множество пользователей одновременно, а значит мы будем разбирать уже всем надоевший асинхронный ввод/вывод, мультиплексирование и т.п.
Преследуются следующие цели:
  1. Систематизировать материал по данному направлению, обсудить некоторые несостыковки в терминологии
  2. Полностью разобрать фундамент, на котором строятся приложения для обслуживания множество клиентов
  3. Выработать стратегию для будущего приложения на python которое должно обслуживать множество клиентов
  4. Создать четкую картину в голове (недаром говорят понимаешь — когда можешь объяснить)


Читать дальше →
Total votes 53: ↑50 and ↓3 +47
Comments 17

Асинхронное программирование, коллбеки и использование process.nextTick()

Reading time 7 min
Views 19K
Node.JS *
Несмотря на то, что большинство из изучающих Node.js в какой-то мере знают JavaScript и имеют опыт использования его в контексте браузеров, при обсуждении практических моментов многие встречаются с трудностями в понимании работы стандартной библиотеки и механизмов обеспечения асинхронного выполнения кода, содержащего множество вложенных коллбеков. Также часто возникает недопонимание, Я постараюсь вкратце описать порядок работы event loop в Node.js и рассказать, на какие моменты стоит обратить внимание при написании качественного асинхронного кода. Думаю, что статья будет полезна и тем, кто занимается написанием производительных фреймворков для браузеров.

Читать дальше →
Total votes 44: ↑40 and ↓4 +36
Comments 50

All inclusive

Reading time 10 min
Views 41K
Intel corporate blog
   Все больше пользователей стараются избавиться от громоздких системных блоков – те же ноутбуки становятся все более популярными, ввиду компактных размеров и достаточной для большинства задач производительности.

image

   Но, как говорится, не ноутбуками едиными сыт человек – есть помимо «книжек» еще кое-что интересное. Подумали о планшетах? Да нет, сколько ж можно о них… давайте лучше поговорим о моноблоках. С меня – обзор (с разбором!) нового устройства от Foxconn, с вас – размышлизмы по поводу данного класса устройств, сценарии применения и другие идеи по избавлению от «пылесборников» )
Читать дальше →
Total votes 156: ↑106 and ↓50 +56
Comments 108

All-in-One PC: один за всех

Reading time 4 min
Views 29K
Intel corporate blog

Настольные ПК по меркам быстро меняющегося цифрового мира принадлежат к разряду динозавров: со времени своего появления в середине 80-х они не претерпели каких-либо принципиальных изменений. Подобная замшелость вызывает в отрасли определенное беспокойство, ведь необходимо сделать ставку на правильный тренд, верный вектор движения – когда оно начнется. Ну или, в идеале, создать этот вектор самим, определив, каким должен быть современный персональный компьютер. Одним из возможных и, по мнению Intel, весьма перспективных вариантов, активно продвигаемых уже сейчас, является AIO – All-in-One PC. О нем и пойдет речь в данном посте.
Читать дальше →
Total votes 24: ↑15 and ↓9 +6
Comments 23

Видеообзор моноблока (планшета) ASUS Transformer P1801

Reading time 1 min
Views 9.5K
НОТИК corporate blog


ASUS Transformer AiO P1801 — новый гибрид планшета и моноблока от ASUS, вернее — два отдельных устройства, которые могут использоваться как вместе (моноблок), так и по отдельности (планшет и системный блок). Основной блок работает на десктопных процессорах Intel Core третьего поколения и операционной системе Windows 8. За графику отвечает видеокарта Nvidia GeForce GT730M. Объем оперативной памяти составляет от 4 до 8 Гб. В моноблок устанавливаются жесткие диски емкостью от 1 до 2 Тб.
Читать дальше →
Total votes 15: ↑9 and ↓6 +3
Comments 12

Видеообзор моноблока (планшета) Dell XPS 18

Reading time 1 min
Views 7.6K
НОТИК corporate blog


Dell XPS 18 — новый моноблок-планшет из семейства Dell XPS, который может выступать в разных качествах. Dell XPS 18 имеет великолепный 18,4-дюймовый сенсорный IPS FullHD-дисплей (1920х1080). Аппаратная основа Dell XPS 18 — низковольтные процессоры Intel Core третьего поколения (i5 или i7) или Pentium Dual Core, поддерживаемые в работе от 4 до 8 ГБ оперативной памяти. Для хранения данных предназначены HDD-накопители (320 или 500 ГБ) в пару к которым устанавливается SSD на 32 Гб, используемый для кэширования.

Моноблок имеет две складывающиеся ножки и комплектуется стойкой-держателем. Это позволяет пользователю регулировать угол наклона экрана и высоту подъема над поверхностью стола.
Читать дальше →
Total votes 9: ↑7 and ↓2 +5
Comments 0

AIO Lenovo IdeaCentre Horizon. Семейное тестирование

Reading time 5 min
Views 20K
Intel corporate blog

В рамках проходившего в минувшем году конкурса Intel App Innovation Contest участникам предлагалось, в том числе, создать приложения для компьютеров All-in-One (AIO) нового поколения – своего рода «мегапланшетов» с большой диагональю, призванных стать центром домашних цифровых развлечений. Для оценки приложений судьям были предоставлены такие устройства и я, учитывая их экзотичность, воспользовался служебным положением и забрал имеющийся экземпляр AIO Lenovo IdeaCentre Horizon на новогодние каникулы к себе домой для «семейного тестирования». Хотелось понять, насколько AIO в его сегодняшней реализации способен удовлетворить все мультимедийные и игровые домашние потребности?
Читать дальше →
Total votes 29: ↑24 and ↓5 +19
Comments 27

io_submit: альтернатива epoll, о которой вы никогда не слышали

Reading time 8 min
Views 13K
Badoo corporate blog High performance *System Programming *C *Development for Linux *
Translation


Недавно внимание автора привлекла статья на LWN о новом интерфейсе ядра для опроса (polling). В ней обсуждается новый механизм опроса в Linux AIO API (интерфейс для асинхронной работы с файлами), который добавили в ядро версии 4.18. Идея довольно интересная: автор патча предлагает использовать Linux AIO API для работы с сетью.

Но постойте! Ведь Linux AIO был создан для работы с асинхронным вводом-выводом с диска / на диск! Файлы на диске — это не то же самое, что сетевые соединения. Возможно ли вообще использовать Linux AIO API для работы с сетью?

Оказывается, да, возможно! В этой статье объясняется, как использовать сильные стороны Linux AIO API для создания более быстрых и лучших сетевых серверов.

Но давайте начнём с разъяснения, что представляет собой Linux AIO.
Читать дальше →
Total votes 77: ↑77 and ↓0 +77
Comments 36

Python: Явное лучше неявного

Reading time 6 min
Views 12K
Open source *Python *Programming *Debugging *
Sandbox
✏️ Technotext 2022

Приветствую, хабраюзер! Эта история началась со странного падения Python приложения. Сначала я не придал внимания данной проблеме: приложение запущено в Openshift и периодически падает. К такому поведению может приводить всякое, например, иногда ноды обновляют, а иногда случаются аварии и тогда одну или несколько нод выводят из эксплуатации. Однако со временем проблема стала регулярной и начала проявляться некоторая закономерность. При этом в Sentry не было каких-либо ошибок. Я был полностью уверен, что это какая-то типовая проблема и ее можно быстро решить, но как же я ошибался.

Читать далее
Total votes 50: ↑49 and ↓1 +48
Comments 13