Как оптимизировать этот сайт. Нужны общие советы - PullRequest
2 голосов
/ 02 февраля 2011

это мой первый вопрос, касающийся оптимизации конкретного сайта.Несколько месяцев назад мы запустили www.kissid.ro для одного из наших клиентов, который является своего рода веб-сайтом сообщества.

Все отлично работает, но теперь этот сайт становится все больше и большепоказывает некоторую медлительность при загрузке страниц.

Характеристики сервера:
- PHP 5.2.1 (я думаю, что нам нужно обновить до 5.3, чтобы использовать новый сборщик мусора)
- Apache 2.2
- Quad Core Xeon Processor@ 2,8 ГГц и 4 ГБ оперативной памяти DDR3.
- XCACHE 1.3 (мы добавили это несколько месяцев назад)
- Mysql 5.1 (в качестве движка используется innodb)
- платформа Codeigniter

Вот что мы сделали до сих пор и что мы намерены делать дальше:

Помимо xcache, мы на самом деле не используем механизм кэширования, потому что большая часть контента запускается, а кроме этого мы не делали 'Мы хотели оптимизировать преждевременно, потому что мы не знали, чего ожидать от потока трафика.С другой стороны, мы установили memcached и хотим реализовать систему кэширования на основе memcached.

Что касается структуры базы данных, мы достигли 3NF с большинством наших таблиц, и да, у нас есть несколько медленных запросов (который мы планируем оптимизировать), но я думаю, потому что таблицы, которые генерируют медленные запросы, предназначены для комментариев в блоге (~ 44 408 строк) / отслеживания пользовательских журналов (~ 725 837 строк) / комментариев пользователей (~ 698 964 строк) и т. д., которые являются довольно большими таблицами,Вся база данных на данный момент составляет 697,4 МБ.

Кроме того, вот некоторые статистические данные за январь 2011 года:
Уникальных посетителей в месяц: - 127,124
Уникальных просмотров в месяц: 4,829,252
Уникальных посещений в месяц: 242,708

Ежедневнов среднем:
Уникальных новых посетителей: 7,533
Уникальных новых просмотров: 179,680

Просто дайте мне знать, если вам нужно больше деталей.
Любой совет высоко ценится.

Спасибовы.

Ответы [ 6 ]

2 голосов
/ 02 февраля 2011

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

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

Затем перейдите к следующему слою (который, как я полагаю, является вашей базой данных). Обычно с точки зрения неспециалиста, когда кто-то упоминает InnoDB MySQL, мы предполагаем, что существуют индексы, создаваемые для оптимизации и операций поиска. Использование индексов также весьма важно, потому что вы не хотите индексировать что-то неправильно и ухудшать ситуацию. Я советую это сделать, чтобы эквивалентный персонал DBA устранял неполадки с помощью промежуточной среды.

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

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

Удачи!

1 голос
/ 04 февраля 2011

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

Ну, проблема была в основном из-за apache, у меня был журнал доступа почти 300 ГБ, который вПолночь была проанализирована для генерации статистики webalizer.В основном, когда это происходило, сайт работал очень медленно.Я отключил webalizer для домена, очистил журналы, и что посмотреть, он снова очень быстрый, не имеет значения, когда вы обращаетесь к нему.

У меня сейчас есть только несколько медленных запросов, к которым я склоненисправить сегодня.
Я также обновил CI 2.0 Reactor, как это было предложено, и начал использовать драйвер memcached.

Кто бы мог подумать, что журналы apache могут быть такими проблемными ...

1 голос
/ 02 февраля 2011

Этот сайт обладает отличными ресурсами http://www.websiteoptimization.com/
Упомянутые книги превосходны.Здесь слишком много техник для перечисления, и мы не знаем, что вы уже пробовали.

0 голосов
/ 04 февраля 2011
  1. Кэшируйте как можно больше вызовов базы данных.В моем приложении CI у меня есть таблица настроек, которая редко изменяется, поэтому я кеширую все сделанные ей вызовы, так как постоянно запрашиваю таблицу настроек.
  2. Кэшируем ваши представления и даже ваши контроллеры.Я обычно кеширую столько, сколько могу в своих приложениях CI, а затем обновляю кеш при изменении файла.
  3. Только автозагрузка важных библиотек, моделей и помощников.Я видел, как люди автоматически загружали до 10 библиотек, несколько помощников, а затем модель.Вам действительно нужно только автоматически загружать базы данных и библиотеки сессий, если вы их используете.

Что касается пункта № 3, вы случайно загружаете много вещей из файла config / autoload.php?Это может помочь ускорить загрузку только тех вещей, которые вам нужны, в ваши контроллеры, если они вам нужны, за исключением, конечно, библиотек сеансов и баз данных.

0 голосов
/ 03 февраля 2011

Все выглядит довольно хорошо - если обновление codeigniter является опцией, новый codeigniter 2.0 (реактор) добавляет поддержку memcache (новый драйвер Cache с файловой системой, APC и поддержку memcache). Если вы уже используете xcache, возможно, стоит взглянуть на эти новые дополнения.

Когда кеш-объектов было недостаточно для нашей многодоменной платформы, которая видела огромный трафик, мы пошли по пути использования большего количества оборудования - оперативной памяти, серверов / базы данных. Затем мы перешли к кластеризации баз данных, чтобы справиться с большой нагрузкой на один аккаунт. А теперь переключение с apache на nginx ... Это бесконечная битва, но для нас сработало умение разбираться в том, что мы кэшировали, и увеличивать объем памяти сервера, а затем распределять эту нагрузку по серверам ...

0 голосов
/ 02 февраля 2011

Судя по статистике, я не думаю, что у вас проблемы с нагрузкой ... на догадку, я бы сначала посмотрел на базу данных. Разделение базы данных может быть хорошим местом для начала.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...