Обновления MODX.pro - работа не всегда заметна
Есть решение
В августе я обещал, что реклама переедет из шаблонов в настройки и появится ротация. В октябре писал, что сайт заваливают роботы и следующая работа — кэш. С тех пор сделано довольно много, и про кэш я ошибся. Рассказываю по порядку.
В октябрьской заметке я написал, что корень проблемы — страницы собираются заново на каждый запрос, и кэш для анонимов снял бы основную нагрузку. Диагноз был неверный.
После тех правок сайт всё равно отвечал 2,6–3,6 секунды. Полез смотреть, что именно делает база, и нашёл две таблицы, которые никто никогда не убирал.
Таблица сессий. 1 247 720 строк и 6,3 ГБ на диске. Каждый просмотр страницы анонимом создаёт сессию, а cookie роботы не возвращают, поэтому переиспользования нет — приток около 190 тысяч в сутки. Авторизованных сессий во всей этой горе было 404.
Реестр MODX. 45 407 сообщений, все до единого просроченные, старейшему восемь лет — токены сброса пароля и смены почты с января 2018 года. Никто их не удаляет, а читаются они на каждом запросе: в выборке активных запросов базы они занимали 83 попадания из 136. Больше половины всей работы базы уходило на перечитывание мусора.
После уборки время ответа — 0,27 секунды. Load average упал с 14 до нормы. Кэш для анонимов не понадобился вовсе, и теперь я не уверен, что он нужен.
Обе чистки поставлены в cron, так что заново это не накопится.
Самая неприятная находка. Поисковый индекс не обновлялся с 25 февраля. Всё, что опубликовано позже, не находилось вообще — при том что поиском пользуются около 1090 раз в сутки.
Причина скучная: индекс пересобирался руками, а руки не дошли. Никто не написал, что поиск сломан, — видимо, просто решали, что на сайте ничего нет.
Теперь переиндексация идёт каждый час. Заодно поиск стал переживать перезагрузку сервера: раньше после неё он лежал до десяти минут, потому что поднимался не службой, а сторожем в cron раз в десять минут.
Часть посетителей жаловалась, что modx.pro не открывается вовсе, при этом у остальных всё работало. Хостер связал это с тем, что оборудование фильтрации ломает TLS 1.3.
Отключил 1.3, оставил только 1.2. Жалобы прекратились, и наоборот появились сообщения, что сайт стал доступен. Доказательство не идеальное — те, кто не смог подключиться, в логи не попадают по определению, мерить приходится обращениями людей. Но порядок событий говорит сам за себя.
Цена — рукопожатие в два круга вместо одного и нет HTTP/3. Взамен часть людей вообще открывает сайт. Вернусь к этому через несколько месяцев: поведение фильтрации меняется.
Содержимое блоков переехало из шаблонов в админку, как и обещал. К этому добавилось:
Чужие ссылки уходят с rel=«nofollow sponsored». Без этого продажа размещения читается поисковиком как продажа ссылок, а это уже другая история.
Место пока не открывал. Сначала хочу убедиться, что счётчик показывает что-то осмысленное.
У профилей появились бейджи статуса. Четыре вида:
Бейджи уже расставлены: 244 проверенных и 22 эксперта. Эксперт — это меньше тысячной доли аккаунтов, и так и задумано. Если считаете, что кого-то обошли незаслуженно, напишите.
В разделе «Вопросы» автор темы и администратор могут отметить комментарий как решение. У заметки в ленте появляется значок, так что видно сразу, разобрались там или нет.
Вещь, которой не хватало годами. Работает только в вопросах — в остальных разделах смысла нет.
Несколько находок, про которые стоит рассказать, потому что они объясняют странности, которые вы могли замечать.
Страницы со списками падали целиком из-за заголовка с фигурной скобкой. Ломалась не сама заметка, а любая страница, где она выводилась. За пять дней это дало 945 ошибок и 166 МБ упавших страниц в кэше. Виновных заметок было три, и добавить такую мог любой — достаточно назвать свой вопрос с фигурной скобкой, а на сайте, куда приносят примеры кода, это происходит само.
Публикация вопроса тормозила на пять секунд. В коде остался вызов отменённого сервиса, который молча ждал таймаут при каждой первой публикации в разделе.
Подписчики раздела не получали писем, если автор публиковал черновик кнопкой. А подписка на автора первые сутки вообще не сохранялась.
Голос за избранную заметку визуально снимал звезду. В базе она оставалась, но до перезагрузки выглядела потерянной.
Письма застревали: одно неотправляемое держало всю очередь. И ссылка в письме подтверждения регистрации вела на неверный поддомен.
Удалённые заметки продолжали считаться в рейтинге автора — мягкое удаление не снимало признак публикации, и спам оставался в счёте.
Иконки переехали с платного Font Awesome Pro на свободный SVG-спрайт, и страницы полегчали на 7,3 КБ. Стили и скрипты сайта наконец попали в репозиторий — до этого main.css существовал в единственном экземпляре на сервере, без резервной копии. Зафиксирован план переезда сборки на Vite. Закрыты две возможности внедрить скрипт через заметку и имя профиля. PHP обновлён после октябрьских уязвимостей, приложения панели уведены с версии, которая исправления не получила.
Если что-то из перечисленного работает не так, как описано, — напишите в комментариях. Правок было много, и часть из них затрагивает все страницы сайта.
Сайт стал быстрее в десять раз, и кэш тут не при чём
В октябрьской заметке я написал, что корень проблемы — страницы собираются заново на каждый запрос, и кэш для анонимов снял бы основную нагрузку. Диагноз был неверный.
После тех правок сайт всё равно отвечал 2,6–3,6 секунды. Полез смотреть, что именно делает база, и нашёл две таблицы, которые никто никогда не убирал.
Таблица сессий. 1 247 720 строк и 6,3 ГБ на диске. Каждый просмотр страницы анонимом создаёт сессию, а cookie роботы не возвращают, поэтому переиспользования нет — приток около 190 тысяч в сутки. Авторизованных сессий во всей этой горе было 404.
Реестр MODX. 45 407 сообщений, все до единого просроченные, старейшему восемь лет — токены сброса пароля и смены почты с января 2018 года. Никто их не удаляет, а читаются они на каждом запросе: в выборке активных запросов базы они занимали 83 попадания из 136. Больше половины всей работы базы уходило на перечитывание мусора.
После уборки время ответа — 0,27 секунды. Load average упал с 14 до нормы. Кэш для анонимов не понадобился вовсе, и теперь я не уверен, что он нужен.
Обе чистки поставлены в cron, так что заново это не накопится.
Поиск не находил ничего свежего восемь месяцев
Самая неприятная находка. Поисковый индекс не обновлялся с 25 февраля. Всё, что опубликовано позже, не находилось вообще — при том что поиском пользуются около 1090 раз в сутки.
Причина скучная: индекс пересобирался руками, а руки не дошли. Никто не написал, что поиск сломан, — видимо, просто решали, что на сайте ничего нет.
Теперь переиндексация идёт каждый час. Заодно поиск стал переживать перезагрузку сервера: раньше после неё он лежал до десяти минут, потому что поднимался не службой, а сторожем в cron раз в десять минут.
Если у вас сайт не открывался — возможно, дело было в этом
Часть посетителей жаловалась, что modx.pro не открывается вовсе, при этом у остальных всё работало. Хостер связал это с тем, что оборудование фильтрации ломает TLS 1.3.
Отключил 1.3, оставил только 1.2. Жалобы прекратились, и наоборот появились сообщения, что сайт стал доступен. Доказательство не идеальное — те, кто не смог подключиться, в логи не попадают по определению, мерить приходится обращениями людей. Но порядок событий говорит сам за себя.
Цена — рукопожатие в два круга вместо одного и нет HTTP/3. Взамен часть людей вообще открывает сайт. Вернусь к этому через несколько месяцев: поведение фильтрации меняется.
Реклама: обещанное сделано
Содержимое блоков переехало из шаблонов в админку, как и обещал. К этому добавилось:
- срок показа — объявление гаснет в свою дату само;
- ротация по весам, случайная на каждую отрисовку, так что доли показов соблюдаются точно;
- счётчик переходов по дням;
- крестик теперь помнит отказ по конкретному объявлению, а не отключает рекламу навсегда. Раньше первый же крестик лишал вас всей рекламы — это было неправильно.
Чужие ссылки уходят с rel=«nofollow sponsored». Без этого продажа размещения читается поисковиком как продажа ссылок, а это уже другая история.
Место пока не открывал. Сначала хочу убедиться, что счётчик показывает что-то осмысленное.
Бейджи у пользователей
У профилей появились бейджи статуса. Четыре вида:
- Администратор и Старожил считаются сами — второй через три года после регистрации;
- Проверенный — у автора хотя бы одной публикации в содержательных разделах: уроки, обзоры, готовые решения, инструкции, дополнения, безопасность, для разработчиков, сайты на MODX. Вопросы и объявления о работе не считаются;
- Эксперт — по рейтингу от 300, но считанному до множителя за активность.
Бейджи уже расставлены: 244 проверенных и 22 эксперта. Эксперт — это меньше тысячной доли аккаунтов, и так и задумано. Если считаете, что кого-то обошли незаслуженно, напишите.
Есть решение
В разделе «Вопросы» автор темы и администратор могут отметить комментарий как решение. У заметки в ленте появляется значок, так что видно сразу, разобрались там или нет.
Вещь, которой не хватало годами. Работает только в вопросах — в остальных разделах смысла нет.
Что ещё заметно изменилось
- Значок непрочитанных комментариев в шапке со списком тем. Считаются только темы, где вы участвовали или подписаны: открытая из ленты чужая тема больше не будет полгода напоминать о себе.
- Подписка на автора. В профиле появился чекбокс «Уведомлять о новых заметках». Подписаны и на раздел, и на автора — письмо придёт одно, а не два.
- Галереи. Подряд идущие картинки собираются в одну ленту с общим просмотром, а не растягивают заметку столбцом на всю высоту.
- Отмена голоса. Повторный клик по плюсу или минусу снимает голос. Раньше его можно было только сменить на противоположный.
- Черновики. У черновика появилась ссылка «Открыть». Раньше после сохранения автор оставался в редакторе и не видел, что получилось, пока не находил заметку в списке.
- Подтверждение публикации показывается уже на странице заметки, а не в форме. Двойная отправка отсекается.
- Закреплённые заметки снимаются сами через семь дней.
- Компоненты в профиле. Разработчик может сам выбрать до пяти своих дополнений вместо автоматического топ-5 с Modstore.
- Ссылка на GitHub в шапке и подвале — исходники сайта открыты.
- Доступность с клавиатуры: ссылка перехода к содержимому, видимый фокус.
- Вёрстка: шапка прилипает при прокрутке, страница сузилась с 1600 до 1440 пикселей, подвал перестал висеть посередине на коротких страницах, анонс в ленте снова обрезается по вашему тегу cut, а не по 180 символам.
Что ломалось, пока вы не видели
Несколько находок, про которые стоит рассказать, потому что они объясняют странности, которые вы могли замечать.
Страницы со списками падали целиком из-за заголовка с фигурной скобкой. Ломалась не сама заметка, а любая страница, где она выводилась. За пять дней это дало 945 ошибок и 166 МБ упавших страниц в кэше. Виновных заметок было три, и добавить такую мог любой — достаточно назвать свой вопрос с фигурной скобкой, а на сайте, куда приносят примеры кода, это происходит само.
Публикация вопроса тормозила на пять секунд. В коде остался вызов отменённого сервиса, который молча ждал таймаут при каждой первой публикации в разделе.
Подписчики раздела не получали писем, если автор публиковал черновик кнопкой. А подписка на автора первые сутки вообще не сохранялась.
Голос за избранную заметку визуально снимал звезду. В базе она оставалась, но до перезагрузки выглядела потерянной.
Письма застревали: одно неотправляемое держало всю очередь. И ссылка в письме подтверждения регистрации вела на неверный поддомен.
Удалённые заметки продолжали считаться в рейтинге автора — мягкое удаление не снимало признак публикации, и спам оставался в счёте.
Под капотом, коротко
Иконки переехали с платного Font Awesome Pro на свободный SVG-спрайт, и страницы полегчали на 7,3 КБ. Стили и скрипты сайта наконец попали в репозиторий — до этого main.css существовал в единственном экземпляре на сервере, без резервной копии. Зафиксирован план переезда сборки на Vite. Закрыты две возможности внедрить скрипт через заметку и имя профиля. PHP обновлён после октябрьских уязвимостей, приложения панели уведены с версии, которая исправления не получила.
Если что-то из перечисленного работает не так, как описано, — напишите в комментариях. Правок было много, и часть из них затрагивает все страницы сайта.
Комментарии: 6
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Можно еще пофиксить эти моменты, очень глаз режут?))))
1) У некоторых заметок есть скролл, который явно не должен быть:
2) Дерево комментариев только на 4 уровня показывает красиво, потом что-то с отступами у полосок:
Все можно посмотреть наглядно в этой заметке modx.pro/components/25808
Завтра гляну, какой браузер и версия?