Metal Messiah

Metal Messiah
Рейтинг
163
Регистрация
01.08.2010
Программистъ

Фильмы на ВКонтакте заливать от имени десятка разных аккаунтов с разных IP без пересечений чтоб не банили - вот бесплатное решение.

А если серьезно - правильно сказали, для движка один, для видео-контента пачка серверов, в виде CDN или подобия CDN, популярные видео раскладваются на максимуме серверов, малопопулярные на 1 хватит, движок сайта смотрит в базу на каких серверах лежит запрошенный файл, смотрит их доступность (проверка кроном раз в 5 мин и флаги в таблице) и выдает рандомный адрес, я так хостинг картинок делал - при закачке картинки пользователем она заливалась сразу на 2-3 сервера.

siv1987, спасибо, помогло

SELECT * FROM news WHERE MATCH (title) AGAINST ('shell бизнеса грозит конфискацией') AND id<>218504;

проверку даты убрал.

Плюс к тому у меня был косяк - если новостей по теме найдено меньше N, делался 2й запрос выборки M последних по дате новостей, где использовалось WHERE date>(time()-86400) - т.о. запрос каждую секунду менялся и не кешировался, округлил это число до 5000 секунд, теперь кешируется.

tls,

текущий VPS может просто не тянуть новую нагрузку.

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

Пока как результат после десятка просмотренных страниц время порядка 0.05 сек, максимум выброс 1 секунда с мелочью.

Завтра еще посмотрю в конце дня по логу MYSQL запросы в пиковое время, на которые уходит более секунды, если что буду пробовать InnoDB.

Спасибо за ответы. SHOW CREATE TABLE:

CREATE TABLE `news` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`date` int(4) unsigned DEFAULT NULL,
`section` int(1) unsigned DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`text` text,
`img` varchar(255) NOT NULL,
`views` int(4) unsigned DEFAULT NULL,
`gog` int(4) unsigned DEFAULT NULL,
`yan` int(4) unsigned DEFAULT NULL,
`yah` int(4) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `section` (`section`),
FULLTEXT KEY `title` (`title`)
) ENGINE=MyISAM AUTO_INCREMENT=219058 DEFAULT CHARSET=cp1251

Немного EXPLAIN: любой запрос

SELECT * FROM news WHERE id=(ЧИСЛО) LIMIT 1

выдает одинаковую табличку

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE news const PRIMARY PRIMARY 4 const 1

Приведенный выше

SELECT * FROM news WHERE id<>218504 AND date>'1404067471' AND (title LIKE '%shell%' OR title LIKE '%бизнеса%' OR title LIKE '%грозит%' OR title LIKE '%конфискацией%' OR title LIKE '%осква%' OR title LIKE '%оссии%') ORDER BY date DESC LIMIT 10

показывает

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE news ALL PRIMARY NULL NULL NULL 218069 Using where; Using filesort

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

Еще из тестов:

SELECT * FROM news WHERE id<>218504 AND (MATCH (title) AGAINST ('shell') OR MATCH (title) AGAINST ('бизнеса') OR MATCH (title) AGAINST ('грозит') OR MATCH (title) AGAINST ('конфискацией') OR MATCH (title) AGAINST ('осква')) ORDER BY date DESC LIMIT 10;

1 запуск 3.6 sec

2 запуск 7.3 sec

далее пошла выдача 7.3 страницы phpMyAdmin из кеша о_О

SELECT * FROM news WHERE id<>218504 AND (title LIKE '%shell%' OR title LIKE '%бизнеса%' OR title LIKE '%грозит%' OR title LIKE '%конфискацией%' OR title LIKE '%осква%') ORDER BY date DESC LIMIT 10

4.38 sec

5.57 sec

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

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

блин отрезал лишнее :)

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

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

ssh-туннель. не?

или нужны сервисы для постоянного доступа к ним?

Сайт держал на 400Мб ОЗУ (nginx+apache), в пиках открывался медленно но стабильно. На 512 работать обязан, а так берите на сколько хватает средств.

Соответственно в конфигах количество рабочих процессов править надо

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

Трындец, ошибку выдавал Smarty, файл с каким-то плагином не найден, вылечил удалением кеша и скомпилированных шаблонов.

Нет. Скрипт выдает либо контент без хедера (автоматически код 200), либо редирект (301), либо не найдено (404). Других хедеров нет в скрипте.

Всего: 570