[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.127488 Reply
Послушайте, я могу Wireshark’ом отладить, но вы тут уже наверняка знаете ответ, посему спрошу вас.

У меня, как и у всех честных граждан России, заблокирован rutracker.org. (Провайдер — Ростелеком.) Когда я дёргаю его curl’ом, я получаю 301 (Moved Permanently) на страницу запрета. Но если я, засучив рукава, стучусь туда напрямую netcat’ом — мне отвечает Рутрекер! Живой, здоровый! Вот те крест!

Как такое может быть? Что за колдунство?

Вот curl’ом дёргаю (IP address censored):
$ curl -v http://rutracker.org/
*   Trying 195.82.146.214...
* Connected to rutracker.org (195.82.146.214) port 80 (#0)
> GET / HTTP/1.1
> Host: rutracker.org
> User-Agent: curl/7.43.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Location: http://77.37.254.90/zapret/?sa=195.82.146.214&da=XX.XX.XX.XX&url=http://rutracker.org/
< Connection: close
* Closing connection 0
А вот — netcat’ом:
$ nc -C 195.82.146.214 http
GET / HTTP/1.1
Host: rutracker.org
User-Agent: curl/7.43.0
Accept: */*

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 21 Mar 2016 05:57:35 GMT
Content-Type: text/html
Content-Length: 178
Location: http://rutracker.org/forum/index.php
Connection: keep-alive

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
>> No.127490 Reply
>>127488
Так. Я действительно не знаю как работают netcat и curl. Но почему ты уверен что netcat'у ответил рутрекер? Он мог просто не показать прыжок на 77.37.254.90 (я так понял, это заглушка), хотя до forum/index.php он же как-то добрался. А ко всему прочему, первым ты запрашиваешь по домену, вторым по IP. Не факт что у твоего провайдера так прям уж есть DPI, может у них записи DNS-сервера заменяют (а что, у большинства DNS провайдерские) или какая еще полумера, хотя netcat все равно увидел 301.
Просто гадаю.
>> No.127491 Reply
>>127490
P. S. я вот тут пока кушал додумал. Так у них как раз есть DPI и блокировка по домену, а не по IP. Поэтому по IP сначала приходит ответ, но в самом ответе же именно домен, поэтому он в итоге все равно режется.
>> No.127492 Reply
>>127490
> Но почему ты уверен что netcat'у ответил рутрекер?
Потому что он отдал редирект на себя же. И да, если я запрашиваю /forum/index.php вместо /, то netcat мне выдаёт именно что заглавную страницу форума, а curl — всё так же редирект на запрет.
> А ко всему прочему, первым ты запрашиваешь по домену, вторым по IP.
Ну, эт самое, IP-пакеты всё равно уходят на IP-адрес, а не на домен. Вон, curl показал, в какой IP-адрес он разрешил rutracker.org. Этот адрес я и скормил netcat’у.

>>127491
Ась? Это вообще не понял. Не, ты что-то путаешь.
>> No.127494 Reply
Ладно, поковырял, разобрался. В приведённом мной вызове, netcat отправляет GET / HTTP/1.1 отдельным пакетом. Очевидно, глупый DPI такого не понимает.

Внезапно, если netcat’у завернуть stdin на файл, то этого не происходит — весь запрос уходит одним пакетом. А я так тоже пробовал! Но тут оказывается, что в этом случае netcat ещё и игнорирует -C, падла. То есть, запрос у меня уходит с юниксовыми LF вместо протокольных CRLF, что опять же немыслимо для наивного DPI, в то время как умудрённый опытом nginx видал и не такое.

О, сколько нам открытий чудных.
>> No.127496 Reply
File: -.jpg
Jpg, 551.55 KB, 3543×2362 - Click the image to expand
edit Find source with google Find source with iqdb
-.jpg
Эксперт по line feed'ам в треде, все в машину.
>>127494
> О, сколько нам открытий чудных.
Что же в этом чудесного и интересного? Большинство провайдеров изначально вообще только MitM-атаку на DNS осуществляли.
> запрос у меня уходит с юниксовыми LF вместо протокольных CRLF, что опять же немыслимо для наивного DPI, в то время как умудрённый опытом nginx видал и не такое
Вот цитата из HTTP/0.9:
> The client sends a document request consisting of a line of ASCII characters terminated by a CR LF (carriage return, line feed) pair. A well-behaved server will not require the carriage return character.
А вот уже HTTP/1.0 и HTTP/1.1:
> The line terminator for HTTP-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR.
Хотя, конечно, удивительно, что они не требуют установки платной версии nginx, чтобы это работало.
>> No.127498 Reply
Пацаны-ы. А я наврал про -C. Залез в исходники netcat-openbsd, а там, конечно, нет никакой логики про isatty. Это же netcat, какая там к чёрту логика. Там есть только вот так:
if ((Cflag) && (buf[n-1]=='\n')) {
    if (atomicio(vwrite, nfd, buf, n-1) != (n-1))
        return;
    if (atomicio(vwrite, nfd, "\r\n", 2) != 2)
        return;
}
То есть, интерактивно оно работает лишь по счастливому совпадению. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=711784

Ну и разбиение на пакеты, стало быть, тоже из-за того, что терминальный stdin буферизуется по-другому.

Во блин, эта кроличья нора увела меня глубже, чем я ожидал.
>> No.127499 Reply
>>127496
> Вот цитата
Да, я к тому и клоню, что nginx — полноценная реализация спека, в отличие от всяких там DPI.
>> No.127501 Reply
>>127498
Роскомнадзор свою задачу выполнил. Теперь ты читаешь исходный код netcat на благо родины, вместо того, чтобы смотреть свои порномультики.
>> No.127502 Reply
>>127499
А я к тому, что не нужно хвалить всякий говнософт, вроде nginx.
> полноценная реализация спека
Ненененене, такого не бывает. Полноценных реализаций HTTP не существует. Протокол HTTP сам по себе не полный, он содержит много букв, но при этом не описывает то, что нужно. Один "криво оформленный" запрос подойдёт к одному серверу, но не к другому, и наоборот, а в стандарте об этом ни слова.
>> No.127505 Reply
>>127502
> А я к тому, что не нужно хвалить всякий говнософт, вроде nginx.
Неожиданный поворот. Что же нам тогда хвалить? Что-то ведь надо хвалить.
> Полноценных реализаций HTTP не существует. Протокол HTTP сам по себе не полный, он содержит много букв, но при этом не описывает то, что нужно.
«Полноценная» вовсе не значит «полная», а значит всего лишь «люди реально сидели читали этот кровавый стандарт и выжали из него, что могли».
>> No.127506 Reply
>>127505
> Неожиданный поворот.
Чего же тут неожиданного? На LOR настоящем ругать nginx — обычное дело, ибо там сидят люди, которые знают, ЧТО это такое.
> Полноценная вовсе не значит полная
Лол.
> «Полноценная» вовсе не значит «полная», а значит всего лишь «люди реально сидели читали этот кровавый стандарт и выжали из него, что могли».
https://www.w3.org/Protocols/HTTP/AsImplemented.html
Самый обычный стандарт. Любой школьник его за пять минут реализует. Тащемта, если школьник будет писать на каком-нибудь скриптовом языке, то он даже заморачиваться не будет, какой LF там используется.
>> No.127507 Reply
>>127506
> Лол.
Признаюсь, ты застал меня врасплох. Выходит, если у двух слов совпадают первые 4 буквы, то они значат одно и то же? Это переворот в языкознании.
http://dic.academic.ru/dic.nsf/ushakov/955398
> https://www.w3.org/Protocols/HTTP/AsImplemented.html
Зачем ты показываешь мне HTTP/0.9? Ты ведь читал актуальные спеки и знаешь, что они кровавы. Что ты пытаешься мне сказать?
>> No.127512 Reply
Только сейчас понял, насколько я глуп.
мимотожехочетнаучиться
>> No.127521 Reply
>>127506
> которые знают, ЧТО это такое
Ох, я четыре года писал модули и патчил исходники этого поделия в одной конторе.
Немного встречалось мне кода хуже чем у него.
>> No.127587 Reply
>>127521
>>127506
Хейтеры nginx в треде, все в IIS.
>> No.127588 Reply
File: web-server-perfor...
Jpg, 216.21 KB, 1134×680
edit Find source with google Find source with iqdb
web-server-performance-benchmark-4-cpu-cores.jpg
File: web-server-perfor...
Jpg, 204.04 KB, 1134×680
edit Find source with google Find source with iqdb
web-server-performance-benchmark-8-cpu-cores.jpg

>>127587
Никто не "хейтит" nginx, с ним просто не нужно связываться. Это тебе любой админ расскажет, ты только одно слово скажи: nginx. nginx это тормозное глючное говно. Как один лоровец его метко описал, nginx — "клёвая утилита для вывода ошибки 500". А если кто кого и хейтит, так это услышавшие только вчера про новомодные Быстрые Асинхронные™ сервера пользователи nginx хейтят Apache, за "медленность". Ох, КАК ЖЕ они его хейтят.

Обычно администраторы/программисты/пользователи при выборе программного обеспечения выбирают между функциональностью и производительностью. nginx не даёт ни того, ни другого.

Функциональность nginx:
  • Половина действительно нужных функций, присутствующий во всех других серверах ГОДАМИ (в Apache, например, с самых первых версий), просто отсутствует. Зато эти функции присутствуют в платной версии nginx.
  • Прокси есть только для HTTP 1.0. Если бы была поддержка HTTP 1.1, то была бы более высокая производительность. Знаете, что защитники nginx на это ответили? "HTTP 1.0 проще и быстрее в реализации. ПОТОМУ ЧТО НЕ ПОДДЕРЖИВАЕТ KA." В платной версии, разумеется, исправлено.
  • Нету многой базовой функциональности веб-сервера. Например, нету поддержки CGI (sic!). Не поддерживается CGI по идеологическим причинам (типа низкая производительность). Но при этом вместо нативной поддержки CGI они предлагают костыль (внешний FastCGI-to-CGI wrapper), который только добавляет оверхеда и таки уменьшает производительность. На этом пункте можно и закончить, ибо, как вы понимаете, мало кто захочет заморачиваться с сервером без нативного CGI.
Что же насчёт производительности? Пикрелейтед. Свежий бенчмарк, 2016. Два 4C/8T зиона 2.13GHz. Статическая страница index.html 7 байт.

lighttpd написан в 2003 году: на 8 ядрах 130к запросов в секунду без просадок. Cherokee в 2001: на 8 ядрах 90к запросов в секунду. Эти сервера обладали и обладают огромной производительностью и масштабируемостью. Возможно, ты скажешь, что как бы "производительность не главное", что в контексте Apache vs nginx уже смешно, но нет. У них богатый функционал: например, Cherokee поддерживает SCGI, WSGI (нативная поддержка, модуль на Си) и имеет веб-интерфейс для настройки сервера. Последнего даже у Apache нет. Их можно использовать как полноценную замену Apache, в отличие от nginx, ибо они располагают всем нужным функционалом (mod_rewrite, CGI и тому подобное добро).

А у nginx всего 35к запросов, при том он ведёт себя нестабильно. Даже Apache выдаёт 60к! То есть Apache на мощном сервере почти в два раза быстрее nginx, и это ещё без настройки. Вы, кстати, поглядите, какой у Apache график ровный. Apache очень стабильный и масштабируется линейно с увеличением числа ядер (7,5-15-30-60к запросов для 1-2-4-8 ядер соответственно). А у nginx с многопроцессорностью и многопоточностью серьёзные проблемы: на 1-2 ядрах он на равне с другими серверами, а при увеличении количества ядер он просто не может их задействовать.

nginx, кстати, позиционируется как реверс-прокси-сервер и как сервер для FastCGI. Откровенно говоря, есть и лучшие реверс-прокси и по производительности, и по функционалу (Varnish, например. он есть на пикче). А lighttpd заметно обходит nginx, когда речь заходит о поддержке и производительности FastCGI (nginx не поддерживает "статический" FastCGI и поддержка FastCGI у него неполная).

Но несмотря на всё это, почему-то в один момент начался хайп по "асинхронным" серверам, все быдлоадмины выкинули Apache на помойку, но при этом перешли не на нормальные сервера вроде lighttpd (который, кстати, активно использовался и нагруженными сайтами, и простыми пользователями ещё задолго до этого хайпа), а на это поделие. Наверное, потому что про другие сервера они и не слышали. Сейчас можно увидеть, как во всяких бложиках и Q&A-сайтах активно пиарится nginx с помощью демагогии (мол, "более быстрый" PHP, нежели на Apache, что откровенная ложь) и при одном упоминании nginx он тут же получает поддержку и лучи любви, а про другие сервера все просто "забыли".

Не то чтобы nginx прямо-таки "плохой", просто если выбирать объективно, то нет никаких причин выбирать nginx. Нужна функциональность — Apache. Нужна производительность — настрой Apache используй lighttpd и Cherokee, либо используй несколько серверов (Apache + lighttpd/Cherokee) или даже реверс-прокси с ними же настрой или используй Squid/Varnish.

Хотя если говорить честно, то если ты попытаешься с помощью nginx обслуживать что-то сложнее статического контента, то ты гарантированно будешь наступать на грабли. Кого я обманываю? Ты трижды пожалеешь, что установил это поделие ещё на этапе редактирования конфига!

А IIS это вообще лол. Мы тут, вообще-то, серьёзные вещи обсуждаем.
>> No.127589 Reply
>>127588
Пиздец, сколько быдлоадминов.
http://w3techs.com/technologies/cross/web_server/ranking
Надо срочно им переслать твой пост.
>> No.127590 Reply
Алсо, погуглил пикчи с твоих тестов. Там чувак сам признается, что он нишмог настроить нгинкс, чтобы тот использовал все ресурсы.
Алсо, по остальным показателям апач всасывает.
>> No.127591 Reply
>>127589
А то.
>> No.127592 Reply
File: web-server-perfor...
Jpg, 198.58 KB, 1134×680
edit Find source with google Find source with iqdb
web-server-performance-benchmark-2-cpu-cores.jpg
File: web-server-perfor...
Jpg, 188.48 KB, 1134×680
edit Find source with google Find source with iqdb
web-server-performance-benchmark-1-cpu-cores.jpg

>>127590
Нужно было по-подробнее объяснить. Вот смотри, это тот же самый бенчмарк, но для 1 и 2 ядер. На 2 ядрах производительность серверов примерно одинаковая, а на первом nginx даже лидирует. Правда, у него уже тут заметна нестабильность. Суть в том, что в данном случае (мало ядер) параллельности никакой нет: скорость работы программы зависит исключительно от частоты процессора. Этим и пользуются многие нечестные люди, делающие бенчмарки: они делают бенчмарки только для 1 или, что очень редко (ведь nginx там не самый быстрый), для 2 ядер. Очевидно, эти бенчмарки практической пользы не несут: во-первых, если проводить бенчмарк, так проводить — по всем правилам и с кучей ресурсов, а во-вторых, бенчмарки как бы бесполезны и среднестатистический админ разницы между Apache и nginx даже не заметит. Но на основании того, что nginx на 1 ядре обходит server_name на 0,5% делается вывод, что nginx — луддший.

Но что происходит, если запустить nginx на нормальном многоядерном сервере, а не на нищеноуте автора какого-нибудь блога? nginx не может задействовать все ресурсы. То есть никакой параллельности — сервер не поддерживает многопроцессорность и многопоточность.
> Там чувак сам признается, что он нишмог настроить нгинкс, чтобы тот использовал все ресурсы.
Да. Как ты можешь заметить, на картинке есть два сервера — nginx и nginx mainline. То есть автор решил, что проблема в версии или неправильном конфиге, но, как оказалось, проблема в самом nginx. Если ты почитаешь комментарии, то ты увидишь, как фанбои nginx тут же предлагают ему кучу советов как настроить nginx, на что автор каждый раз отвечает, что уже пробовал. Этот же автор проводил такой же бенчмарк в 2012 году — результаты схожи.
> Алсо, по остальным показателям апач всасывает.
Ват?
>> No.127594 Reply
>>127592
http://nginx.org/ru/docs/ngx_core_module.html#worker_processes нет многопоточности, говоришь?
>> No.127602 Reply
File: maxed-out-puppetry-800x510.png
Png, 788.52 KB, 800×510 - Click the image to expand
edit Find source with google Find source with iqdb
maxed-out-puppetry-800x510.png
>>127594
Вот смотри, анон. Есть такая фиговина в компьютере, называется микропроцессор. Он занимается основными вычислениями в твоём компьютере. Например, браузер, музыка, картинки... Чтобы всё это работало, нужен микропроцессор.

Чем быстрее микропроцессор, тем лучше. Его скросоть измеряется в тактовой частоте. Также ещё она зависит от архитектуры команд, микроархитектуры, мощности конвейера, дополнительных наборов инструкций и тому подобной чепухи, но нам это не интересно.

Потом люди поняли, что на одной частоте далеко не уедешь и что бесконечно повышать её нельзя, поэтому они стали ставить в один компьютер сразу два и более микропроцессора! Такие конфигурации называются многопроцессорными. Потом они ещё научились в один корпус микропроцессора сразу несколько микропроцессоров ставить, ты представь! Такие микропроцессоры внутри "микропроцессора" называются ядрами, а сами такие микропроцессоры называются многоядерными.

А чтобы компьютер работал, нужна операционная система. Поначалу, когда в компьютеры ставили только один процессор с одним ядром, люди могли выполнять одновременно на нём только одну программу. Потом научились в многозадачность: операционная система выполняла разные программы поочерёдно. То есть 20% секунды выполняет, допустим, браузер, ещё 20% секунды выполняет музыкальный плеер, ещё 10% — торрент, а остальные 50% она простаивает.

Если в компьютере стоит два процессора или два ядра, то это открывает новые возможности для многозадачности: можно на одном процессоре/ядре выполнять одну программу, а на другом — другую!

Но если речь идёт про программы, требующие много вычислительной мощности (компиляторы, игры), которые хорошо было бы выполнять на нескольких процессорах/ядрах, то тут уже не всё так просто. Если при увеличении мощности ядра (частоты) их мощность пропорционально увеличивается, то просто так на нескольких ядрах их уже не запустить. Потому что несколько ядер выполняют что-то одновременно, а операционная система — не колдун какой-нибудь и не может наперёд знать, что программы решат сделать в следующем цикле.

Как же это исправить? Программисту нужно специально писать программы так, чтобы она задействовала несколько ядер. Например, сделать один процесс (копию программы), который будет создавать два другим процесса и управлять ими: давать им задания и получать результаты. Или сделать один процесс с несколькими потоками или микро-потоками.

Это звучит просто, но на деле это не так. Требуется синхронизация переменных программы, их действий и много чего ещё. В итоге некоторые задачи вообще не удаётся эффективно распараллелить (запустить на нескольких ядрах). Программист также может допустить ошибку и составить плохой алгоритм для параллелизации. Например, этот "главный" процесс будет потреблять больше ресурсов, чем его "подчинённые", что сведёт преимущества параллелизации на нет. Или, например, "главный" процесс будет оптимально работать только с двумя или четырьмя "подчинёнными", но не сможет адекватно нагрузить большее количество.

Как-то так.

Ты не волнуйся, если что непонятно будет. Это не только для тебя, это на самом деле сложно.
>> No.127606 Reply
>>127588
> Половина действительно нужных функций, присутствующий во всех других серверах ГОДАМИ (в Apache, например, с самых первых версий), просто отсутствует.
А именно?
> Прокси есть только для HTTP 1.0. Если бы была поддержка HTTP 1.1, то была бы более высокая производительность.
Да ты офигел.
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version
С сентября 2011, если верить ченьжлогу.
> мало кто захочет заморачиваться с сервером без нативного CGI.
Действительно — только те, у кого нету такого говна мамонта, как CGI. То есть примерно все, кто делает на вебе что-то мало-мальски серьёзное.
>> No.127608 Reply
>>127588
Впрочем, не буду спорить, что функциональность у Апача в целом пошире, причём не только в технологиях 90-х годов. Например, nginx не умеет h2c upgrade.
>> No.127610 Reply
>>127606
> С сентября 2011, если верить ченьжлогу.
Кажется, в 2011 только в тестовой версии была и в основной ветке поддержка появилась только в 2012. Но дефолт это таки 1.0.
> Действительно — только те, у кого нету такого говна мамонта, как CGI.
Лолчто?
> То есть примерно все, кто делает на вебе что-то мало-мальски серьёзное.
Лолчто? Обоснуй.

Только не нужно мне сейчас пасту про "быстрые асинхронные" сервера и ПЯТЬ ТЫЩ ЗАПРОСОВ на пистоне приводить.

А если ты про PHP через FastCGI, то Apache + mod_php быстрее будет.
>>127608
Речь не о том, что она шире у Apache. Речь о том, что nginx не предоставляет каких-либо преимуществ над Apache в плане производительности, а если и нужна именно производительность (ПЛЮС функциональность), то есть другие сервера. К тому же, nginx сам по себе нестабилен, имеет плохой код и с ним нужно много возиться, чтобы хоть что-то работало.
>> No.127612 Reply
>>127610
> > Действительно — только те, у кого нету такого говна мамонта, как CGI.
> Лолчто?
Ну, если у меня нет и не предвидится CGI-программ, то отсутствие поддержки CGI не является для меня доводом против nginx, смекаешь?
 
> > То есть примерно все, кто делает на вебе что-то мало-мальски серьёзное.
> Лолчто? Обоснуй.
CGI несёт большой оверхед, зачастую заметный даже на мизерных нагрузках, поэтому для современных приложений HTTP его не применяют. Я могу себе представить две ситуации, когда нужен CGI:
1. Безысходное легаси. Тогда мы используем тот же FastCGI-to-CGI wrapper, например. Добавляет оверхеда? Well, duh! Это легаси, детка.
2. Написали наколеночный скриптик и хотим максимально легко завернуть его на HTTP, быстродействие не волнует от слова «совсем». Тогда встроенная поддержка CGI (или WSGI) может быть удобна. Но если мы уже подняли nginx, то поднять рядышком другой сервер обычно тоже не проблема.
Оба случая специфические и возникают редко. Я лично не помню, когда последний раз мне доводилось запускать CGI-программу на продакшене.
 
> Речь не о том, что
Да, общую структуру твоих доводов я понял и не хочу оспаривать. Я докапываюсь до отдельных странных слов.
>> No.127613 Reply
File: round_4_hello.png
Png, 14.94 KB, 556×344 - Click the image to expand
edit Find source with google Find source with iqdb
round_4_hello.png
>>127612
> Ну, если у меня нет и не предвидится CGI-программ, то отсутствие поддержки CGI не является для меня доводом против nginx, смекаешь?
Это юношеский максимализм. Не нужно так.
> CGI несёт большой оверхед, зачастую заметный даже на мизерных нагрузках, поэтому для современных приложений HTTP его не применяют.
А ты знаешь, что любой фреймворк Python/Ruby/etc. с FastCGI/SCGI даже на простом хелловорлде будет выдавать меньше запросов, чем голый CGI-скрипт на этих же языках? Лично у меня хелловорлд на CGI (любой язык) выдаёт 4,5к запросов в секунду. CGI это ложный боттлнек и никакие асинхронные сервера и FastCGI не спасут от 500 MySQL-запросов на главной гостевухи.
> Безысходное легаси.
А FastCGI это не безысходное легаси? У FastCGI те же переменные и он имеет очень хорошую совместимость с CGI. Код, это реализующий, примерно один и тот же. И реализация CGI никак не противоречит никакой архитектуре.

В CGI нет ничего "устаревшего". Не все программы пишутся под много пользователей и не все хотят заморачиваться с настройкой демона. А у nginx с этим придётся повозиться, ибо nginx не поддерживает пассивный FastCGI по тем же соображениям, по которым он не поддерживает CGI.

Алсо, ты это PHP-шникам только не рассказывай, а то со смеху ведь лопнуть могут.
> Тогда мы используем тот же FastCGI-to-CGI wrapper, например.
А внести эти несчастные 20 строк кода в веб-сервер и увеличить производительность CGI религия не позволяет?
> Но если мы уже подняли nginx, то поднять рядышком другой сервер обычно тоже не проблема.
Это сарказм или что?
>> No.127614 Reply
>>127613
Кстати, я тут вспомнил. Главный разработчик Ruby on Rails (взаимодействует с веб-сервером через FastCGI) писал в IRC, что он все свои проекты перезапускает 600-700 раз в день. То есть в среднем почти каждые 2 минуты. Но эта история и её частичное решение это уже другая история.
>> No.127623 Reply
Главная причина почему в качестве фронтэнд сервера пользуют nginx вместо apache - это производительность и потребление оперативы на статике, апач в этом случае тупо захлебывается. Если так прям любишь функциональность и мод-реврайты, проксируй динамику на апач.
>> No.127625 Reply
>>127613
> Это юношеский максимализм.
Во как. Выбирать инструменты с учётом задач — это у нас теперь юношеский максимализм называется. Ясненько.
 
> А ты знаешь, что любой фреймворк Python/Ruby/etc. с FastCGI/SCGI даже на простом хелловорлде будет выдавать меньше запросов, чем голый CGI-скрипт на этих же языках?
Не «даже», а именно на хеловорлде. Настоящим приложениям обычно надо подгрузить кучу модулей, применить конфиги, подключиться к базам — это всё оверхед нового процесса.
 
> CGI это ложный боттлнек и никакие асинхронные сервера и FastCGI не спасут от 500 MySQL-запросов на главной гостевухи.
Я не говорил, что CGI — всегда ботлнек. Я сказал, что его оверхед зачастую заметен. При этом менее оверхедные интерфейсы хорошо известны и всюду поддерживаются, поэтому доводы против их использования обычно сводятся к «мне лень писать конфиг для моей инит-системы».
 
> Алсо, ты это PHP-шникам только не рассказывай, а то со смеху ведь лопнуть могут.
А что там? Я не имел дела с PHP лет 10. Если верить докам и гуглу, то там используют FastCGI либо модули к HTTP-серверу.
 
> В CGI нет ничего "устаревшего". Не все программы пишутся под много пользователей и не все хотят заморачиваться с настройкой демона.
Хорошо, я зря назвал CGI говном мамонта. Не говно, хороший интерфейс для отдельных задач. Отдельных. Далеко не всем нужных. Ок?
>> No.127629 Reply
File: Small-Static-Benc...
Png, 41.45 KB, 883×525
edit Find source with google Find source with iqdb
Small-Static-Benchmark-Screen-Shot1.png
File: nginx-apache-reqs...
Png, 18.01 KB, 644×309
edit Find source with google Find source with iqdb
nginx-apache-reqs-sec.png

>>127623
> производительность и потребление оперативы на статике
Где ты там производительность увидел, наркоман? Я об этом уже написал. См. графики в посте >>127588.

А если ты скажешь, что "130к запросов в секунду серверу не нужно" и "разница между 130к и 30к не такая большая...", то тогда можно сказать, что и nginx не нужен. nginx даёт не слишком большое преимущество по производительности перед настроенным Apache.
> проксируй динамику на апач
Но зачем? Если ты смог заморочиться с настройкой реверс-прокси, то смог бы заморочиться вместо этого и с настройкой Apache. Это намного проще и легче, чем содержать на одном сервере два веб-сервера и настраивать их. Вон, некоторые больные мозгом люди вообще на одном сервере две копии Apache держат (легковесную и "тяжёлую") вместо настройки какой-то одной.

Ненастроенный Apache всего в 2~ раза медленнее nginx на статическом контенте. Это можно легко исправить редактированием трёх строчек в конфиге отдельного виртуалхоста: для статической части сайта отключить AllowOverride и логгирование. AllowOverride None увеличивает производительность на 35-60% и отключенные логи тоже её увеличивают. Но при этом .htaccess и логи всё ещё будут работать для динамической части сайта! И никаких "легковесных" реверс-прокси не нужно. Жрёт память и нужно ещё производительности? В интернете есть куча туториалов, как настроить MPM. Можно просто готовый конфиг (6-7 строчек) скопировать и всё будет отлично работать.
>> No.127922 Reply
>>127629
Если верить твоим графикам то на 8-9к коннектов апач просто заткнется. А ведь все самое интересное начинается после 10к.
>> No.127925 Reply
File: 58E-GqEk9-U.jpg
Jpg, 138.26 KB, 850×1201 - Click the image to expand
edit Find source with google Find source with iqdb
58E-GqEk9-U.jpg
>>127922
ну чел в пасте говорит типа обычные сервера межденные и нужны быстрые использовать, и типа о этого как-то зависит уровень дохода от сайта) лол) нуб в общем)

Apache Hadoop, сверхбыстрые асинхронные key-value хранилища--------
типа оч быстрые базы данных но тупые по функцианалу))типа таблицы из двух столбцов) имя и значение) и чел из пасты предлагает в этом говне хранить данные сайта) да пошел он нахуй)
к тому же какой нахуй хайлоад(высокая нагрузка) если у чела будет 5к запросов в секунду то у него будет столько бабла что ему не трудно будет серв в центре арендовать))
>> No.127931 Reply
>>127925
> нужны быстрые использовать, и типа о этого как-то зависит уровень дохода от сайта
Естественно, чем больше клиентов может обслужить тазик тем меньше тазиков нужно
> Apache Hadoop, сверхбыстрые асинхронные key-value хранилища--------типа оч быстрые базы данных но тупые по функцианалу))типа таблицы из двух столбцов) имя и значение) и чел из пасты предлагает в этом говне хранить данные сайта
Они как-бы побыстрей sql-базы будут, поэтому вполне логично.
> если у чела будет 5к запросов в секунду то у него будет столько бабла что ему не трудно будет серв в центре арендовать
А вот далеко не факт. Ситуации разные бывают.
>> No.127932 Reply
>>127931
Опоздал ты со своим ответом на несколько лет...
> Они как-бы побыстрей sql-базы будут, поэтому вполне логично.
Пруфы будут?

Лично я пробовал использовать этот ваш сверхбыстрый синхронный redis в маленьком скрипте на Perl. 99% времени скрипт тратил на взаимодействие с redis и ни о каких "десятках тысяч" запросов в секунду речи не шло. И это ещё Perl, прототип скрипта. А что было бы, если бы это был полноценный сайт, скажем, на Си?

Но что же это? Как только я поставил нормальную, полноценную SQL базу данных (SQLite), боттлнек как рукой сняло: скрипт начал выдавать кучу запросов в зависимости от типа нагрузки. А если сделать "key-value" хранилище средствами самого языка (в Perl есть так называемые "именованные массивы"), то количество запросов в секунду вообще взлетает до небес. Я не понимаю, кстати, зачем вам redis нужен, если именованные массивы сегодня в куче скриптовых языков уже встроены в синтаксис.

Но хипстеры продолжают впаривать свои redis'ы, так и не понимая, что TCP — огромный боттлнек и перемещение базы данных аж в ПАМЯТЬ ничего не изменит.
> А вот далеко не факт. Ситуации разные бывают.
Анон, если у тебя будет 5к запросов хотя бы в минуту, то тебя такие мелочи уже волновать со~овсем не будут.

К тому же, во-первых, гостевушки на PHP в среднем могут выдавать не более 10-15 запросов в секунду. А во-вторых, если речь про статический контент, на котроом эти бенчмарки делаются, то тебе понадобятся очень хорошие жёсткие диски, чтобы обслуживать хотя бы 100 настоящих запросов в секунду.
>> No.127948 Reply
>>127932
Сколько экземпляров твоего скрипта работало одновременно?
> если у тебя будет 5к запросов хотя бы в минуту, то тебя такие мелочи уже волновать со~овсем не будут.
Вот не знаю, меня почему-то волнуют. Что я делаю не так?
> если речь про статический контент, на котроом эти бенчмарки делаются, то тебе понадобятся очень хорошие жёсткие диски, чтобы обслуживать хотя бы 100 настоящих запросов в секунду
Кеш vfs? Не, не слышал.
>> No.127965 Reply
>>127948
> Сколько экземпляров твоего скрипта работало одновременно?
Один процесс, один поток.

Это совершенно неважно, когда скрипту приходиться обращаться к базе данных посредством TCP/IP. Скрипт не является боттлнеком. redis даже близко к производительности in-process баз данных не подходит.
> Что я делаю не так?
Забыл выключить ab после последнего проведённого бенчмарка?


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]