The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз http-сервера Apache 2.4.43, opennews (??), 04-Апр-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


24. "Релиз http-сервера Apache 2.4.43"  +2 +/
Сообщение от Аноним (3), 04-Апр-20, 16:13 
Если у тебя посещаемость в полтора анонима, то, конечно, разницы никакой.

А если много, и среди них далеко не все с гигабитными каналами - то смотри: пхп нужно по процессу на запрос. Процесс - штука тяжелая, много процессов - много контекст-свитчей, мало процессов - не успеют обработать все запросы. Ходят к тебе 100 пользователей в секунду с медленных 3g/edge соединений. Апач будет держать процесс, пока они медленно и печально не получат ответ. А nginx - это 1-2-3-4... воркеров (больше, чем ядер, запускать бессмысленно), быстренько прочитает ответ от php-fpm в память, а потом эффективненько отдаст всем сразу в рамках epoll based fsm.

Вместо php-fpm можно и апач с mod-php запустить слушать юникс-сокет, а на него проксировать nginx-ом. Принцип ничего не изменится, разве что апач памяти больше жрет.

Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

29. "Релиз http-сервера Apache 2.4.43"  +3 +/
Сообщение от нах. (?), 04-Апр-20, 17:02 
открою вам страшную тайну: "процесс штука тяжелая" - это только в вашей б-жественной десяточке.
В современных (~2000+ года издания) юникс-лайк системах процесс сам по себе - примерно так же "тяжел", как и userspace реализация "epoll based fsm". Разница в реальном мире есть, но не на порядки, а максимум в разы.
И если процесс висит на синхронном socket write - твое "3g" никаких контекст-свитчей не вызывает, пока весь буфер не уедет на ту сторону.

А проблемы обычно возникают (на современном железе и на современных задачах) как раз с быстрыми юзерами на быстром канале, запросы которых просто не успевает обрабатывать сам php. nginx тут может ограничено помочь, кэшируя его выхлоп, но это очередная область магии, доступная (без последствий в виде залипшей в кэше устаревшей информации) немногим.

В свое время кое-кто делал замены на bitrix + memcache + nginx в разных комбинациях. Получилось что собственное кэширование битрикса (а ведь сложно найти большее уродство) - эффективнее любого внешнего, не знающего, что можно кэшировать, а что бессмысленно.

Ответить | Правка | Наверх | Cообщить модератору

31. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от Аноним (3), 04-Апр-20, 17:30 
Для сотен процессов (а больше с пхп без кэша в статику и не выйдет) действительно в разы. А для статики - на порядки (раздай префорком c10k, я посмотрю).

Кэшировать html в мемкеше - это вообще затея дурная, кэшировать надо в фс и отдавать статикой. В современных ОС, а не в вашей десяточке, вся свободная память используется под кэш фс. Соответственно, задача в случае cache hit сводится к отдаче статики, см. выше.

Ответить | Правка | Наверх | Cообщить модератору

41. "Релиз http-сервера Apache 2.4.43"  +2 +/
Сообщение от нах. (?), 04-Апр-20, 18:59 
я не очень понимаю, кому и что за статику такую (не помещающуюся целиком в буфер, и досвидос) ты раздаешь, что оно у тебя "порядки". Если рекламные баннеры - там да, есть ньюансы, еще с 90х годов.

У меня получалось именно в разы, но я от рекламы далек нынче.

> Кэшировать html в мемкеше - это вообще затея дурная

это нормальная затея, когда у тебя быстрый канал и лишние лаги совсем и не нужны.
Как не нужна и пилежка диска ненужными операциями. Кэш фс в твоей современной ос - г-но разработки 98го года, вымываемое первым же 180G.avi
А в несовременной свои приколы, там тоже лучше лишних файловых операций не делать, когда результат по определению неперсистентен.
Идет удаление файлов кеша.
Обработано: 2982
Размер обработанных файлов: 4.26 МБ
Удалено: 2897
Размер удаленных файлов: 3.73 МБ
(мне ждать надоело, дальше будут цифры и похуже) вот и зачем этим мусором насиловать диск?

