Перейти к контенту
  • 0

Большой форум


Chrno

Вопрос

Моему форуму пошел пятый год и стали одолевать мысли о дальнейшей жизни.

Ситуация такова: форум порядка 500 тысяч записей, одновременно ходят порядка 100 пользователей, в день 500 хостов, 3200 визитов. Сейчас живу на VDS (750 МГц/1536 Мб адресуемая/512 Мб гарантированная). Возникает ощущение, что достигнут некий предел. И запросы оптимизировались, и полнотекстовый индекс с таблицы постов убран (работает сфинкс), но крутится вот-вот впритык (в моменты пиковых загрузок падают сервисы - чаще всего php).

Вопрос первый: по количеству записей. Имеет смысл создать второй архивный форум и туда сбрасывать старые записи?

Сейчас разворачивать бекап базы - задача на пол-дня (очень здоровый выходит).

Вопрос второй: При какой загрузке наступает момент неизбежного перехода на выделенный сервер? Хотелось бы оттянуть этот момент, делалось все на голом энтузиазме и денег на сервер взять неоткуда.

Буду раз любым мыслям на эту тему.

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Сложно-то как все. ;) Я вот всегда задаю вопрос: сколько стоит один час квалифицированной работы специалиста по php и юниксу, и сколько этих часов вам понадобится для реализации описанного вами решения. И сколько часов понадобится для поддержания данной гибридной схемы в будущем. Вообще практика показывает, что гибридные схемы очень тяжело поддерживать и развивать.

 

Тем более что на групповом хостинге вы можете сделать все абсолютно верно, но форум все равно будет жить кое-как, потому что нагрузка на сервер MySQL у провайдера превысит норму. А IPB только для вывода главной страницы использует 14 запросов.

 

И тогда все равно вам придется заплатить лишние 10-15 долларов в месяц, чтобы уйти на виртуальный сервер и самому регулировать ресурсы, которые будет получать движок форума. Тогда возникнет вопрос - зачем нужны были такие сложные и, повторюсь, по-своему замечательные действия по переписыванию кода IPB... :D И стоили ли они тех 10-15 долларов в месяц, которые вы пока выигрываете в борьбе за оптимизацию.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Сложно-то как все.

Все намного сложней. :D

Я строю систему под вполне определенные задачи. Мне не очень важен поиск по старым сообщениям. При этом хранение информации в файлах жизненно необходим для межсерверного обмена информацией, когда на другом домене и на другом сервере импортируется информация из форума. Можно конечно инклайдить php-файл из форума, который будет брать информацию из форумной БД, при этом снова нагружая и так самый ненадежный компонент системы. А можно просто вытянуть нужные файлы и обработать информацию на сервере-получателе.

 

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

 

А вот уже чуть более функциональное создание: http://stenocardia.ru/ На хосте лежит только index.php да графика; вся информация берется с форума в совсем другом домене, пока еще на одном сервере, но это уже не имеет значения.

 

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

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Впечатлен! Без шуток. Замечательные по тематике форумы. Ответил на вопросник про стенокардию - понравилось!!

 

Знаете, как бы я решил проблему распределения контента между форумами?

 

1. Добавляете пользователя MySQL, который имеет право на SELECT из таблицы ibf_posts.

 

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

 

И не нужно лезть в код форума-"донора" (ох, уже на вашу терминологию незаметно перелез :D ). Клиентский форум в любой момент забирает ровно столько контента, сколько ему нужно. Нет проблем с обновлением движка вашего форума и т.п.

 

Для этого, конечно, надо иметь администраторский доступ к БД. Но зато сделали раз - и забыли. В общем, переходите скорее на VDS. Я вам готов помочь с наладкой на новом месте - как созреете, пишите мне в личку.

 

 

Кстати у меня вопрос по настройкам httpd

Лог httpd-access.log растет в одном файле. Нехорошо это тем, что он уже 20+ ГБ (!!!)

Можно где-нибудь в конфиге указать ограничение его размера, чтоб он автоматически разбивался на части при достижении оного (в php.ini видел нечто подобное)?

