Ага, это именно оно :)<br>Думал, что переменная будет жить только во время запроса, но все оказалось хитрее :)<br><br><div class="gmail_quote">9 января 2009 г. 3:36 пользователь Maxim Dounin <span dir="ltr"><<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>></span> написал:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hello!<br>
<div class="Ih2E3d"><br>
On Thu, Jan 08, 2009 at 03:45:29PM +0300, Борис Долгов wrote:<br>
<br>
> Это неплохо, а как во встроенном перле завести счетчик, который будет<br>
> действовать на протяжении всей жизни воркера, а не только обработки запроса?<br>
<br>
</div>Как это делается обычно в перле - через глобальную переменную.<br>
<br>
http {<br>
perl_set $disk 'sub { our $c; return ($c++ % 7); }';<br>
...<br>
<br>
server {<br>
root /path/to/$disk;<br>
...<br>
}<br>
}<br>
<br>
В принципе объявление 'our $c' можно вообще опустить (ибо use<br>
strict никто не делал), но мне религия не позволяет. ;)<br>
<div><div></div><div class="Wj3C7c"><br>
Maxim Dounin<br>
<br>
><br>
> 8 января 2009 г. 13:14 пользователь Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>>написал:<br>
><br>
> > Hello!<br>
> ><br>
> > On Thu, Jan 08, 2009 at 03:31:14AM +0300, Борис Долгов wrote:<br>
> ><br>
> > > Понятно, спасибо. В принципе, вариант не плохой - но вопрос в том, как<br>
> > > балансировать не случайно, а равномерно между дисками с минимальными<br>
> > > трудозатратами (насколько я понимаю, 255 if'ов - это неоптимально с точки<br>
> > > зрения конфигурации, да и стыдно будет, если кто увидит :), даже если<br>
> > > уместить все это в 7 if'ов, все равно будет, наверно, криво).<br>
> ><br>
> > Ну я ж говорю - не показывать. :)<br>
> ><br>
> > > Свой модуль писать страшно, как на perle организовать последовательный<br>
> > > балансинг а не псевдорандом - не знаю. Разве что по остатку деления<br>
> > номера<br>
> > > секунды на 7... Так все равно псевдорандом, нагрузка на диски будет<br>
> > > приходиться пиками.<br>
> ><br>
> > А кто мешает завести счётчик запросов внутри перла и делать<br>
> > round-robin по этому счётчику? Разделять между воркерами его не<br>
> > надо, обнуление при реконфигурации - тоже не велика беда.<br>
> ><br>
> > Maxim Dounin<br>
> ><br>
> > ><br>
> > ><br>
> > ><br>
> > > 8 января 2009 г. 3:00 пользователь Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a><br>
> > >написал:<br>
> > ><br>
> > > > Hello!<br>
> > > ><br>
> > > > On Thu, Jan 08, 2009 at 01:18:52AM +0300, Борис Долгов wrote:<br>
> > > ><br>
> > > > > Добрый день!<br>
> > > > > Хотелось бы как-нибудь хитро заставить nginx балансировать нагрузку<br>
> > между<br>
> > > > > несколькими жесткими дисками (между несколькими document_root)<br>
> > > > > Вижу несколько решений:<br>
> > > > > 1. Поднять еще 7 nginx'ов на разных портах, сделать балансинг по tcp.<br>
> > > > > Наверно, плохо.<br>
> > > > > 2. Поднять еще 7 server'ов в одном nginx'e, сделать баланскинг по<br>
> > tcp.<br>
> > > > > Наверно, плохо.<br>
> > > > > 3. Написать что-то легкое на fastcgi, которое будет отдавать<br>
> > > > > X-Accel-Redirect. Наверно, плохо?<br>
> > > > > 4. Написать что-то на встроенном perl'e. Хорошо ли? Как сделать<br>
> > > > равномерную<br>
> > > > > балансировку при его использовании, не прибегая к внешним средствам.<br>
> > > > > 5. Написать модуль, который будет сам менять document_root. Наверно,<br>
> > не<br>
> > > > > осилю.<br>
> > > > ><br>
> > > > > Есть ли какие-то другие способы? Что из вышеперечисленного<br>
> > посоветуете?<br>
> > > > > Файлы небольшие, не больше 7 мегабайт.<br>
> > > ><br>
> > > > Я бы попробовал что-нибудь вроде<br>
> > > ><br>
> > > > root /path/to/$disk;<br>
> > > ><br>
> > > > и заставил переменную $disk принимать [[псевдо]случайные] значения<br>
> > > > от 0 до 6 соответственно. С особым цинизмом это можно сделать<br>
> > > > rewrite'ом, как нибудь так:<br>
> > > ><br>
> > > > set $disk 0;<br>
> > > > if ($remote_addr ~ /\.1$/) { set $disk 0; }<br>
> > > > if ($remote_addr ~ /\.2$/) { set $disk 1; }<br>
> > > > ...<br>
> > > > if ($remote_addr ~ /\.255$/) { set $disk N; }<br>
> > > ><br>
> > > > (главное - Игорю не показывать :)). Ну соответственно варианты<br>
> > > > оптимизации - выставлять переменную встроенным перлом, сделать<br>
> > > > модуль выставляющий переменную.<br>
> > > ><br>
> > > > Maxim Dounin<br>
> > > ><br>
> > > ><br>
> > ><br>
> > ><br>
> > > --<br>
> > > С уважением, Борис Долгов.<br>
> > > icq 77556665<br>
> > > e-mail <a href="mailto:boris@dolgov.name">boris@dolgov.name</a><br>
> ><br>
> ><br>
><br>
><br>
> --<br>
> С уважением, Борис Долгов.<br>
> icq 77556665<br>
> e-mail <a href="mailto:boris@dolgov.name">boris@dolgov.name</a><br>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>С уважением, Борис Долгов.<br>icq 77556665<br>e-mail <a href="mailto:boris@dolgov.name">boris@dolgov.name</a><br>