Когда пользователь заходит на php-страницу, то сервер выделяет оперативную память для выполнения php скрипта. А есть на страницу одновременно зашло 100 тыс человек, то сервер выделит 100000 * объем под один скрипт? если да можно настроить чтобы выделялась только память под данные, а под бинарный php-код выделялась оперативка только один раз ? если нельзя, то хотя бы как уменьшить объем памяти под каждую копию одного и того же выполняемого php скрипта?
Спустя 1 час, 38 минут, 46 секунд (5.09.2011 - 03:06) kirik написал(а):
Цитата (radiante @ 4.09.2011 - 18:27) |
А есть на страницу одновременно зашло 100 тыс человек, то сервер выделит 100000 * объем под один скрипт? |
Сначала нужно достичь такое посещаемости, чтобы одновременно зашло 100к человек
Есть такие штуки как кэшеры байт-кода (APC, eAccelerator..) - они позволяют уменьшить время выполнения скриптов посредством кэширования интерпритированного кода.
Ещё есть CGI - как раз то, о чём вы говорите. Выполняется скрипт один раз, а запросы идут через него. Но тут нужно уметь писать CGIшные программы.
Для php полноценного cgi нет, да и впринципе он не нужен. PHP создавался таким какой он есть, и пытаться сделать из него что-то другое - пустая трата времени.
Воспользуйтесь python'ом, если нужен cgi-режим.
Спустя 1 день, 12 часов, 13 минут, 58 секунд (6.09.2011 - 15:20) radiante написал(а):
Цитата (kirik @ 5.09.2011 - 00:06) | ||
Сначала нужно достичь такое посещаемости, чтобы одновременно зашло 100к человек Есть такие штуки как кэшеры байт-кода (APC, eAccelerator..) - они позволяют уменьшить время выполнения скриптов посредством кэширования интерпритированного кода. Ещё есть CGI - как раз то, о чём вы говорите. Выполняется скрипт один раз, а запросы идут через него. Но тут нужно уметь писать CGIшные программы. Для php полноценного cgi нет, да и впринципе он не нужен. PHP создавался таким какой он есть, и пытаться сделать из него что-то другое - пустая трата времени. Воспользуйтесь python'ом, если нужен cgi-режим. |
Четно скажу, ты бред написал), вопрос был глубже, но пока я не нашел ни одного человека кто бы хотя бы понял суть вопроса...
Ладно опишу тут что выбрал я, кому может интересно будет.
А шняги типа eAccelerator,Zend,Apache.. в отстойник!
Конечно я понимаю, все зависит от конкретной задачи, вот вкратце: Несколько простых небольших php скриптов + mysql , но большое кол-во одновременных запросов к страницам от пользователей через серверные редиректы на php скрипты. большая БД, чтение по индексам = 95% от всех запросов, запись/обновление базы = 5%.
Прошу кидайте коменты, ниже написал два вопроса.
Оптимизация.
1. использовать php транслятор HipHop, он же кеширует байткод.
2. кешировать обращения к MySQL, использую Memcached.
3. кешировать статику и динамически создаваемые скриптами html страницы, используя Squid или лучше Varnis.
4. разделение статики и динамики, под первое юзать lighttpd или nginx на отдельном ip или поддомене, для второго web-сервер HipHop.
Получается например такая связка: Linux+lighttpd+Varnis+HipHop+Mysql
Масштабируемость. кластеризация БД - поддержка нескольких датацентров и возможность добавления новых машин в работающий кластер прозрачно для ваших приложений. (MySQL для этого не особо годиться - http://www.linuxshare.ru/docs/mysql/nocluster.html). но можно использовать Cassandra или Riak.
Стабильность. Про утечки памяти на такой системе кто что может сказать?
Вопросы:
1. как сделать редиректы на php страницы (например с /dir/page1234 на page.php?n=1234 ) ? т.к. при использовании lighttpd+hiphop или nginx+hiphop получается два web-сервера, какой надо настраивать чтобы сделать редирект на php страницы? на lighttpd в url.rewrite-once = что то типа этого "^/dir/(\d+)/?$" => "page.phpn=$1" , но может надо или лучше настраивать через сервер hiphop?
2. как работает Memcached, Squid, Varnis если под сайт отведены несколько физических серверов? из оперативки или жесткого диска какого сервера будет браться кеш? можно ли то сделать прозрачно?
Спустя 5 часов, 31 минута, 51 секунда (6.09.2011 - 20:52) VELIK505 написал(а):
Eaccellerator - да уже устарел помойму его прекратили поддержку даже
XCACHE установите себе на сервер и радуйтесь - это не отстойник у Контакта даже Xcache стоит.
Если совсем худо будет то можно php как fastcgi пересобрать а не как модуль apache
PHP с HIPHOP ставиться не для уменьшения оперативной памяти а для более быстрой работы php так как он php переводит в сишку.
Memcache или Memcached что больше нравиться то и ставьте. Мемкеш он хранит всё в оперативной памяти.
У меня допустим sql запросы там храняться. Пользователь зашёл на страницу и выполнился запрос к БД и записался ему хеш ключ (md5) ключ полетел в оперативную память напрямую.
Обновления мемкеша стоит 10 мин. В течении 10 минут заходят другие типы и идёт проверка если такой ключ есть то запрос не выполняеться а отдаёться из оперативки!
Так же мемкеш некоторые в редиске хранят.
И вообще не видел не 1ого проекта у которого 100 000 человек сидит онлайн на 1ой странице чтобы он был написан на php
XCACHE установите себе на сервер и радуйтесь - это не отстойник у Контакта даже Xcache стоит.
Если совсем худо будет то можно php как fastcgi пересобрать а не как модуль apache
PHP с HIPHOP ставиться не для уменьшения оперативной памяти а для более быстрой работы php так как он php переводит в сишку.
Memcache или Memcached что больше нравиться то и ставьте. Мемкеш он хранит всё в оперативной памяти.
У меня допустим sql запросы там храняться. Пользователь зашёл на страницу и выполнился запрос к БД и записался ему хеш ключ (md5) ключ полетел в оперативную память напрямую.
Обновления мемкеша стоит 10 мин. В течении 10 минут заходят другие типы и идёт проверка если такой ключ есть то запрос не выполняеться а отдаёться из оперативки!
Так же мемкеш некоторые в редиске хранят.
И вообще не видел не 1ого проекта у которого 100 000 человек сидит онлайн на 1ой странице чтобы он был написан на php
Спустя 1 час, 7 минут, 23 секунды (6.09.2011 - 21:59) kirik написал(а):
Цитата (radiante @ 6.09.2011 - 08:20) |
Четно скажу, ты бред написал), вопрос был глубже, но пока я не нашел ни одного человека кто бы хотя бы понял суть вопроса... |
Спрашивайте нормально, тогда может и получите релевантный ответ.
Вы спрашивали:
Цитата (radiante @ 4.09.2011 - 18:27) |
как уменьшить объем памяти под каждую копию одного и того же выполняемого php скрипта? |
ответ - cgi режим, коего в пхп нету.
Вторым постом вы спрашиваете про организацию архитеркуры highload бэкенда, что никак не вяжется с первым вопросом.
Цитата (radiante @ 6.09.2011 - 08:20) |
Apache.. в отстойник! |
Цитата (radiante @ 6.09.2011 - 08:20) |
2. как работает Memcached, Squid, Varnis если под сайт отведены несколько физических серверов? из оперативки или жесткого диска какого сервера будет браться кеш? можно ли то сделать прозрачно? |
При чём здесь мемкэшд и диск? Сам мемекэш отлично масштабируется на сколь угодно большое количество серверов, при минимальных затратах со стороны разработчика.
Просто у меня создаётся впечатление, что вы начитались кучу умных статей, и сейчас теретически пытаетесть что-то собрать. Так не бывает. Всё познаётся через свой опыт внедрения новых технологий.
И если уж так всё круто, умно, и быстро, почему mysql? Почему не postgres? У этой БД бОльшие возможности в плане функционала и в плане масштабируемости (Slony/SymmetricDS)..