Но там вывод был не в том что мекэш плохо - мемкэш хорошо. bitrix cache оказался лучше nginx - что с мемкэшом, что с on-disk.
Хотя из общих соображений и казалось, что должно быть наоборот, и сборка на ходу из кэшированных кусочков проклятым пехепе должна быть в разы медленнее. Она и медленней. Но зато не вымывается и не протухает без необходимости.
И это не статика, ага.

Ответить | Правка | Наверх | Cообщить модератору

55. "Релиз http-сервера Apache 2.4.43"  –1 +/
Сообщение от Аноним (55), 05-Апр-20, 05:42 
> ньюансы

дальше не читал

Ответить | Правка | Наверх | Cообщить модератору

82. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от Аноним (3), 05-Апр-20, 17:05 
Видосы это отдельная история, их надо раздавать через aio, с этим в линуксе все было плохо до последнего времени, а новое api еще нигде не внедрено.

На freebsd же nginx+aio работает шикарнейше как сейчас так и 10 лет назад.

Ответить | Правка | К родителю #41 | Наверх | Cообщить модератору

59. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от Онаним (?), 05-Апр-20, 06:56 
Зачем раздавать статику префорком? Её можно раздавать чем угодно, хоть тем же апачем с эвентом и mod_proxy в отдельной инстанции, хоть haproxy, хоть чёртом лысым (тем же nginx'ом). Апач и хорош как раз тем, что у него есть десяток областей применения, в отличие от.
Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

72. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от нах. (?), 05-Апр-20, 10:06 
затем что если у тебя не свалка порно - то статику вполне можно раздавать префорком. Который понятен и ведет себя предсказуемо. А упрешься ты все равно не в favicon.ico, а в динамику.

Ответить | Правка | Наверх | Cообщить модератору

79. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от Онаним (?), 05-Апр-20, 14:44 
> можно раздавать префорком. Который понятен и ведет себя предсказуемо. А упрешься

А нахрена? Для раздачи статики и проксирования есть mpm_event, который в этом плане не хуже нгинха.

Ответить | Правка | Наверх | Cообщить модератору

85. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от Аноним (3), 05-Апр-20, 20:49 
Хуже.

В nginx все через евенты. А mpm_event - это тредпул, управляемый евентами.

Сравнимо с тредами для раздачи крупной статики в nginx, которые суть костыль из-за неработоспособного линуксового AIO.

Ответить | Правка | Наверх | Cообщить модератору

87. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от Онаним (?), 05-Апр-20, 21:50 
У всех AIO рабочее, кроме nginx. Ни на что не намекает, не.
Ответить | Правка | Наверх | Cообщить модератору

89. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от Аноним (3), 05-Апр-20, 23:13 
Настолько рабочее, что в ядре запилили новое AIO. Вместо того, которое у всех рабочее, да.

https://lwn.net/Articles/776703/

Ответить | Правка | Наверх | Cообщить модератору

103. "Релиз http-сервера Apache 2.4.43"  +1 +/
Сообщение от Онаним (?), 06-Апр-20, 19:12 
> Настолько рабочее, что в ядре запилили новое AIO. Вместо того, которое у всех рабочее, да.

Интерфейс у AIO угрёбищный, да, но вот за не рабочесть... Просто кто-то конкретный не осилил :)


Ответить | Правка | Наверх | Cообщить модератору

106. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от Ordu (ok), 07-Апр-20, 15:43 
> В современных (~2000+ года издания) юникс-лайк системах процесс сам по себе - примерно так же "тяжел", как и userspace реализация "epoll based fsm". Разница в реальном мире есть, но не на порядки, а максимум в разы.

Не совсем. Всё зависит от нагруженности сервера. Я нашёл-таки хороший обзор[1] с графиками, чтобы не совсем голословно излагать. До ~1000 конкурентных соединений к серверу подходы prethreaded, preforked и epoll различаются несущественно, в то время как threaded, poll и особенно forking подходы заметно отстают (в разы, как ты и говоришь). А при дальнейшем наращивании количества соединений начинаются интересности, сначала forking резко теряет производительность, потом poll. Threaded подход не столь резко, но тоже теряет. preforked сопротивляется лучше, и его протестировали поэтому аж до 8k конкурентных соединений. А когда мы переваливаем за 10k соединений, оба остающихся подхода (prethreaded и epoll) показывают резкий провал производительности.

