====== New Rotation FAQ ====== ===== What is mod_rewrite ===== mod_rewrite - это модуль для апача, которые позволяет делать "красивые" урлы. Тот же модуль есть и для nginx и для lighttpd. Например, в дефолтных темпелйтах урлы примерно такие http://domain/gallery/cool-gallery/index.html , понятно что реально на серваке таких урлов нет. Мот реврайт преобразовывает этот урл в http://domain/scj/tube/?slug=cool-gallery , а красивый урл - для СЕ и юзеров. .htaccess который создается в самом начале задает правила реврайтов. Попоытка просто объяснить как это работает: И так, как было сказано выше /gallery/cool-gallery/index.html такого урла реально на сервере нет. Что бы посмотреть галеру урл должен быть такой: /scj/cgi/out.php?url=content&slug=cool-gallery, что не совсем эстетически хорошо. Поэтому мы в специальный файл .htaccess пишем реврайт - это специальное правило, как апач будет преобразовывать урлы. Для этого конкретнго случая у нас есть такой реврайт: RewriteRule ^gallery/(.*)/index.html$ /scj/cgi/out.php?url=content&slug=$1 это значит, что если урл начинается с gallery/, а потом идет что угодно (.*) до знака /, и заканчивается это на /index.html - значит это наш случай. каждый из "что угодно" (.*) получает номера - соотв. первое "что-то" это $1 , второе - $2. В нашем примере $1 будет равно cool-gallery. Соотвественно апач преобразует этот урл в /scj/cgi/out.php?url=content&slug=cool-gallery и вы увидите галеру. Урлы вида /gallery/cool-gallery/index.html на страницах получаются потому что в сабтемплейтах страниц у вас записано что-то вида href="/gallery//index.html Их всего этого следует, что если вам надо поменять виды урлов на сайте надо поменять сабтемплейт и сменить реврайт, что б он подходил под ваш сабтемплейт. ===== Почему в Rotation - Groups у меня показывает в группе 10 галер, а на странице сайта или Rotation - List thumbs 20 ===== 1 галера может находится в больше чем 1 групп (категории). Это видно в редактировании любой тумбы - у нее есть main группа (одна) и ext группы (много). Rotation - groups считает только по main. Это сделано что б было ясно сколько точно уникальных галер. Например, у нас 2 группы А и Б. и 2 галеры - у одной main группа А, у другой main групра Б. Но у обоих в поле ext groups отмечены и А и Б. Rotation - Stats покажет что у нас конкретно 2 галеры , одна в группе А и одна в группе Б. На сайте же в каждой из групп будет видно по 2 галеры. ===== Custom gallery with my local content ===== - Залить куда угодно тумбы - при и импорте указать Image List = перечисление урлов картинок ===== Что такое Init cats в Rotation - Special или почему я добавил категорию в админке, а она не появилась на сайте ===== Пересчет категорий, а именно выбор лучшей тумбы категории и подсчет сколько же всего тумб в категории, довольно тяжелая задача для сервака, поэтому он это делает раз 15 минут по крону, кладет в кеш и все все остальыне части скрипта юзают кеш. Init cats - это принудительный запуск этой операции. Если вы добавили новую категорию - она появится максимум через 15 минут, если надо быстрее - жмите эту кнопку. ===== What is cache ===== Скрипт не генерит статические html страницы (см выше вопрос по mod_rewrite), все страницы динамические. Дабы не пересоздавать страницу для каждого пользователя скрипт создает ее один раз и сохраняет в кеше на опредленное время (CACHE_TIME), следующий посетитель в течение времени жизни кеша - получит эту страницу уже из кеша, не нагружая сервак. Время кеша задается в common.php CACHE_TIME, начиная с апдейта 46 время в common.php можно не указывать, а указывать в сетингах ротации. Обратите внмиание, что время указаннное в common.php имеет преимущество, те если указано в common.php то настройки ротации скрипт игнорирует. Дабы посмотреть какую-то страницу без кеша надо добавить в урле параметр skip_cache=true. Например, http://domain.com/?skip_cache=true Начиная с апдейта 46 появила recreate cookie - Rotation - Special - Recreate visited pages - скрипт ставит секретную куку вашему браузеру на 10 часов (можно снять куку в любой момент там же). Если вы зайдете с этой кукой на любую страницу вашего сайта, эта страница будет пересоздана (те сброшен кеш именно для этой страницы). Бывает полезно при изменении дизайна какой-то одной определенной страницы. Те разница между skip_cache и recreate cookie в том, что skip_cache покажет страницу без кеша только вам и все, а recreate cookie покажет страницу без кеша, потом такой какую вы ее видете положит в кеш и другие пользователи будут видеть ее из кеша в таком виде. Еще раз: страница создава в 00 минут. Время кеша 10 минут. в 05 вы меняете дизайн. если вы в 05 посмотрели его со skip_cache - то увидите новый дизайн, но пользователь, который пришел в 06 (те ДО времени когда проэкспарится кеш) - увидит старый дизайн. если вы в 05 открыти страницу с recreate cookie - то пользователь который пришел в 06 увидит в новом дизайне. ===== Cache Engines (New) ===== Базовый принцип работы движка - сгенерить нужную страницу, положить ее в кеш на определнное время и показывать ее пока кеш не проэкспарится. Какие движки есть на данный момент: **Файловый** Базово кеш хранится в файлах (scj/cache - файловый кеш). Плюсы - он работает везде и сразу. Минусы - это именно файловый кеш, он он не так быстр, не так эффективно кешится системой как хотелось бы и приходится отдельлно заботиться о размере папки с кешем. **Memcached** В свое время это конечно был большой шаг вперед в плане кеширования. Плюсы - все его знают, админы без проблем ставят на хостиинг, его просто администриировать и тп. Минусы - никакого понимания о реально занимаемой памяти получить практически невозможно, при перегрузке сервака весь кеш удаляется и нужен тн "разогрев кеша" те положить туда наиболее используемые данные. При перегрузке сервака из-за нагрузки это серьезная проблема - сервак и так нагружен, а тут еще и всесь кеш исчез. Все данные одинаково прокешены - не важно это наиболее используемые или использзуемые раз в час - они все висят одинаово в памяти и сервис не умеет их скинуть на диск например. В мемкешем невозможно прибить кещ для одного сайта. У сайтов общее пространство кеша и прибивая кеш - прибивается кеш для всех сайтов сразу. Можно конечно руками запустить несколько инстансов мемкеша на разных портах, но это надо просить админа и часто это проблема и в целом неудобно. Как установить: - попросить админа поставить Memcached - прописать в конфиге мемкеш $config['memcached_host'] = '127.0.0.1'; $config['memcached_port'] = '11211'; **Поэтому сейчас появились новые движки которые рекомендуются к использованию** В новых движках которые базово называются NoSQL решения существует намного больше возможностей нежели будет описано ниже, но для текущих целей кеширования будут описаны базовые. Решение на которое наиболее просто перейти - **Couchbase** **CouchBase** - это продолжение MemBase, видимо ближайщего потомка memcachedb, который в свою очередь родом из memcached. Главное - от вас не требуется практически никаких движений дабы начать его использовать. Вы ставите CouchBase и он работает точно так же как мемкеш. Те для того что бы начать его использовать надо - попросить админа поставить CouchBase - в пхп добавить extension couchbase - прописать в config.php $config['couchbase_host'] = '127.0.0.1'; $config['couchbase_port'] = '11210'; $config['couchbase_username'] = 'testuser'; $config['couchbase_password'] = 'testuser'; $config['couchbase_bucket_name'] = 'test'; и все, вы уже используете современную версию мемкеш. Вы можете это использовать даже с версией 48-49. **Чем это лучше чем memcached** * Нет понятия "разогрев кеша". По факту это файловый кеш,но сделанный на порядок правильнее, который намного меньше грузит диск, просчитывает когда и как лучше записать данные блоком на диск и тп. Данные при этом лежат как бы в нескольких файлах, а не сотнях файлов как файловый кеш. * Проэкспаренные данные исчезают с диска\памяти сами, не надо самостоятельно заботиться об этом. * Можно так же как и с мемкешем ограничить кол-во памяти выделенное под кеш, но при этом кеш не будет ограничен этим кол-вом. Даже если данных будет больше - оно оставит самые активные в памяти, а остальное сгрузит на диск. И подгрузить нужный элемент с диска - быстрее чем сгенерить его по новой. * Можно быстро и просто масштабировать систему из вебадминки * Можно легко завести несколько кешей. В варианте Couchbase - это как несколько мемкешей, но делается все опять же из вебадминки, что быстро и удобно. те можно завести например 10 кешей, каждый из которых будет на своем порту и просто указать для каждого сайта свой порт. В этом случае осуществиться желание о внопке "Удалить весь кеш" - вы сможете из вебадминки удалять весь кеш для одного сайта. * При перезде кеш легко скопировать поскольку копируется не масса мелких файлов как с файловым кешем, а одна база. **Redis** - отдельный написанный с 0 проект NoSQL базы. Смысл его для наших целей практически тот же (в реальности couchBase это уже больше document oriented хранилище, а Redis - чисто key-value хранилище ). Для работы с ним функционал был добавлен в версии 50. Для того что бы начать его использовать надо - попросить админа поставить Redis - попросить его же поставить модуль redis для пхп - прописать в config.php $config['redis_host'] = '127.0.0.1'; $config['redis_port'] = '6379'; $config['redis_database'] = 0; $config['redis_password'] = ''; если redis висит на сокете то выглядеть будет примерно так $config['redis_host'] = '/tmp/redis.sock'; $config['redis_port'] = '0'; и все. В данным конфиге кроме понятных полей есть несколько новых. redis_password - в большинстве случаев не актуально посколько сейчас все на dedicated servers. redis_database - у Redis нет буквенных названий баз, а есть номера. те если у вас несколько сайтов - вы можете указать каждому сайту свой номер. Но можно и не указывать и использовать одну базу для всех сайтов. Разница будет в том, что если вы захотите скинуть весь кеш и у вас используется одна база для всех сайтов - кеш удалится для всех сайтов. Если же у каждого сайта будет своя база - кеш скинется для одного. **Чем это лучше чем memcached** * Все теже плюсы и в случае couchbase. * Redis более заточенное под кеш решение, но у CouchBase готовая удобная админка (говоря о версии 2+). ===== Где хранится кеш ? (memcache) ===== По умолчанию используется файловый кеш (храниться в /scj/cache), но можно использовать и например Memcache. Для этого надо только добавить в scj/includes/config.php $config['memcached_host'] = 'localhost'; $config['memcached_port'] = '11211'; адрес и порт могут меняться (уточните у вашего админа), но в большинстве случаев они будут такими же. Имеет смысл настроить memcache на работу через сокт - это быстрее. В этом случае конфиг будет примерно такой $config["memcached_host"] = "unix:///tmp/memcache.sock"; $config["memcached_port"] = 0; Есть несколько ньансов: - файловый кеш не такой медленный как можно подумать. Смысл в том, что работа с ним эффективно кешируется системой и разница не глобальна - при этом кеш перманентно лежит на диске и в случае перегрузки сервера никуда не пропадет и скрипту не придется по новой генерить весь кеш по новой. Те ситуация такая: у нас много трафа, вдруг что-то пошло не так и мы перегружаем сервак. После поднятия сервака какая-то часть сайта уже есть в кеше и все продолжает работать, в случае же в мемкешем весь кеш утерян и скрипту надо на лету создать массу страниц которые до этого лежали в кеше, что опять создает нагрузку - если вы все же ставите мемкеш - убедитесь, что ему выделено достаточно памяти. Сложно сказать конкретно сколько надо памяти, тк это прямо зависит от размера базы и веса шаблонов (в кеш кладет уже сгенерированную страницу, html), потому что как только законится доступная память - страницы будут генериться на лету. - размер мемкеша должен быть достаточным, иначе данные будут "выдавливаться" из кеша. Например у нас кеш 10 метров, и есть 10 записей по 1 метру. Добавление еще одного в кеш - выдавит первый из кеша. Проблема тут в том, что у мемкеша есть понятие фрагментации памяти, когда даные занимают в реальности больше, чем говорит статистика. Мемкеш сохраняет грубо говоря блоками. Для простоты понимания если блок 100 байт, а мы сохраняем 1 байт, то репортит оно что занят 1 байт, но в реальности оно занимает 100 байт. Для скрипта проблема в том, что если вытесняются какие то данные то никакой ошибки мемкеш не возвращает и обработать такую ситуацию в скрипте невозможно. Примерно наблюдение - 15% фрагментация. ===== Почему у меня в админке и на такой-то странице сайта тумбы стоят в разном порядке ===== При одинаковой сортировке порядок должен быть одинаковым с учетом следующих ньансов: 1. в админке показывает имено так как оно есть в базе по цтр например, на странице сайта в каких то местах могут стоять "новые тумбы", которые тестируются. Например, на странице тумба 123 стоит на 15м месте, а в админке на 50м. Вероятно это новая тумба, которую скрипт тестирует. 2. Новая тумба может получить неожиданно большой цтр. Например, показали 2 раза и 1 раз по ней кликнули = цтр 0.5 , однако 2 показа это не повод судить что тумба хорошая. Потому по дефолту "новые" тумбы не показываются на первых местах. Изменить это можно в сетингах (New Rotation: New thumbs placement : Place new thumb (shows less then New thumbs timelive) on places other then Test positions start if it has good CTR. ). Проверить легко если в List Thumbs выбрать New Thumbs = dont show new. ===== Почему у меня на странице пустое облако тагов ===== Облако тагов генерится из активных тагов раз в 30 минут и кладется в кеш. Соответственно варианты: * нет активных тагов * не прошло 30 минут * вы прибили кеш ===== Тумбы (галереи) не удаляются ===== * ранее была проблема при удалении большого кол-ва тумб, например у спонсора 10к тумб, вы удаляете спона, скрипт пыдается это удалить сразу, но не успевает - получается таймаут. Это усугубляется если надо удалить не просто тумбы, а кастом гали. * сейчас тумбы удаляются по крону. Те когда вы жмете в админке "удалить" тумбы не удаляются мгновенно, а переходят в статус 'Marked for deletion', раз в 10 минут крон смотрит есть ли такие и удаляет * если надо удалить "прямо сейчас" - запускаем rotation.php с параметром process_deleted=true * cd /PATH_TO_/scj/bin/; env HTTP_HOST=yourdomain.com php rotation.php process_deleted=true * единственое исключение: если вы удаляете тумбы в Rotation - List thumbs и удаляется меньше 30 тумб - то удаление происходит сразу. Скорость удаления гадер сложно прогнозируема и зависит от кол-во и нагрузки сервака, есть ли кастом гали, на текущем серваке они или на фтп и так далее. ===== Сколько надо траффика чтобы отротировать тумбы ===== Не обязательно отротировать все до конца, чтобы прода была хорошая, но в целом посчитать сколько надо трафа очень легко. Тумба считается отротированной, когда ее показали New thumbs timelive раз , по дефолту 500. Допустим на странице - 200 тумб, а % of test places on page по дефолту 15, те из 200 мест на старнице новые будут показываться на 30 местах. Те каждый заход на старницу это +30 показов для новых тумб. Например у нас 10 000 тумб, что б их отротировать нам надо 10000*500 = 5000000 показов. Одиз заход на старницу - это 30 показов, те что б отротировать базу в 10к нам надо 5М /30 = 167к загрузок страницы. ===== Not every thumb of a gallery is tested ===== Если не считать банальной нехватики трафика, речь обычно о том, что у галеры например 10 тумб, но показы только у одной. Как это происходит: например у нас 100 галер по 10 тумб, на странице 20 тумб. Начинаем ротацию. У всех цтр 0. Вывели первую тумбы с галер ИД 1 - 20. Они получили цтр больше 0. Нам надо обновить страницу. тестовых например 5 на странице. Мы выводим ИД 1 - 15 как 15 лучших (а там пока цтр и показы получила только пурвая тумба с галеры). А потом 5 тестовых - тут мы можем взять тумбу номер 2 с галер ИД 16-20 Получилось так что эти тумбы набрали меньше чем тумба 1 галер ИД 1-15, мы берем например 3ю тумбу с галер ИД 16-20. Таким образом получается что у галер ИД 1-15 показы есть только у пурвой тумбы. Когда их ЦТР будет меньше чем ЦТР других - их "выдавит" из топа. У них там же есть возможность быть показанными на странице 2 пагинации, но опять же при условии что ваш траффик доходит до 2й страницы. ===== Параметр out.php &link= ... ===== Изначально у out.php есть параметр &link=blabla смысл которого в том, что статистику по blabla можно видеть Stats - Links. Но ротация использует его для передачи параметров ротации (12x123x1234). Выглядит это на практике очень просто: например линк /gallery/cool-desc/index.html?12x345x567 реврайтом (см выше что это такое) преобразуется в урл вида out.php?slug=cool-desc&link=12x345x567 и позже скрипт обрабатывает статистику по линкам преобразуя это в статистику по тумбам. Соответсвенно если у вас урл вида out.php?member=domain.com&link=top то такой вариант все такое же работает, однако для линков ротации его использовать не получается. Дабы решить эту ситуацию был введен еще один пармтер &link2 смысл которого в том, что вы можете делать out.php?slug=cool-desc&link=12x345x567&link2=blabla и все так же смотерть статистику по линкам и одновременно ротировать тумбы. ===== Что такое тумбы категории ===== Тумба категории - это по-дефолтлу лучшая тумба из категории. Однако, есть возможность поставить тумбой категории не лучшую, а например 2ю по ЦТР или 3ю и тп, эти настройки можно найти в Rotation - CMS - Settings. ===== How to create a master site from a slave ===== - Делаем дамп базы мастера - Смотрим в rot_linked_db номер слейва, который мы отсоединяем (Х) - Отсоединяем нужный слейв от мастера - Заливаем в базу бывшего слева (дамп) из пункта 1, но только таблицы rot_gallery_info, rot_gallery_statsX, rot_gallery_dataX и rot_thumbs - rot_gallery_statsХ переименовываем в rot_gallery_stats1, rot_gallery_dataX - в rot_gallery_data1 ===== Gallery statuses ===== Pool - Active - Old - фактически надо для работы Shift settings в группах ротации. Смысл в том, что бы наполнять сайт автоматически. Те вы добавили много галер в статус pool, поставили добвлять раз в день 10 галер и сайт их доабвляет из пула в активные, и они появляются на сайте. Получается видимость ежедневного обновления. Old - если вы хотите убирать старые галеры с сайта сохраняя общее кол-во одинаковым. На сайте в листинге показываются галеры только со статусом active. preload - галеры добавляются в Preload (в админке) что б вы могли выбирать какие из сграбеленных тумб по итогу будут на сайте. Те которые вы не выберете - будут удалены. to_grab - когда галеры добавляются в базу они получают этот статус прежде чем граббер создаст тумбы для них. В момент создания тумб они получают статус processing. to regrab - галера ожидает реграба. to delete - галера ожидает удаления. Часо на удаление помечается много галер, и мгновенно удалить их невозможно, особенно grab error - если при грабе тумбы что-то пошло не так галера или удаляется или получает статус grab error в зависимости от ваших настроек. Banned - урл остается в базе и не будет добавлен снова. Как и grab error это имеет смысл только в том случае, если вы добавляете галеры через import sets и есть вероятность что какие-то галеры будут добавлены снова и снова. Например, вы добавляете через импорт сет, галеры идут в preload. Вы отобрали часть галер, а какие то решили не добавлять. Через час этот импорт сет добавляется снова, а там есть та же галера снова - она опять попадет в preload и вам придется опять ее отсеивать. Что б этого не было - можно добавить в banned. Минус в том, что база в этом случае растет и там есть галеры которые не используются, но занимают место в базе. Inactive (и аналог hidden в версии 1.X ) - галера не показывается в листинге, но при прямом заходе на урл - видна. Смысл следующий: например у нас была галера, она проиндексирована, но она хотлинковала контент откуда-то. В какой-то момент контент удалили и галерея стала нерабочей. Ранее чекер удалял такие галереи (точнее 2 варианта - удалить сразу или inactive), но был минус в том, для СЕ спайдеров старый урл теперь стал 404. Возможно лучше если будет возвращать страницу без контента, но не 404. Для этого и есть статус "Hidden" - это значит галера будет видна по прямому урлу, но тумбы этой галеры не будут в ротации. те попасть на нее можно будет только по прямому урлу. Этот статус можно выставить в импорт сете, который удаляет галереи. Аналогичная опция есть у Gallery Checker. Точный эффект от этого для СЕ - неизвестен. ===== Category statuses ===== У категорий 3 статуса: - активна - выводится в