До кучи. В Линуксы по умолчанию входит утилитка logrotate, которая крутит логи и может много чего делать - prerotate, postrotate, зиповать, посылать логи по почте и т.п. По умолчанию она крутит раз в неделю все логи в /var/log. Можете посмотреть документацию. Для httpd - не самый удачный выбор, потому что: 1. Надо прибивать веб-сервер, а на загруженной машине он может гаситься при включенном KeepAlive несколько минут. 2. Логи переименовываются "по цепочке", это неудобно, если предполагается их дальнейшая обработка анализаторами логов. Скажем так, logrotate - для тех демонов, доступа к формированию логов которых вы не имеете или нет желания и смысла с ними возиться.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

мне нравится запуск по крону скрипта FatCat

не нравится там только apache_restart - зачем оно нужно?

может просто touch $a и его соответствующий chmod сделать, ведь рестартуем мы,как я понял, только для того, чтобы создались убранные нами файлы?

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Нужно, нужно, поверьте на слово. :D Повторюсь, в Апаче возможно гораздо более тонкая настройка логов - лучше воспользоваться ей. На следующем этапе вам захочется прикрутить к логам webalizer или awstat - снова придется голову ломать, как данные для анализа не потерять. Или такая задачка, как хранить логи в архиве на предмет ретроспективного анализа (взломы, атаки, производительность и т.п.) - придется как-то их дополнительно именовать, сортировать записи и т.п., потому что с logrotate и им подобными программами у вас будет получаться набор файлов вида .log/.log.1/.log.2 и т.д., а что у них внутри - от названия не зависит. Многие программы не позволяют нормально настраивать и крутить свои логи, для них logrotate и придумали, а в Апаче прокрутка логов уже заложена в стандартном пакете.
Ссылка на комментарий
Поделиться на других сайтах

  • 0

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

можно я буду спрашивать у специалистов?)

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Знаете, как бы я решил проблему распределения контента между форумами?

 

1. Добавляете пользователя MySQL, который имеет право на SELECT из таблицы ibf_posts.

 

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

Программист, работавший до меня, именно так и делал.

И быстро столкнулся с проблемой: сетка сайтов довольно большая; я видел пиковую активность более 50 000 запросов в минуту по всей сетке. Представляете, если на один sql-сервер падает такая лавина?

Еще до меня программист пошел по пути создания файлов; но разработал совершенно морочную систему имен этих файлов и открытые инклайды имен файлов в переменные, после чего сайты регулярно ломали мелкие хакеры.

 

Я лишь упростил систему: все обращения только по айдишникам топика или поста; обращения на входе интвалятся; имя и путь к файлу определяются айдишником.

 

 

 

мне нравится запуск по крону скрипта FatCat

не нравится там только apache_restart - зачем оно нужно?

Иначе не обнулится файл лога.

А чем он так плох?

Вот его код:

#!/bin/sh
kill -HUP `cat ~/run/httpd.pid`

Делов-то на пол-секунды...

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Программист, работавший до меня, именно так и делал.

И быстро столкнулся с проблемой: сетка сайтов довольно большая; я видел пиковую активность более 50 000 запросов в минуту по всей сетке. Представляете, если на один sql-сервер падает такая лавина?

Многовато запросов будет... Но:

 

1. MySQL очень не хило оптимизирован, и запросы, кстати, кэширует. Так что завалить его на выделенной машине простыми запросами очень сложно. На невыделенной - да, часто тот же Апач отъедает у него ресурсы и оба сервера уходят в даун.

 

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

 

Быстрее уж точно не получится. Т.е. на уровне интуиции: раздача кэшированных файлов легким сервером вроде Squid'a будет заведомо быстрее и экономнее по ресурсам, чем передача статических файлов через здоровенный скрипт PHP тяжелой Апачей.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
чем передача статических файлов через здоровенный скрипт PHP тяжелой Апачей.

Не так.

Давай лучше покажу.

http://vesvalo.net/index.php?act=Print&amp...n=0&limit=1 - страница с выводом одного сообщения; айдишник сообщения 69602.

Разбиваем на тысячи айдишник, получаем имя директории и имя файла.

Если я хочу получить этот текст на другой сайт, я не буду ломиться через index.php, я запрошу напрямую http://vesvalo.net/arc/69/602.arc.gz

Таких запросов даже шаред спокойно держит до 500 в секунду.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Ага, понятно. Тогда смысл в легком сервере остается в том, что он ест значительно меньше памяти и чуть меньше процессорных ресурсов. Но - пока ваш хостинг справляется - об этом действительно можно не беспокоиться. Пущай хостер не спит! :)

 

...Анекдот вспомнил. Последняя фраза: "Но смекалка какова!" ;) А вообще круто сделали! :D

