Инструкция:параметр Maxlag

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Maxlag parameter and the translation is 78% complete.
Outdated translations are marked like this.
Other languages:
English • ‎español • ‎français • ‎polski • ‎português • ‎Ελληνικά • ‎русский • ‎українська • ‎中文 • ‎日本語

Если вы используете MediaWiki в реплицированном кластере базы данных (как это делает Wikimedia), то высокая скорость редактирования может привести к задержке подключённых серверов.

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

В MediaWiki 1.10 был представлен параметр maxlag, который позволяет делать то же самое в клиентских сценариях. В 1.27 он был обновлен, чтобы работать только для запросов api.php.

Параметр maxlag может быть передан в api.php через параметр URL или данные POST. Это целое число секунд. Например, this link показывает метаданные о странице «MediaWiki», если задержка не превышает 1 секунды, в то время как this (с-1 в конце) показывает фактическую задержку без метаданные.

Если указанная задержка превышена во время запроса, возвращается код состояния 503 (или 200 во время запросов API, см. T33156) с телом ответа в следующем формате:

{
    "error": {
        "code": "maxlag",
        "info": "Waiting for $host: $lag seconds lagged",
        "host": $host,
        "lag": $lag,
        "*": "See https://www.mediawiki.org/w/api.php for API usage"
    }
}

Установлены следующие HTTP-заголовки:

  • Retry-After: рекомендуемое минимальное количество секунд, которое клиент должен ждать перед повторной попыткой
  • X-Database-Lag: количество секунд отставания работника

Рекомендуемое использование для Wikimedia wikis следующее:

  • Используйте maxlag=5 (5 секунд). Это подходящее неагрессивное значение, установленное в качестве значения по умолчанию для Pywikibot. Более высокие значения означают более агрессивное поведение, более низкие значения лучше.
  • Если вы получаете ошибку задержки, сделайте паузу в вашем скрипте как минимум на 5 секунд, прежде чем пытаться снова. Будьте осторожны, чтобы не войти в занятую петлю.
  • Возможно, что с этим значением вы можете получить низкий коэффициент заполнения в периоды высокой загрузки базы данных. Ничего страшного, просто дайте ему подождать до пика. Мы даем людям приоритет во времена высокой нагрузки, потому что мы не хотим тратить их время, отказываясь от их правок.
  • О необычно высокой или постоянной задержке следует сообщать $irc-канал на irc.freenode.net.
  • Интерактивные задачи (где пользователь ожидает результата) могут не указывать параметр maxlag. Неинтерактивные задачи всегда должны его использовать. См. Также API:Этикет#Использовать параметр maxlag.


Обратите внимание, что уровень кэширования (Varnish или squid) также может генерировать сообщения об ошибках с кодом состояния 503 из-за таймаута вышестоящего сервера. Клиенты должны относиться к этим ошибкам по-разному, поскольку они могут возникать последовательно при попытке выполнить длительную дорогостоящую операцию. Повторение операции по таймауту приведет к чрезмерному использованию ресурсов сервера и может привести к тому, что ваш клиент окажется в бесконечном цикле. Вы можете различить ошибки уровня кэша и условия задержки MediaWiki, используя любое из следующего:

  • Заголовок X-Database-Lag отличается от ошибок ведомого лага в MediaWiki
  • Нет ошибок Retry-After в Varnish
  • Заголовок X-Squid-Error должен присутствовать в ошибках squid
  • Тело ответа в ошибках ведомой задержки будет соответствовать регулярному выражению /Waiting for [^ ]*: [0-9.-]+ seconds? lagged/

В целях тестирования вы можете намеренно заставить программное обеспечение отклонить запрос, передав отрицательное значение, например, по следующему URL-адресу://www.mediawiki.org/w/api.php?action=query&titles=MediaWiki&format=json&maxlag=-1.

The maxlag parameter is checked in MediaWiki.php , and also applies to the action API.