[fr] Изменить немного алгоритм try_files

Андрей Василишин a.vasilishin на kpi.ua
Пн Ноя 29 20:54:57 MSK 2010


Здравствуйте!
Никому не секрет, что в серверах, занимающихся раздачей статики узким 
местом является iops дисков.
Представиим ситуацию, есть 8 дисков, эти 8 дисков обслужат больше 
запросов, чем эти же 8 дисков в любом рейде. Но так как нам хотелось бы 
иметь какой-то бекап и, желательно, чтобы не было простоя, если слетает 
один из веников. Для этого я поделил веники по 4 шт. и сделал скрипт, 
который запускаю раз в 10 минут (чаще файлы все равно не обновляются), 
получился принцип рейд10.

#!/bin/bash
cp -aufx /storage1/* /storage2
cp -aufx /storage2/* /storage1
cp -aufx /storage3/* /storage4
cp -aufx /storage4/* /storage3
cp -aufx /storage5/* /storage6
cp -aufx /storage6/* /storage5
cp -aufx /storage7/* /storage8
cp -aufx /storage8/* /storage7


Все эти 8 веников объеденены с помощью aufs и при заливке файл  рандомно 
попадет на один из дисков и потом скриптом копируется на соседний.
При чтении, если использовать aufs, то получится, что запросы всегда 
идут к тому диску, где первым найден файл: /storage1, /storage3, 
/storage5, /storage7 (то есть по порядку как это делает сейчас 
try_files), остальные диски при этом простаивают.
  Если немного модифицировать алгоритм try_files, когда первый путь для 
поиска будет выбираться рандомно и затем обходить все оставшиеся пути по 
кругу, то мы получим равномерное распределение запросов по дискам в 
такой конструкции:
                  try_files
                             /storage1$uri
                             /storage3$uri
                             /storage5$uri
                             /storage7$uri
                             /storage2$uri
                             /storage4$uri
                             /storage6$uri
                             /storage8$uri




-- 
WBR, Andrey Vasilishin CDIG1-UANIC, CDIG1-RIPE



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