Ссылка на комментарий
Поделиться на других сайтах

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

можно я буду спрашивать у специалистов?)

Если не отходить от функциональности Апача, то можно воспользоваться http://httpd.apache.org/docs/1.3/logs.html#piped. Если хочется удобнее управлять логами, например чтобы в именах архивных файлов была полная дата или ещё что-то, то можно добавить в dayly/weekly cron скрипт такого вида, и при необходимости допиливать его.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Собственно, это то, о чем я писал несколькими постами выше. Но! Если уж связываться с внешними утилитами, которые крутят логи на живом сервере, логичнее делать не graceful, а полный рестарт.
Ссылка на комментарий
Поделиться на других сайтах

  • 0

FatCat

При поиске по zip-ваным файлам ты не построишь поисковый индекс это и есть потолок в скорости поиска таким макаром. Вот к примеру поисковый движок с построением индекса http://risearch.org/rus/risearch_php/index.html .

Можно еще скинуть не в zip-файлы а в базу SQLite и уже по этой базе поиск мутить. Но это все дикий изврат.

 

Как вариант насчет старых тем: Разбиваем таблицу постов на более мелкие таблицы например по годам (или если надо то можно и по месяц + год).

Да возни в коде движка море, но новые темы тормозить из-за старых уже не будут. Был подобный мод, он там был перенос постов просто в архивные посты и соответственно в одну архивную таблицу.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
FatCat

При поиске по zip-ваным файлам ты не построишь поисковый индекс это и есть потолок в скорости поиска таким макаром.

Повторюсь, возможность поиска для меня сейчас стократ менее значима, чем дисковое пространство.

 

Если же поиск станет важней экономии мегабайтов, есть простое решение: кешировать не результаты поиска, а цельный текстовый файл: при первом поиске одновременно с выдачей результатов поиска пишется проиндексированный текстовый файл; имя файла содержит 10 цифр, берущихся из time(). При повторных поисках используется уже текстовый файл; по истечениии заданного времени делается перекеширование уже в фоновом режиме: результаты поиска отдаются еще по старому файлу, затем файл удаляется и генерируется новый.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Повторюсь, возможность поиска для меня сейчас стократ менее значима, чем дисковое пространство.

Иногда Кулибины рождаются из Плюшкиных. ;)

 

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

 

Кстати, вот еще ход придумался на основе того, что реализовал уважаемый FatCat. Запускаем по крону раз в час скрипт, который шерстит ibf_posts и генерирует зипованные файлы: один топик - один файл. Естественно, база файлов перегенерируется не полностью, а обновляются/создаются только обновленные/новые топики. Поскольку поля post_date и topic_id проиндексированы, такое обновление происходит очень быстро.

 

Преимущества: 1. Не надо лезть в код форума. 2. Не нужна ручная редакторская работа по объединению постов топика в один длинный пост. 3. "Раздавать" таким образом можно все топики, а не только старые, архивные. 4. Посадить на раздачу можно "легкий" сервер вроде nginx/lighttpd, которые, кстати, можно поднять на непривилегированном порту в рамках тарифного плана уважаемого FatCat. :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Дальнейшие эксперименты, полагаю, проводить нет большого смысла, т.к. таблица и так уже почти под гигабайт. Машина достаточно скромная, да и в принципе при таких размерах индекса здесь тормозить будет не процессор, а диск. Похоже, что-то все же у вас со структурой данных... :D

Разобрался, откуда у меня шел лавинообразный прирост времени при увеличении БД на реальном форуме, а в тестовых таблицах все ровненько.

Удалил полнотекстовый индекс, и все просто летает.

Причем сделал сначала случайно так, что полнотекстовый поиск в настройках поиска включен, а индекс удален - скорость поиска не изменилась; а по русским словам как искал без морфологии, так и ищет.

Для пробы переключил настройки на поиск по LIKE - и сразу тормоза при поиске.

Оставил у себя полнотекстовый поиск без полнотекстового индекса: звучит дико, но работает шустро и качественно, я доволен.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Лютое шаманство какое-то..

 

Возможно, я что-то путаю, но когда полтора года назад копался с полнотекстовыми индексами, оно мне писало ошибку при попытке сделать MATCH(...) AGAINST(...) по полям, на которых FT индекса нет.

 

А Сфинкс не пробовали? В теории, он намного круче и FT, и, конечно, LIKE.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.