Кэширование, CDN - они одинаковы для сайта PHP Yii?Как использовать его для динамического php сайта? - PullRequest
1 голос
/ 02 марта 2012

У меня динамический php (основанный на Yii Framework) сайт. Пользователь должен войти, чтобы сделать что-нибудь на сайте. Я пытаюсь понять, как работает кэширование и CDN; и я немного растерялся.

Кэширование (memcache) :

Мой сайт содержит большое количество CSS, JS и изображений. Мне дали понять, что включение кэширования («memcache»?) Значительно ускоряет мой сайт. Но это меня смутило. Как кеширование помогает? Я имею в виду, как вы можете кэшировать то, что выходит из БД для каждого пользователя отдельно? Например, пользователь-1 входит в систему, он видит свою панель управления. Пользователь-2 входит в систему, пользователь 2 увидит свою панель управления.

Как определить, что кешировать? Кроме того, как включить кэширование (memcaching)?

CDN:

Мне сказали использовать сеть доставки контента, такую ​​как CloudFlare . Предполагается, что мой сайт автоматически кешируется. Итак, когда мой пользователь-1 войдет в систему, что он будет кешировать? Будет ли кэшироваться только CSS, JS и изображения домашней страницы? Потому что все остальное требует входа в систему? Что происходит, когда пользователь выходит из системы? Я имею в виду, мешают ли "сеансы" работе CDN?

Уменьшает ли загрузка изображений через CDN значительную нагрузку на мой сервер? У меня не так много денег для получения конфигурации кластерного сервера. Итак, я просто хочу, чтобы мой (общий) сервер мог выделять все свои ресурсы на обработку кода PHP. Итак, какую нагрузку я могу сэкономить, используя «кэширование» (что-то вроде memcache) и / или «CDN» (что-то вроде CloudFlare)?

Наконец

Какую общую стратегию реализовать в этом сценарии для кэширования, cdn и базовой оптимизации производительности? мне нужно внести какие-либо изменения в мой php-код, чтобы включить CDN, например, CloudFlare, и включить / внедрить / настроить кэширование? Что я могу сделать, чтобы это заняло меньше всего времени на разработку / разработку кода и заставило бы мой сайт работать намного быстрее?

Ой, подождите, некоторые из моих страниц, такие как страница "о нас" и т. Д., Тоже будут статичными html. Но они не получат столько хитов. За исключением, может быть, страницы iFrame, которая будет использоваться для моей страницы Facebook.

Ответы [ 3 ]

3 голосов
/ 03 марта 2012

Я на самом деле работаю в CloudFlare и подумал, что смогу решить некоторые проблемы.

"нужно ли мне вносить какие-либо изменения в мой php-код для включения CDN, например CloudFlare, а включить / внедрить / настроить кеширование? А что я могу сделать это заняло бы наименьшее количество времени для разработчиков / разработчиков и сделает мой сайт работает намного быстрее? "

Нет, ничего, кроме необходимости переписывать URL-адреса и т. Д. Мы автоматически кэшируем статический контент по расширению файла. Однако для этого нужно изменить свой DNS, чтобы он указывал на нас.

Уменьшает ли загрузка изображений через CDN значительную нагрузку на мой сервер?

Да, и это также должно помочь большинству посетителей быстрее получить доступ к сайту и сэкономить при этом достаточную пропускную способность.

"Ой, подождите, некоторые из моих страниц, такие как страница" о нас "и т. Д., Будут статический html тоже. "

CloudFlare не кэширует HTML по умолчанию. Вы используете PageRules для настройки более сложных параметров кэширования для таких вещей, как статический HTML.

1 голос
/ 02 марта 2012

Кэширование помогает, потому что вместо выполнения дискового ввода-вывода для каждого пользователя данные сохраняются в памяти, то есть memcached. Это обеспечивает ЗНАЧИТЕЛЬНОЕ увеличение производительности.

Memcache обычно используется для кэширования данных, то есть результатов запроса. http://pureform.wordpress.com/2008/05/21/using-memcache-with-mysql-and-php/ Есть много учебников.

Я только когда-либо использовал amazon s3, который не совсем CDN. Это скорее платформа хранения, но она помогает снизить нагрузку на мои собственные серверы при обслуживании мультимедиа.

Я бы поместил все ваши статические ресурсы в CDN, чтобы ваш собственный сервер не обслуживал их. Это не потребует никакой модификации вашего php-кода. Это включает в себя JS и CSS. Для ваших статических страниц (вашей страницы about) я бы позаботился о том, чтобы php не обрабатывал это, поскольку для этого нет причин. Ваш веб-сервер должен обслуживать его напрямую.

Кеширование потребует изменений в вашем коде. Для кеширования нормальный поток есть: 1) пользователь делает запрос 2) проверить, есть ли данные в кеше 3) если его нет в кеше, сделайте запрос к БД и поместите его в кеш 4) если он находится в кеше, извлеките его 5) вернуть данные.

Вы можете кэшировать все, что требует дискового ввода-вывода, и вы должны увидеть ускорение.

1 голос
/ 02 марта 2012

Memcached работает путем хранения информации базы данных (обычно с удаленного сервера или даже механизма базы данных на том же сервере) в формате плоского файла в файловой системе веб-сервера. Прямой доступ к плоскому файлу для извлечения данных, хранящихся в регулируемом формате, намного быстрее, чем каждый раз доступ к этим данным из удаленного запроса. Это обычно полезно, когда у вас есть данные, которые можно безопасно хранить в течение определенных периодов времени, поскольку они не подвержены регулярным изменениям.

Способ, которым это работает, заключается в том, что если вы хотите сохранить информацию об учетной записи пользователя в кэше, чтобы ускорить загрузку страниц, на которых зарегистрирован этот пользователь. Вы должны загрузить информацию и кэшировать ее локально. При любых последующих запросах этих данных он будет загружаться за долю времени, которое обычно требуется для загрузки этой информации из самой базы данных. Очевидно, что вам необходимо убедиться, что вы обновляете / перечитываете эту информацию, если пользователь изменяет ее при входе в систему, но вы значительно сократите время, необходимое для обслуживания страниц, если вы внедрите систему кэширования, которая может минимизировать время, затрачиваемое на база данных.

Я лично не знаком с CloudFlare, поэтому не могу дать никаких советов на этот счет, но с точки зрения реализации кэширования в вашем приложении вы должны проверить:

http://code.google.com/p/memcached/wiki/NewOverview

И прочитайте остальные записи вики, которые описывают установку / внедрение / и т.д. Это должно помочь вам начать правильный путь.

...