If this is a first time you visiting Scrolls, please register in Fight Club. If you already registered, please authorize on Fight Club start page with your login and password.
В блоге очень много было рассказов о том, как написать какой-то функционал и как что-то ускорить. Конечно, все этого, очень здорово, но мне кажется сообщество не совсем понимает, что этими постами оно дает в руки бомбу замедленного действия будущим программерам клановых сайтов (как показывает практика сервер БК можно положить обычной ссылкой на полный лог великой ).
По моим наблюдения в БК очень мало сильных программистов, тех, которые имеют за плечами проекты не в 200-300 хостов в сутки, а у которых есть сайты, на которых одновременно находится несколько десятков тысяч человек. Я бы хотел в этом посте затронуть тему оптимизации сайта под высокие нагрузки.
В БК о высоких нагрузках кроме некоторых кланов никто и не задумывался, а те, кто с этим сталкивались решали ее просто - покупали более мощные сервер или переходили на новый тарифный план. Некоторые пытались запретить очень частые запросы пользователей на сайт, последовав по стопам БК, хотя в большинстве случаев необходимости не было.
Я видел некоторые клановые сайты, на которых при выводе ника автора новости, происходило обращение к информации о персонаже БК. Это п****ц и так делать нельзя. Если вы так сделали - убейтесь пожалуйста. Спасибо.
Я видел, как писали вывод состава на PHP, когда по крону раз в 5 минут запускался скрипт и вытягивал инфу о персонаже, чтобы получить его оналайн. Вы правда думаете, что у сокланов нет кнопочки в БК, в которой можно посмотреть весь состав? А может вы решили сделать доброе дело для тех, кто хочет отрабатывать по вашему клану ЧС? А может вы думаете, что нуб 8 левела, который зайдет к вам на сайт и посмотрит ваш состав будет сильно переживать из-за того, что не увидит кого-нить в онлайне? Не смешите.
Что делать? Все просто - надо думать!
1. Думаем куда делать запрос. Если персонаж при последнем обновлении состава находился в Столице, то с вероятностью около 70% он и щас будет находится там же (вероятность не придумана, это реальная цифра). Таким вот простым способом мы уменьшили нагрузку на сервер. 2. Между запросами к БК надо делать задержку. 2-5 секунд примерно, чтобы не мучать ни БК, ни свой сервер (например скрипт получения состава просто в цикле делал запросы, из-за чего раз в 5 минут на сервере наблюдалась некоторая заторможенность). 3. Кешируйте запросы. Зачем каждый раз делать запрос к базе на получение состава, если вы знаете, что скрипт обновления у вам работает раз в пол часа? Получите данные из базы и сохраните их в файле. И следующие пол часа получайте инфу из файла. Да, тут вам придется думать. Если это будет интересно, я могу рассказать как реализовать грамотное кеширование в мемкешед или в обычных файлах ) 4. Кешируйте не только данные, но и html. Для вывода состава клана серверу требуется произвести достаточно большое количество обращений к шаблонам. Проще закешировать html с составом клана и отдавать его. Ускорение будет реальное.
Вообще есть еще множество различных оптимизаций, которые может сделать каждый клановый сайт, сталкивающийся с нагрузкой, но это уже индивидуально.
P.S. Думайте, что делаете! P.P.S. И не делайте всякий бред типа ограничения запросов с одного IP. Лучше займитесь оптимизайией.
Mood: working
Вам запрещено комментирование в скроллах. Причина: Character level to low
с пунктом №3 не согласен категорически. в таком случае отпадает смысл хранить данные в БД ВООБЩЕ. Если БД сделана через "ж", тогда вообще убится об стену лучше.
есть относительно много мелких несогласий, но в принципе идея очень даже важна и актуальна
Гость БК
20-04-09 @ 18:38
На архитектуру БД это никак не вляет, если есть возможность снять нагрузку с БД - это надо сдать. Даже простой запрос "SELECT * FROM public.users WHERE id = 100" надо кешировать.
К тому же к базе бывают и сложные запросы, которые упростить просто нереально. Например подумайте, на сколько тяжелым будет запрос "найти похожие видео к данному" на примере smotri.com. А если учесть что видео несколько милиионов?