Как устроена Википедия (часть 2)
Привет, Хабр!
На основной работе дали пару дней отгула, и кроме важных личных дел я решил посвятить их продолжению серии постов про Википедию.
Первая часть серии была воспринята позитивно, поэтому вторую я постараюсь сделать еще более интересной для местной аудитории: сегодня она будет посвящена некоторым техническим аспектам работы проекта.
Как известно, Википедия — проект добровольцев, и этот принцип не отменяется полностью даже в таком деле, как техническая поддержка ее работы. В принципе, любой участник с достаточно малым количеством усилий может выбрать себе простой баг и отправить свой патч, даже не используя Gerrit.
Но значительно более распространенной формой участия является разработка дополнительных инструментов, настроек и роботов для Википедии.
Боты
Для того, чтобы выполнять какие-то рутинные или объемные задания, участники часто запускают ботов или просят об этом других, более технически подкованных участников. MediaWiki предоставляет доступ к API, а у учетных записей с флагом бота этот доступ еще шире (например, через API бот может выводить не по 500 записей, а по 5000). Кроме того, флаг бота у учетной записи позволяет скрывать правки от других пользователей, что оберегает участников от тысяч мелких правок, которые бы засоряли списки свежих правок.
Pywikibot
Самым популярным из существующих фреймворков является pywikibot, который уже включает в себя большой набор готовых скриптов — например, удаление страниц по списку, перенос статей из одной категории в другую и многое другое. В разработке этого фреймворка приняло участие уже около 100 человек, в плане использования этот скрипт тоже крайне прост: даже обычному пользователю Windows достаточно установить Python, скачать дистрибутив, ввести логин и пароль в конфиг и запустить один из готовых скриптов.
Раньше популярным заданием для pywikibot была расстановка ссылок между статьями разных языковых разделов: например, кто-то создает в русской Википедии статью про Ралли, знает, что в английской Википедии есть аналогичная Rallying, и ставит на нее ссылку. Затем приходит бот, который видит, что в английском разделе есть ссылки на еще 20+ разных языковых разделов, а в русском разделе на них ссылок нет: поэтому бот добавляет ссылку на новую русскую статью в каждый из разделов, а в русской статье обновляет полный список подобных интервики-ссылок.
Как мы видим, работа действительно не самая интересная для человека, но очень объемная, и ею занимались десятки ботов, набравшие в итоге миллионы правок. Например, у моего бота сейчас порядка 990+ тыс. правок, процентов 80 из которых как раз составляют подобные правки интервики. Не так давно движок Википедии переработали, и такие правки в каждом из разделов больше не нужны, но число рутинных заданий все равно не снижается.
Но давайте вернемся к pywikibot — у фреймворка есть 2 ветки:
- Core — новая ветвь, где был переписан код, он стал более структурирован и эффективен.
- Compat — старое направление, но в нем шире набор скриптов, он лучше работает в сторонних проектах MediaWiki, да и многим работа с ним привычнее.
Баги и пожелания новых функций собираются в едином с MediaWiki багтрекере, разработка сейчас идет через Git/Gerrit, что упростило привлечение новых разработчиков, добавление новых патчей и их ревью. Раньше разработка шла через SVN, но в итоге, для унификации ресурсов с MediaWiki и расширения круга разработчиков, было решено переехать на Git/Gerrit: про преимущества Git над SVN даже топик на Хабре есть.
Я не буду описывать весь набор уже существующих функций фреймворка, желающие могут погулять по репозитарию и посмотреть: могу лишь сказать, что он активно наполняется, а существующие скрипты требуют минимальной наладки для запуски в любом языковом разделе.
AutoWikiBrowser
Если описанный выше бот работает в консоли, то AWB (AutoWikiBrowser) — более дружелюбный для простого пользователя инструмент.
У AWB есть полноценный интерфейс, автоматическое обновление, и работает он только на Windows (неофициально — и под Wine). Типичные функции AWB: замена текста по регулярным выражениям, иные правки по определенному списку статей. AWB умеет рекурсивно обходить категории Википедии, сравнивать списки, выделяя уникальные элементы или пересечения, и даже обрабатывать дампы Википедии. При этом здесь также есть ограничения для работы с аккаунтов, не имеющих флаг администратора или бота — составляемые списки для таких участников имеют ограничение в 25 000 строк. Если у же у вас есть флаг бота, то ограничения полностью снимаются при подгрузке специального плагина. Важная оговорка: т.к. потенциально с помощью AWB можно быстро сделать ряд неконструктивных правок, в том числе вандальных, то его использование технически ограничено до пользователей, одобренных администраторами: если имя пользователя не указано на этой странице, то AWB откажется от работы.
В общем случае при сохранении каждой правки нужно вручную кликать на кнопку «Сохранить», автосохранение возможно только если AWB запущен из-под учетной записи, имеющей флаг бота. Поэтому AWB сложно использовать для действительно масштабных заданий, но для небольших задач он весьма удобен, так как позволяет автоматизировать определенные действия и быстро реализовывать желаемое без необходимости обращения к участникам с более продвинутыми ботами (например, см. выше). Лично я часто использую AWB именно для составления списков, а затем уже быстро прогоняю pywikibot с необходимым заданием: в pywikibot тоже есть специальный генератор страниц, который все это умеет, но лично мне нагляднее и проще сделать все через программу с GUI.
Исходный код AWB открыт, программа написана на C# и поддерживается ограниченным кругом разработчиков. При запуске программа сама проверяет наличие обновлений и устанавливает их, дистрибутив также выкладывается на SourceForge. В случае возникновения критичных ошибок в ходе работы, AWB составляет баг-репорт и помогает передать его разработчикам.
Другое
Есть боты, работающие на Perl, .NET, JAVA, но они чаще поддерживаются отдельными энтузиастами, и не имеют широкого распространения. Лично я когда-то запускал вики-скрипты и на PHP, но массовая поддержка pywikibot, активный багтрекер и отзывчивость большого числа разработчиков полностью склонили меня к работе с этим ботом, поэтому подробно рассказать об иных фреймворках я не в состоянии :)
Toolserver
Раздел выше был посвящен скриптам и ботам, которые по большей степени запускаются с компьютера участника либо с его сервера. Но помимо этого существует возможность запуска скриптов с площадок организаций Викимедиа: раньше существовал Тулсервер, который поддерживало немецкое отделение Викимедиа, с 30 июня 2014 года он был отключен в связи с тем, что была создана система Labs, но обо всем по порядку.
История Тулсервера началась в 2005 году, когда Sun Microsystems подарила сервер V40z (2* Opteron 848, 2.2 GHz, 8 GB RAM, диск 6*146 GB, внешний RAID на 12*400 GB) для использования на Викиконференции во Франкфурте. После конференции его унес домой один из участников немецкого отделения и сделал из него кофейный столик; через некоторое время его решили установить в Амстердаме на базе Kennisnet, где были установлены и полсотни серверов Фонда Викимедиа.
После этого на Тулсервере начинают запускать различные скрипты и инструменты (счетчики правок, различные анализаторы статей, инструменты для загрузки файлов и т.п.), а мощности Тулсервера стали увеличиваться: на момент закрытия работало 17 серверов, регистрировалось более 3 миллионов обращений к Тулсерверу в день, трафик доходил до 40 Мб/с. Каждый из серверов имел от 24 до 64 Гб оперативной памяти, в основном они работали на Solaris 10 (и постепенно переходили на Linux), суммарное дисковое пространство составляло 8 Тб.
В чем был главные плюсы Тулсервера как площадки?
- Репликация с серверами Фонда Викимедиа — подробнее будет ниже.
- Открытость — при наличии обоснованных целей и навыков аккаунт было несложно получить.
- Достаточная закрытость своего кода: если новый Labs требует кода под открытой лицензией, а сами файлы по большей части открыты для просмотра всеми участниками Labs (за исключением паролей, логинов и т.п.), то Тулсервер в этом плане был гораздо демократичнее.
Были и свои минусы:
- система работала в режиме «as is», т.к. финансирование было ограничено, были ограничены и возможности поддерживающих систему админов: многие ошибки системы не исправлялись годами;
- в случае неактивности разработчика, его код и труды пропадали, а Википедия зачастую лишалась инструментов, к которым уже давно привыкла; на Labs из-за открытости и доступности кода любой проект может начать поддерживать другой разработчик;
- в какой-то момент были введены жесткие ограничения на потребление системных ресурсов, что привело к отключению некоторых полезных, но затратных инструментов.
Но давайте вернемся к главному плюсу — репликации: без нее Тулсервер ничем бы не отличался от обычного хостинга, где можно запускать свои процессы. С помощью репликации на Тулсервере всегда были актуальные БД Википедии, поэтому инструменты могли напрямую работать с базой данных, а не делать огромные API-запросы, обрабатывать порой неактуальные дампы и т.п.
Примерная схема репликации показана на картинке ниже:
Тампа на схеме — это и есть основные БД Фонда, расположенные в США; кластеры s1-s4 отвечают за БД: например, s1 — английская Википедия, s2 — некоторые крупные разделы, и т.д. Данные из Тампы реплицируются на БД Тулсервера в Амстердаме, и уже там к ним получают доступ пользователи Тулсервера и их инструменты. Естественно, всегда был какой-то лаг репликации, причем из-за использования разных кластеров могла быть ситуация, когда лаг для обработки данных английской Википедии был равен 1 минуте, а для русской Википедии — 2-3 дня. Например, 21 июня (незадолго до отключения) лаг составлял до 28 сек.
Эта доступность актуальных данных и была главным преимуществом Тулсервера: можно было практически в режиме онлайн проанализировать, какие файлы не используются, сколько правок и действий сделал любой участник во всех проектах Фонда и много другой информации, которую напрямую движок Википедии не предоставляет.
Заключение
Поддержка Тулсервера была тяжелым грузом для немецкого отделения, система имела определенные ограничения, и с 1 июля Тулсервер был полностью заменен новым проектом Labs, который целиком поддерживается самим Фондом Викимедиа. Это новый большой проект, про него я напишу в следующем посте, но могу для затравки опубликовать июньскую статистику Labs :)
- работает 213 проектов
- в системе зарегистрировано 3 356 пользователей
- используется 1 714 312 MB RAM
- занято 19 045 GB дискового пространства
До скорых встреч!