<p dir="ltr">Увидел много слов о том, что теперь на Windows можно Highload, но нн увидел ни одного слова о том, что на Windows стали делать Highload. Есть какие-то отчеты, которые показывают, что доля этой ОС на web-серверах начала расти и ей срочно нужно уделять больше времени?</p>
<br><div class="gmail_quote"><div dir="ltr">пт, 16 дек. 2016 г., 7:21 Илья Шипицин <<a href="mailto:chipitsine@gmail.com">chipitsine@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><br class="gmail_msg"><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">16 декабря 2016 г., 8:23 пользователь sofiamay <span dir="ltr" class="gmail_msg"><<a href="mailto:nginx-forum@forum.nginx.org" class="gmail_msg" target="_blank">nginx-forum@forum.nginx.org</a>></span> написал:</div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Оксюморон? Возможно. Но хотелось бы изменить ваше мнение :-) Я серьёзно.<br class="gmail_msg">
<br class="gmail_msg">
Maxim Dounin, мне кажется пришло время сделать шаг навстречу Windows.<br class="gmail_msg">
Осталось то всего ничего!<br class="gmail_msg">
<br class="gmail_msg">
Давайте просто посмотрим на ситуацию с Winodws с точки зрения сложившегося в<br class="gmail_msg">
IT обществе мнения. Windows долгие годы была в аутсайдерах и не принималась<br class="gmail_msg">
всерьез, имела много проблем с производительностью, безопасностью и в целом<br class="gmail_msg">
мало подходила для полноценного продакшен сервера под высокую нагрузку. Для<br class="gmail_msg">
многих HighLoad и Windows это несовместимые понятия и, как известно, сами<br class="gmail_msg">
разработчики Nginx уделяют очень мало внимания этой платформе.<br class="gmail_msg">
<br class="gmail_msg">
Но давайте разберемся, а что же сейчас происходит на самом деле. Современная<br class="gmail_msg">
Windows Server это производительная, безопасная и надёжная платформа, а NTFS<br class="gmail_msg">
не сильно хуже EXT4. Уже давно появились SSD, тюнинг реестра для поддержки<br class="gmail_msg">
огромного числа соединений делается не сильно сложнее тюнинга<br class="gmail_msg">
/etc/sysctl.conf и в целом Windows уже давно позволяет создавать<br class="gmail_msg">
высокопроизводительные решения. Я не буду говорить о профессиональном<br class="gmail_msg">
HighLoad сегменте, тут конечно Linux вне конкуренции.<br class="gmail_msg">
<br class="gmail_msg">
Теперь давайте разберемся с Nginx. Что долгое время мешает ему стать<br class="gmail_msg">
сервером номер 1 для Windows? Список проблем БЫЛ довольно скромный и<br class="gmail_msg">
большинство из этих проблем уже решены!<br class="gmail_msg">
<br class="gmail_msg">
1. Хоть и возможен запуск нескольких рабочих процессов, только один из них<br class="gmail_msg">
реально работает. Это происходит потому, что для обработки соединений<br class="gmail_msg">
используется медленный select. Необходимо реализовать использование портов<br class="gmail_msg">
завершения ввода-вывода (I/O completion ports) в качестве метода обработки<br class="gmail_msg">
соединений и реализовать использование нескольких рабочих нитей внутри<br class="gmail_msg">
одного рабочего процесса.<br class="gmail_msg">
<br class="gmail_msg">
Пока не реализовано.<br class="gmail_msg">
<br class="gmail_msg">
2. Рабочий процесс может обслуживать не более 1024 одновременных<br class="gmail_msg">
соединений.<br class="gmail_msg">
<br class="gmail_msg">
Решено: FD_SETSIZE (неизвестно с какой версии)<br class="gmail_msg">
<br class="gmail_msg">
3. Кэш и другие модули, требующие поддержки разделяемой памяти, не работают<br class="gmail_msg">
под Windows Vista и более поздними версиями.<br class="gmail_msg">
<br class="gmail_msg">
Решено: ASLR (с версии 1.9.0)<br class="gmail_msg">
<br class="gmail_msg">
4. Работают все модули, кроме UDP проксирования, XSLT-фильтра, фильтра<br class="gmail_msg">
изображений, модуля GeoIP и встроенного языка Perl.<br class="gmail_msg">
<br class="gmail_msg">
Можно считать что почти решено: фильтр изображений и GeoIP собираются если<br class="gmail_msg">
захотеть, просто предварительно нужно собрать libgd и libmaxminddb (GeoIP 2)<br class="gmail_msg">
которые требуются для сборки. Perl уже никто не пользуется, под Windows<br class="gmail_msg">
легко собираются LUAJIT модуль с кучей lua-resty расширений, включая<br class="gmail_msg">
non-blocking работу с Mysql, Redis, Memcached, Postgres и т.д. Ну а без<br class="gmail_msg">
проксирования UDP и XSLT-фильтра как нибудь проживем, сомневаюсь что вообще<br class="gmail_msg">
этим кто-либо пользуется.<br class="gmail_msg">
<br class="gmail_msg">
5. Правильная работа с FAST-CGI PHP (ввиду отсутствия PHP-FPM для Windows)<br class="gmail_msg">
которая заключается в ограничении кол-ва соединений равным одному на каждый<br class="gmail_msg">
запущенный поток PHP ([max_conns=1] в upstream) и помещение всех других<br class="gmail_msg">
соединений в очередь ([queue число timeout=время] в upstream). Без этих двух<br class="gmail_msg">
настроек работа с PHP под мало-мальской нагрузкой невозможна.<br class="gmail_msg">
<br class="gmail_msg">
Частично решено: сначала разработчики не хотели открыть эти опции. Но...<br class="gmail_msg">
Прошел год и вот это свершилось. Я уже было открыл шампанское, пригласил<br class="gmail_msg">
коллег, но отметить это событие мы так и не смогли, потому что разработчики<br class="gmail_msg">
почему-то открыли опции не до конца. Пользователям стала доступна опция<br class="gmail_msg">
max_conns с версии 1.11.5, Но она бесполезна без возможности настройки<br class="gmail_msg">
очереди ([queue число timeout=время] в upstream) поскольку при использовании<br class="gmail_msg">
max_conns=1 сервер отдаёт 502 при превышении одновременных подключений над<br class="gmail_msg">
числом FAST-CGI потоков.Запросы к FAST-CGI должны помещаться в очередь, по<br class="gmail_msg">
крайне мере до изобретения PHP-FPM для Windows. Уже не раз говорил и просил,<br class="gmail_msg">
откройте эти две настройки, без них на Windows никак. Увы открыли только<br class="gmail_msg">
одну.<br class="gmail_msg">
<br class="gmail_msg">
Максим, а теперь давайте подведём итоги. Вашими стараниями и стараниями<br class="gmail_msg">
других разработчиков Nginx постепенно обретает полноценную поддержку<br class="gmail_msg">
Windows, в то время как сама Windows давно готова и прямо-таки ждёт Nginx с<br class="gmail_msg">
распростёртыми объятиями. Большинство проблем Nginx под Windows практически<br class="gmail_msg">
решены, осталось всего две:<br class="gmail_msg">
<br class="gmail_msg">
1. Перейти на использование IOCP/Multiple-Thread чтобы избавиться от select<br class="gmail_msg">
для connections и "только 1 процесс работает".<br class="gmail_msg">
2. Открыть для использования PHP вторую жизненно важную опцию (очередь к<br class="gmail_msg">
upstream).<br class="gmail_msg">
<br class="gmail_msg">
И всё. В буквальном смысле. Т.е. Nginx и Windows уже влюблены друг в друга.<br class="gmail_msg">
Теперь осталось решить пару вопросов и можно подавать заявление в загс.<br class="gmail_msg">
<br class="gmail_msg">
Если посмотреть в исходники, то пробный модуль IOCP был написан в 2012 и<br class="gmail_msg">
потом заброшен. Понятно что рано или поздно кто-нибудь допишет этот модуль.<br class="gmail_msg">
Понятно, что рано или поздно будет реализована Multiple-Thread модель. 5 лет<br class="gmail_msg">
ждём, еще столько же подождем. Но второй вопрос можно легко решить уже<br class="gmail_msg">
сейчас.<br class="gmail_msg">
<br class="gmail_msg">
Максим, хотелось бы попросить вас и всех других разработчиков, кому не<br class="gmail_msg">
безразлична эта тема. Помогите решить хотя бы одну из оставшихся двух<br class="gmail_msg">
проблем. Я не знаю, как в круге разработчиков решаются подобные вопросы, но<br class="gmail_msg"></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">подобные вопросы решаются написанием патчей<br class="gmail_msg"></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"> </div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
пожалуйста, помогите повлиять на открытие второй необходимой для Windows<br class="gmail_msg">
опции (я говорю об очереди к upstream).<br class="gmail_msg">
<br class="gmail_msg">
Если открыть эту вторую опцию, то уже сейчас можно будет прекрасно работать<br class="gmail_msg">
на windows с 50k одновременных подключений к PHP. Применив оптимизации (патч<br class="gmail_msg">
GetLongPathNameW, исправление времени запуска с ssl и FD_SETSIZE) Nginx<br class="gmail_msg">
будет летать как самолёт (конечно не принимая во внимание select). Это<br class="gmail_msg">
подойдёт для большинства проектов, многие смогут перейти на Windows VPS, им<br class="gmail_msg">
не придётся изучать Linux. Это огромный шаг вперёд.<br class="gmail_msg">
<br class="gmail_msg">
Пусть с одним рабочим процессом и select для connections но это будет<br class="gmail_msg">
нормально работать. И пока пользователи будут осваивать Nginx под Windows<br class="gmail_msg">
через года подоспеет IOCP/Multiple-Thread.<br class="gmail_msg">
<br class="gmail_msg">
Так что работа в полную силу под Windows не такой уж и оксюморон, не так ли<br class="gmail_msg">
:-) Надеюсь я вас переубедил. Возможно нет.<br class="gmail_msg">
Ну и поводу помощи со второй опцией, Максим или другие разработчики,<br class="gmail_msg">
помогите если можете. Если нет то нет, будет еще ждать годами :-)<br class="gmail_msg">
<br class="gmail_msg">
Всех с наступающим! ))))))))))))))<br class="gmail_msg">
<br class="gmail_msg">
Posted at Nginx Forum: <a href="https://forum.nginx.org/read.php?21,271476,271578#msg-271578" rel="noreferrer" class="gmail_msg" target="_blank">https://forum.nginx.org/read.php?21,271476,271578#msg-271578</a><br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
nginx-ru mailing list<br class="gmail_msg">
<a href="mailto:nginx-ru@nginx.org" class="gmail_msg" target="_blank">nginx-ru@nginx.org</a><br class="gmail_msg">
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" class="gmail_msg" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div></div></div>
_______________________________________________<br class="gmail_msg">
nginx-ru mailing list<br class="gmail_msg">
<a href="mailto:nginx-ru@nginx.org" class="gmail_msg" target="_blank">nginx-ru@nginx.org</a><br class="gmail_msg">
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" class="gmail_msg" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div>