Коллеги, спасибо! ...
Webnode 25.10.2012 11:25
Спасибо за советы, некоторые очевидные вещи как-то вылетели у меня из головы.
Я немного расскажу про конфигурацию сервера VPS и цифры приведу.
512RAM/HDD-40GB
MySQL занимает около 200мб. Своп FreeBSD почти не использует, разве что из любви к искусству, вот только дашь ей такую возможность - что-то запишет, хозяйственная такая ОС.:)
Основное назначение сервера - быстро отдавать текст + картинки и немного искать Sphinx и иногда переходить по ссылкам вне сайта, к коим и был применён механизм хеширования ссылок. Запись нечаста - несколько тысяч записей в сутки, распределено равномерно по классической "шляпе" посещений сайтов.
Сначала я добавил в лог время генерации страницы в nginx, удивился тормозам и переделал базу, каждая 2,5 млн страниц теперь выдаются за 2 запроса к базе и максимум за 0.100 сек., обычно 0.060-0.080 сек.
На этом фоне примитивная выдача ссылки за 1-1.5 сек считалась просто издевательством и hashfile очень помогает - вот кусок лога:
178.177.158.206 0.077 - [25/Oct/2012:08:58:16 +0400] "GET /link/6eb25581236637e826d257d7dbfa4d07b1a87c7b HTTP/1.1" 302 ...
это средний вариант, есть ещё и такой:
212.19.5.140 0.009 - [25/Oct/2012:09:52:09 +0400] "GET /link/04097d11ad0c79dc99faee48c2f95dc23da4bc77 HTTP/1.0" 302 ...
Тут вступает в игру кеширование nginx (302 ответ на 20 минут) и дальше оттачивать просто бессмысленно. То есть сервер от популярной ссылки защищён замечательно - хватило бы канала...
Пока это сильно лучше любого решения на SQL, это полное время, с запуском Parser-а и коротенькой записью в статистику переходов (тут конечно MySQL, головой понимаю, что hashfile погрязнет в локах).
Быстрый сайт нравится роботам, Google ходит 5-8 раз в секунду, Yandex - примено 1-3 раза в секунду. Живые пользователи тоже есть, до 100+ одновременных доходило в Google Analytics. Ещё Sphinx (весь задушенный throttle) каждые несколько часов переиндексирует эти разрастающиеся 2,5 млн. страниц...
Цифры выше взяты в среднее время, когда совсем тяжко (см. выше) - 0.5-0.9 сек на ответ. Считаю, это хорошо.
Хвастаться окончил, разрешите идти!
Если вдруг я буду испытывать проблемы с производительностью и придётся снова перейти на <что-то>SQL сделаю следующее примерно в таком порядке:
1. Захеширую таблицы, 16 шт. сделаю и поле binary с коротким индексом приделаю (tnx Sumo)
2. Добавлю наконец памяти и сделаю этим кеш индексов менее вымываемым, ведь я не только ссылки редиректю..
3. Перееду на выделенный сервер (tnx Vint)
4. Поставлю SSD и индексы на него перенесу.
5. Сделаю кластер из п.4 и уеду к пальмам, подальше от цивилизованных соблазнов, ибо разумных и безопасных применений таким заработанным деньгам не найду. :-D
Спасибо!