Это неплохо, а как во встроенном перле завести счетчик, который будет действовать на протяжении всей жизни воркера, а не только обработки запроса?<br><br><div class="gmail_quote">8 января 2009 г. 13:14 пользователь 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:31:14AM +0300, Борис Долгов wrote:<br>
<br>
> Понятно, спасибо. В принципе, вариант не плохой - но вопрос в том, как<br>
> балансировать не случайно, а равномерно между дисками с минимальными<br>
> трудозатратами (насколько я понимаю, 255 if'ов - это неоптимально с точки<br>
> зрения конфигурации, да и стыдно будет, если кто увидит :), даже если<br>
> уместить все это в 7 if'ов, все равно будет, наверно, криво).<br>
<br>
</div>Ну я ж говорю - не показывать. :)<br>
<div class="Ih2E3d"><br>
> Свой модуль писать страшно, как на perle организовать последовательный<br>
> балансинг а не псевдорандом - не знаю. Разве что по остатку деления номера<br>
> секунды на 7... Так все равно псевдорандом, нагрузка на диски будет<br>
> приходиться пиками.<br>
<br>
</div>А кто мешает завести счётчик запросов внутри перла и делать<br>
round-robin по этому счётчику? Разделять между воркерами его не<br>
надо, обнуление при реконфигурации - тоже не велика беда.<br>
<font color="#888888"><br>
Maxim Dounin<br>
</font><div><div></div><div class="Wj3C7c"><br>
><br>
><br>
><br>
> 8 января 2009 г. 3:00 пользователь Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>>написал:<br>
><br>
> > Hello!<br>
> ><br>
> > On Thu, Jan 08, 2009 at 01:18:52AM +0300, Борис Долгов wrote:<br>
> ><br>
> > > Добрый день!<br>
> > > Хотелось бы как-нибудь хитро заставить nginx балансировать нагрузку между<br>
> > > несколькими жесткими дисками (между несколькими document_root)<br>
> > > Вижу несколько решений:<br>
> > > 1. Поднять еще 7 nginx'ов на разных портах, сделать балансинг по tcp.<br>
> > > Наверно, плохо.<br>
> > > 2. Поднять еще 7 server'ов в одном nginx'e, сделать баланскинг по tcp.<br>
> > > Наверно, плохо.<br>
> > > 3. Написать что-то легкое на fastcgi, которое будет отдавать<br>
> > > X-Accel-Redirect. Наверно, плохо?<br>
> > > 4. Написать что-то на встроенном perl'e. Хорошо ли? Как сделать<br>
> > равномерную<br>
> > > балансировку при его использовании, не прибегая к внешним средствам.<br>
> > > 5. Написать модуль, который будет сам менять document_root. Наверно, не<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>
</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>