В сравнении с вендой *nix'овый процесс может и легче, но это не значит, что он лёгкий. Это довольно крупная штука, и использовать столь крупную штуку для обработки http-запроса -- это очень часто равносильно стрельбе из пушки по воробьям: это накладные расходы на переключения контекстов. Кроме того, в ядерном шедулере есть алгоритмы рассчитывающие приоритет задач, и эти алгоритмы имеют сложность O(n) от количества задач, а это значит, что само по себе количество запущенных процессов начинает влиять на общую производительность системы. С этим можно справляться, наверное: можно пореже переключать задачи, а может быть можно какой-нибудь особо тупой вариант шедулера использовать, который с приоритетами справляется за время O(1) -- я не вдавался в подробности, даже не знаю, если честно, возможно ли это. Но такие решения будут влиять на поведение _всей_ системы, а не только веб-сервера, и поэтому они не всегда применимы.

Когда же мы засовываем всю асинхронность в юзерспейс, то, во-первых, мы можем подобрать такую реализацию, которая лучше ложится на задачу, не затрагивая при этом других частей системы (забив на приоритеты запросов, например, и обслуживая их по мере завершения блокирующихся вызовов, которые выполняются в процессе обработки запроса), и, во-вторых, мы можем избежать переключений контекстов: если какая-то неблокирующаяся часть обработки запроса выполняется микросекунды, то тогда мы можем выполнить много таких неблокирующихся частей обработки разных запросов без единого переключения контекста. То есть, техническая реализация всё равно может использовать переключения контекстов, но это софтварные переключения софтварных контекстов, которые сводятся к тому, чтобы сохранить регистры в текущем стеке, переключить стек, восстановить регистры из стека -- это на порядок (а после всех этих meltdown'ов, возможно и на два порядка) быстрее переключения контекстов между процессами через ядро. На многопроцессорной системе, эти маленькие софтварные неблокирующиеся куски тоже можно перекидывать между процессорами, точнее позволить процессам вытаскивать разблокировавшиеся куски из общей очереди и выполнять, и таким образом забивать полезной работой _все_ процессоры. Полезной работой -- это в смысле не расчётом приоритетов задач и переключением контекстов, а обработкой запросов.

Но всё это становится возможным, только если мы запускаем потоков столько, сколько есть процессоров, и разруливаем блокирования при выполнении запросов серверу в юзерспейсе, а это значит, что мы используем epoll.

С другой стороны, возможно, это не имеет отношения к php. Я в него очень давно заглядывал, он мне не понравился идеологически, и больше я не обращал на него внимания. Если я чего-то ещё и помню о нём, то это всё, я подозреваю, устарело лет на десять. Может быть php настолько тормозной, что ему начинает не хватать CPU гораздо раньше, чем ядру, даже при подходе "по fork'у на запрос".

[1] https://unixism.net/2019/04/linux-applications-performance-i.../

Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

54. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от rvs2016 (ok), 04-Апр-20, 23:41 
Про ПХП не знаю, но перлу по процессу на запрос не нужно. Один FastCGI-процесс обрабатывает много запросов.
Ответить | Правка | К родителю #24 | Наверх | Cообщить модератору

60. "Релиз http-сервера Apache 2.4.43"  +3 +/
Сообщение от Онаним (?), 05-Апр-20, 06:58 
С пыхом аналогично. Но и там, и там - процесс на запрос. Просто (кроме специальных кейсов) процесс не умирает после запроса, а обрабатывает следующий.
Ответить | Правка | Наверх | Cообщить модератору

91. "Релиз http-сервера Apache 2.4.43"  +/
Сообщение от Аноним (3), 06-Апр-20, 04:16 
Имеется в виду не то, что на каждый запрос создается новый процесс, а то, что один процесс одновременно может обрабатывать только один запрос. Это называется префорк-модель. И в перле, и в пхп оно. (Да, в перле есть еще треды, но это отдельное минное поле).
Ответить | Правка | К родителю #54 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру