[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