Re: Затыки при отдаче статики

Gena Makhomed gmm at csdoc.com
Sat Nov 23 12:07:02 UTC 2013


On 23.11.2013 11:03, Alex Vorona wrote:

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

есть очень похожая задача - что делать, если трафика больше,
чем Bandwidth сетевой подсистемы. и эта задача успешно решена
практически во всех операционных системах. например, для линукса
- http://xgu.ru/wiki/QoS_в_Linux, Hierarchy Token Bucket и т.п.

разница только в том, что Bandwidth сетевой подсистемы измеряется
в мегабитах в секунду, а Bandwidth дисковой подсистемы - в IOPS.
например, в новых версиях OpenVZ уже появилась опция --iopslimit iops
также в линуксе есть ionice с 4 класами и 8 приоритетами внутри класса.

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

поскольку native поддержки для этого в nginx нет и вряд ли когда-либо
появится, то это все придется делать средствами операционной системы.

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

еще скрытые резервы для повышения производительности могут быть в том,
что дисковое хранилище собрано в виде RAID массива 5/6/10/... - в таком
случае сам RAID массив является узким местом и его лучше разобрать
на "отдельные" диски или RAID-1 массивы из N дисков. в этом случае,
если software raid / hardware raid не кривой - скорость random
чтения с RAID-1 массива из N дисков будет примерно в N раз выше.

или же - добавить SSD к системе хранения файлов в том или ином виде
(Bcache,Flashcache,Btier,EnhanceIO, nginx+ngx_slowfs_cache, etc...)
туда уйдет самый "горячий" контент и вся система выдаст больше IOPS.

кстати, странно что функциональности модуля ngx_slowfs_cache
нет в основной ветке nginx, - чтобы сделать что-то аналогичное
без ngx_slowfs_cache придется использовать "двойное проксирование".
хотя может быть overhead от этого не большой и это вполне приемлимо.
но настройка получается не тривиальной: http://habrahabr.ru/post/202290/

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru