- PVSM.RU - https://www.pvsm.ru -

Как устроена Википедия (часть 2)

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

Первая часть серии была воспринята позитивно, поэтому вторую я постараюсь сделать еще более интересной для местной аудитории: сегодня она будет посвящена некоторым техническим аспектам работы проекта.

Как известно, Википедия — проект добровольцев, и этот принцип не отменяется полностью даже в таком деле, как техническая поддержка ее работы. В принципе, любой участник с достаточно малым количеством усилий может выбрать себе простой баг [1] и отправить свой патч, даже не используя [2] Gerrit.

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

Боты

Для того, чтобы выполнять какие-то рутинные или объемные задания, участники часто запускают ботов или просят об этом других, более технически подкованных участников. MediaWiki предоставляет доступ к API [3], а у учетных записей с флагом бота этот доступ еще шире (например, через API бот может выводить не по 500 записей, а по 5000). Кроме того, флаг бота у учетной записи позволяет скрывать правки от других пользователей, что оберегает участников от тысяч мелких правок, которые бы засоряли списки свежих правок.

Pywikibot

Самым популярным из существующих фреймворков является pywikibot [4], который уже включает в себя большой набор готовых скриптов — например, удаление страниц по списку, перенос статей из одной категории в другую и многое другое. В разработке этого фреймворка приняло участие уже около 100 человек [5], в плане использования этот скрипт тоже крайне прост: даже обычному пользователю Windows достаточно установить Python, скачать дистрибутив, ввести логин и пароль в конфиг и запустить один из готовых скриптов.

Раньше популярным заданием для pywikibot была расстановка ссылок между статьями разных языковых разделов: например, кто-то создает в русской Википедии статью про Ралли [6], знает, что в английской Википедии есть аналогичная Rallying [7], и ставит на нее ссылку. Затем приходит бот, который видит, что в английском разделе есть ссылки на еще 20+ разных языковых разделов, а в русском разделе на них ссылок нет: поэтому бот добавляет ссылку на новую русскую статью в каждый из разделов, а в русской статье обновляет полный список подобных интервики-ссылок.

Как мы видим, работа действительно не самая интересная для человека, но очень объемная, и ею занимались десятки ботов, набравшие в итоге миллионы правок. Например, у моего бота [8] сейчас порядка 990+ тыс. правок, процентов 80 из которых как раз составляют подобные правки интервики. Не так давно движок Википедии переработали, и такие правки в каждом из разделов больше не нужны, но число рутинных заданий все равно не снижается.

Но давайте вернемся к pywikibot — у фреймворка есть 2 ветки:

  • Core — новая ветвь, где был переписан код, он стал более структурирован и эффективен.
  • Compat — старое направление, но в нем шире набор скриптов, он лучше работает в сторонних проектах MediaWiki, да и многим работа с ним привычнее.

Баги и пожелания новых функций собираются в едином с MediaWiki багтрекере [9], разработка сейчас идет через Git/Gerrit [10], что упростило привлечение новых разработчиков, добавление новых патчей и их ревью. Раньше разработка шла через SVN, но в итоге, для унификации ресурсов с MediaWiki и расширения круга разработчиков, было решено переехать на Git/Gerrit: про преимущества Git над SVN даже топик на Хабре [11] есть.

Я не буду описывать весь набор уже существующих функций [12] фреймворка, желающие могут погулять по репозитарию и посмотреть: могу лишь сказать, что он активно наполняется, а существующие скрипты требуют минимальной наладки для запуски в любом языковом разделе.

AutoWikiBrowser

Если описанный выше бот работает в консоли, то AWB (AutoWikiBrowser) — более дружелюбный для простого пользователя инструмент.
Awbscreenshot [13]
У AWB есть полноценный интерфейс, автоматическое обновление, и работает он только на Windows (неофициально — и под Wine). Типичные функции AWB: замена текста по регулярным выражениям, иные правки по определенному списку статей. AWB умеет рекурсивно обходить категории Википедии [14], сравнивать списки, выделяя уникальные элементы или пересечения, и даже обрабатывать дампы Википедии [15]. При этом здесь также есть ограничения для работы с аккаунтов, не имеющих флаг администратора или бота — составляемые списки для таких участников имеют ограничение в 25 000 строк. Если у же у вас есть флаг бота, то ограничения полностью снимаются при подгрузке специального плагина [16]. Важная оговорка: т.к. потенциально с помощью AWB можно быстро сделать ряд неконструктивных правок, в том числе вандальных, то его использование технически ограничено до пользователей, одобренных администраторами [17]: если имя пользователя не указано на этой странице, то AWB откажется от работы.

В общем случае при сохранении каждой правки нужно вручную кликать на кнопку «Сохранить», автосохранение возможно только если AWB запущен из-под учетной записи, имеющей флаг бота. Поэтому AWB сложно использовать для действительно масштабных заданий, но для небольших задач он весьма удобен, так как позволяет автоматизировать определенные действия и быстро реализовывать желаемое без необходимости обращения к участникам с более продвинутыми ботами (например, см. выше). Лично я часто использую AWB именно для составления списков, а затем уже быстро прогоняю pywikibot с необходимым заданием: в pywikibot тоже есть специальный генератор страниц, который все это умеет, но лично мне нагляднее и проще сделать все через программу с GUI [18].

Исходный код AWB открыт [19], программа написана на C# и поддерживается ограниченным кругом разработчиков. При запуске программа сама проверяет наличие обновлений и устанавливает их, дистрибутив также выкладывается на SourceForge [20]. В случае возникновения критичных ошибок в ходе работы, AWB составляет баг-репорт и помогает передать его разработчикам [21].

Другое

Есть боты, работающие на Perl [22], .NET [23], JAVA [24], но они чаще поддерживаются отдельными энтузиастами, и не имеют широкого распространения. Лично я когда-то запускал вики-скрипты и на PHP, но массовая поддержка pywikibot, активный багтрекер и отзывчивость большого числа разработчиков полностью склонили меня к работе с этим ботом, поэтому подробно рассказать об иных фреймворках я не в состоянии :)

Toolserver

Раздел выше был посвящен скриптам и ботам, которые по большей степени запускаются с компьютера участника либо с его сервера. Но помимо этого существует возможность запуска скриптов с площадок организаций Викимедиа: раньше существовал Тулсервер, который поддерживало немецкое отделение Викимедиа, с 30 июня 2014 года он был отключен в связи с тем, что была создана система Labs, но обо всем по порядку.
Kennisnet Wikipedia serverroom.jpg [25]
История Тулсервера началась в 2005 году, когда Sun Microsystems подарила сервер V40z (2* Opteron 848, 2.2 GHz, 8 GB RAM, диск 6*146 GB, внешний RAID на 12*400 GB) для использования на Викиконференции во Франкфурте. После конференции его унес домой один из участников немецкого отделения и сделал из него кофейный столик; через некоторое время его решили установить в Амстердаме на базе Kennisnet [26], где были установлены и полсотни серверов Фонда Викимедиа.

После этого на Тулсервере начинают запускать различные скрипты и инструменты (счетчики правок, различные анализаторы статей, инструменты для загрузки файлов и т.п.), а мощности Тулсервера стали увеличиваться: на момент закрытия работало 17 серверов [27], регистрировалось более 3 миллионов обращений к Тулсерверу в день, трафик доходил до 40 Мб/с. Каждый из серверов имел от 24 до 64 Гб оперативной памяти, в основном они работали на Solaris 10 (и постепенно переходили на Linux), суммарное дисковое пространство составляло 8 Тб.

В чем был главные плюсы Тулсервера как площадки?

  • Репликация с серверами Фонда Викимедиа — подробнее будет ниже.
  • Открытость — при наличии обоснованных целей и навыков аккаунт было несложно получить [28].
  • Достаточная закрытость своего кода: если новый Labs требует кода под открытой лицензией, а сами файлы по большей части открыты для просмотра всеми участниками Labs (за исключением паролей, логинов и т.п.), то Тулсервер в этом плане был гораздо демократичнее.

Были и свои минусы:

  • система работала в режиме «as is», т.к. финансирование было ограничено, были ограничены и возможности поддерживающих систему админов: многие ошибки системы не исправлялись годами;
  • в случае неактивности разработчика, его код и труды пропадали, а Википедия зачастую лишалась инструментов, к которым уже давно привыкла; на Labs из-за открытости и доступности кода любой проект может начать поддерживать другой разработчик;
  • в какой-то момент были введены жесткие ограничения на потребление системных ресурсов, что привело к отключению некоторых полезных, но затратных инструментов.

Но давайте вернемся к главному плюсу — репликации: без нее Тулсервер ничем бы не отличался от обычного хостинга [29], где можно запускать свои процессы. С помощью репликации на Тулсервере всегда были актуальные БД Википедии, поэтому инструменты могли напрямую работать с базой данных, а не делать огромные API-запросы, обрабатывать порой неактуальные дампы и т.п.

Примерная схема репликации показана на картинке ниже:

Как устроена Википедия (часть 2)

Тампа на схеме — это и есть основные БД Фонда, расположенные в США; кластеры s1-s4 отвечают за БД: например, s1 — английская Википедия, s2 — некоторые крупные разделы, и т.д. Данные из Тампы реплицируются на БД Тулсервера в Амстердаме, и уже там к ним получают доступ пользователи Тулсервера и их инструменты. Естественно, всегда был какой-то лаг репликации, причем из-за использования разных кластеров могла быть ситуация, когда лаг для обработки данных английской Википедии был равен 1 минуте, а для русской Википедии — 2-3 дня. Например, 21 июня (незадолго до отключения) лаг составлял до 28 сек [30].

Эта доступность актуальных данных и была главным преимуществом Тулсервера: можно было практически в режиме онлайн проанализировать, какие файлы не используются, сколько правок и действий сделал любой участник во всех проектах Фонда и много другой информации, которую напрямую движок Википедии не предоставляет.

Заключение

Поддержка Тулсервера была тяжелым грузом для немецкого отделения, система имела определенные ограничения, и с 1 июля Тулсервер был полностью заменен новым проектом Labs, который целиком поддерживается самим Фондом Викимедиа. Это новый большой проект, про него я напишу в следующем посте, но могу для затравки опубликовать июньскую статистику Labs :)

  • работает 213 проектов
  • в системе зарегистрировано 3 356 пользователей
  • используется 1 714 312 MB RAM
  • занято 19 045 GB дискового пространства

До скорых встреч!

Автор: rubin16

Источник [31]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/wikipedia/65575

Ссылки в тексте:

[1] выбрать себе простой баг: https://bugzilla.wikimedia.org/buglist.cgi?bug_status=NEW&bug_status=REOPENED&columnlist=product%2Ccomponent%2Cchangeddate%2Cbug_severity%2Cpriority%2Cshort_desc&keywords=easy&keywords_type=allwords&list_id=329865&order=changeddate%20DESC%2Ccomponent&product=MediaWiki

[2] даже не используя: http://tools.wmflabs.org/gerrit-patch-uploader/

[3] API: http://ru.wikipedia.org/w/api.php

[4] pywikibot: https://www.mediawiki.org/wiki/Pywikipediabot

[5] около 100 человек: https://git.wikimedia.org/blob/pywikibot%2Fcore.git/HEAD/CREDITS

[6] Ралли: https://ru.wikipedia.org/wiki/Ралли

[7] Rallying: https://en.wikipedia.org/wiki/Rallying

[8] у моего бота: https://tools.wmflabs.org/quentinv57-tools/tools/sulinfo.php?username=Rubinbot

[9] багтрекере: https://bugzilla.wikimedia.org/buglist.cgi?list_id=330070&product=Pywikibot&query_format=specific

[10] Git/Gerrit: https://www.mediawiki.org/wiki/Gerrit/Getting_started

[11] топик на Хабре: http://habrahabr.ru/post/68341/

[12] весь набор уже существующих функций: https://git.wikimedia.org/tree/pywikibot%2Fcore.git

[13] Image: https://commons.wikimedia.org/wiki/File%3AAwbscreenshot.jpg

[14] категории Википедии: https://ru.wikipedia.org/wiki/Категория:Всё

[15] дампы Википедии: http://dumps.wikimedia.org/backup-index.html

[16] при подгрузке специального плагина: https://en.wikipedia.org/wiki/Wikipedia:AutoWikiBrowser/NoLimits_plugin

[17] одобренных администраторами: https://ru.wikipedia.org/wiki/Википедия:AutoWikiBrowser/CheckPage

[18] GUI: https://ru.wikipedia.org/wiki/Графический_интерфейс_пользователя

[19] открыт: https://en.wikipedia.org/wiki/Wikipedia:AutoWikiBrowser/Documentation

[20] SourceForge: http://sourceforge.net/projects/autowikibrowser/

[21] передать его разработчикам: https://en.wikipedia.org/wiki/Wikipedia_talk:AutoWikiBrowser/Bugs

[22] Perl: http://search.cpan.org/~bricas/WWW-Wikipedia-2.01/

[23] .NET: http://dotnetwikibot.sourceforge.net/

[24] JAVA: http://jwbf.sourceforge.net/

[25] Image: https://meta.wikimedia.org/wiki/File:Kennisnet_Wikipedia_serverroom.jpg#mediaviewer/File:Kennisnet_Wikipedia_serverroom.jpg

[26] Kennisnet: https://en.wikipedia.org/wiki/Kennisnet

[27] 17 серверов: https://wiki.toolserver.org/view/Servers

[28] несложно получить: https://wiki.toolserver.org/view/Account_approval_process

[29] хостинга: https://www.reg.ru/?rlink=reflink-717

[30] составлял до 28 сек: http://www.peeep.us/fcc0b4bc

[31] Источник: http://habrahabr.ru/post/230219/